/**
  * Sets an event listener to be called when events occur, so they can be reported by the app as,
  * for example, Google Analytics events. If not set or set to null, no events will be reported.
  *
  * @param eventListener The event listener.
  * @throws IllegalArgumentException if the eventListener is an inner or anonymous class
  */
 public static void setEventListener(EventListener eventListener) {
   if (eventListener != null
       && eventListener.getClass().getEnclosingClass() != null
       && !Modifier.isStatic(eventListener.getClass().getModifiers())) {
     throw new IllegalArgumentException(
         "The event listener cannot be an inner or anonymous class, because it will need to be serialized. Change it to a class of its own, or make it a static inner class.");
   } else {
     CustomActivityOnCrash.eventListener = eventListener;
   }
 }
Example #2
0
 public synchronized void registerListener(EventListener listener) {
   Class<? extends EventListener> listenerClass = listener.getClass();
   for (Method method : listenerClass.getMethods()) {
     if (!method.isAnnotationPresent(EventHandler.class)) continue;
     if (method.getParameterTypes().length != 1)
       throw new IllegalArgumentException(
           "Method "
               + method.toString()
               + " in class "
               + method.getDeclaringClass().getName()
               + " has incorrect amount of parameters");
     Class<? extends Event> eventClass = method.getParameterTypes()[0].asSubclass(Event.class);
     boolean senderExists = false;
     for (EventSender sender : eventSenders) {
       if (eventClass.isAssignableFrom(sender.getListenerEventClass()))
         sender.addHandler(listener, method);
       if (eventClass == sender.getListenerEventClass()) senderExists = true;
     }
     if (!senderExists) {
       EventSender sender = new EventSender(eventClass);
       eventSenders.add(sender);
       sender.addHandler(listener, method);
     }
   }
 }
 private synchronized Cluster clusterFor(EventListener eventListener) {
   Cluster cluster = clusterSelector.selectCluster(eventListener);
   if (cluster == null) {
     Class listenerType = eventListener.getClass();
     if (eventListener instanceof EventListenerProxy) {
       listenerType = ((EventListenerProxy) eventListener).getTargetType();
     }
     throw new EventListenerSubscriptionFailedException(
         format(
             "Unable to subscribe [%s] to the Event Bus. There is no suitable cluster for it. "
                 + "Make sure the ClusterSelector is configured properly",
             listenerType.getName()));
   }
   if (clusters.add(cluster)) {
     terminal.onClusterCreated(cluster);
   }
   return cluster;
 }