/** * Fires an {@link FeatureEvent} to all listeners. * * @param featureEvent the event to be passed to all listeners. */ protected void fireEvent(FeatureEvent featureEvent) { featureEventSource.fireEvent(featureEvent); } }
/** * Adds a listener to the list of listeners. * * @param featureEventListener the listener to be added. */ protected void addFeatureEventListener(FeatureEventListener featureEventListener) { featureEventSource.addFeatureEventListener(featureEventListener); }
/** * Emits an {@link FeatureEvent} to all listeners that were previously added. * * @param featureEvent the event to emit to all listeners. */ public void fireEvent(FeatureEvent featureEvent) { for (FeatureEventListener featureEventListener : featureEventListeners) { featureEventListener.onFeatureEvent(featureEvent); } } }
/** * Creates an observable of {@link FeatureEvent}s out of a {@link FeatureControllerGroup}. It is * possible to call this method multiple times on the controller. * * <p><em>Warning:</em> The created observable keeps a strong reference to {@code * featureControllers}. Unsubscribe to free this reference. * * @param featureControllers a list of feature controllers. * @return an observable of the {@link FeatureEvent} that this group emits. */ public static <MODEL> Observable<FeatureEvent> featureEvents( List<FeatureController<MODEL>> featureControllers) { List<Observable<FeatureEvent>> observables = new ArrayList<>(); for (FeatureController controller : featureControllers) { observables.add(featureEvents(controller)); } return merge(observables); }
/** * Removes a listener to the list of listeners. * * @param featureEventListener the listener to be removed. */ protected void removeFeatureEventListener(FeatureEventListener featureEventListener) { featureEventSource.removeFeatureEventListener(featureEventListener); }
/** * Creates an observable of {@link FeatureEvent}s out of a {@link FeatureController}. It is * possible to call this method multiple times on the controller. * * <p><em>Warning:</em> The created observable keeps a strong reference to {@code controller}. * Unsubscribe to free this reference. * * @param controller a {@link FeatureController}. * @return an observable of the {@link FeatureEvent} that this controller emits. */ public static <MODEL> Observable<FeatureEvent> featureEvents( FeatureController<MODEL> controller) { return Observable.create(new FeatureControllerOnSubscribe(controller)); } }
private final FeatureEventSource featureEventSource = new FeatureEventSource();
@Test public void addFeatureEventListener_should_relayTheEventsFromTheAdapterViewTypeDelegates() { //GIVEN AdapterViewTypeDelegate stubAdapterViewTypeDelegate = new StubAdapterViewTypeDelegate(); FeatureController<String> featureController = new StubFeatureController<>(asList(stubAdapterViewTypeDelegate)); FeatureEventListener mockListener = createMock(FeatureEventListener.class); final FeatureEvent featureEvent = new FeatureEvent() {}; mockListener.onFeatureEvent(featureEvent); replay(mockListener); //WHEN featureController.addFeatureEventListener(mockListener); stubAdapterViewTypeDelegate.fireEvent(featureEvent); //THEN verify(mockListener); }
featureEvents(features) .observeOn(computation()) .cast(Command.class)
/** * Fires an {@link FeatureEvent} to all listeners. * * @param featureEvent the event to be passed to all listeners. */ protected void fireEvent(FeatureEvent featureEvent) { featureEventSource.fireEvent(featureEvent); } }
/** * Adds a {@link FeatureEventListener} to all the {@link AdapterViewTypeDelegate} returned by * {@link #getAdapterViewTypeDelegates()}. * * @param featureEventListener the listener to be added. */ public void addFeatureEventListener(FeatureEventListener featureEventListener) { featureEventSource.addFeatureEventListener(featureEventListener); for (AdapterViewTypeDelegate adapterViewTypeDelegate : getAdapterViewTypeDelegates()) { adapterViewTypeDelegate.addFeatureEventListener(featureEventListener); } }
/** * Removes a {@link FeatureEventListener} from all the {@link AdapterViewTypeDelegate} returned by * {@link #getAdapterViewTypeDelegates()}. * * @param featureEventListener the listener to be removed. */ public void removeFeatureEventListener(FeatureEventListener featureEventListener) { featureEventSource.removeFeatureEventListener(featureEventListener); for (AdapterViewTypeDelegate adapterViewTypeDelegate : getAdapterViewTypeDelegates()) { adapterViewTypeDelegate.removeFeatureEventListener(featureEventListener); } }