/** * {@link android.app.Activity#onDestroy()}, * {@link android.app.Fragment#onDestroy()}, * {@link android.view.View#onDetachedFromWindow()} */ public void onDestroy(boolean isFinal) { if (presenter != null && isFinal) { presenter.destroy(); presenter = null; } } }
/** * Initializes the presenter. */ public void create(Bundle bundle) { onCreate(bundle); }
/** * Saves the presenter. */ public void save(Bundle state) { onSave(state); }
@Test public void testOnNoDestroy() throws Exception { Presenter.OnDestroyListener listener = mock(Presenter.OnDestroyListener.class); Presenter presenter = new Presenter(); presenter.create(null); presenter.addOnDestroyListener(listener); presenter.removeOnDestroyListener(listener); presenter.destroy(); verifyNoMoreInteractions(listener); } }
Presenter mockPresenter() { Presenter presenter = mock(Presenter.class); final ArrayList<Presenter.OnDestroyListener> onDestroyListeners = new ArrayList<>(); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { onDestroyListeners.add((Presenter.OnDestroyListener) invocation.getArguments()[0]); return null; } }).when(presenter).addOnDestroyListener(any(Presenter.OnDestroyListener.class)); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { for (Presenter.OnDestroyListener listener : onDestroyListeners) listener.onDestroy(); return null; } }).when(presenter).destroy(); return presenter; }
@Test public void testSavePresenter() throws Exception { Presenter presenter = new Presenter(); PresenterStorage.INSTANCE.add(presenter); Presenter presenter2 = new Presenter(); PresenterStorage.INSTANCE.add(presenter2); String id = PresenterStorage.INSTANCE.getId(presenter); assertNotEquals(id, PresenterStorage.INSTANCE.getId(presenter2)); assertEquals(presenter, PresenterStorage.INSTANCE.getPresenter(id)); presenter.destroy(); assertNull(PresenterStorage.INSTANCE.getPresenter(id)); }
/** * Adds a presenter to the storage * * @param presenter a presenter to add */ public void add(final Presenter presenter) { String id = presenter.getClass().getSimpleName() + "/" + System.nanoTime() + "/" + (int)(Math.random() * Integer.MAX_VALUE); idToPresenter.put(id, presenter); presenterToId.put(presenter, id); presenter.addOnDestroyListener(new Presenter.OnDestroyListener() { @Override public void onDestroy() { idToPresenter.remove(presenterToId.remove(presenter)); } }); }
/** * {@link ViewWithPresenter#getPresenter()} */ public P getPresenter() { if (presenterFactory != null) { if (presenter == null && bundle != null) presenter = PresenterStorage.INSTANCE.getPresenter(bundle.getString(PRESENTER_ID_KEY)); if (presenter == null) { presenter = presenterFactory.createPresenter(); PresenterStorage.INSTANCE.add(presenter); presenter.create(bundle == null ? null : bundle.getBundle(PRESENTER_KEY)); } bundle = null; } return presenter; }
/** * {@link android.app.Activity#onDestroy()}, * {@link android.app.Fragment#onDestroyView()}, * {@link android.view.View#onDetachedFromWindow()} */ public void onDropView() { if (presenter != null && presenterHasView) { presenter.dropView(); presenterHasView = false; } }
/** * Detaches the presenter from a view. */ public void dropView() { onDropView(); this.view = null; } }
/** * Please, use restartableXX and deliverXX methods for pushing data from RxPresenter into View. */ @Deprecated @Nullable @Override public View getView() { return super.getView(); } }
/** * Destroys the presenter, calling all {@link Presenter.OnDestroyListener} callbacks. */ public void destroy() { for (OnDestroyListener listener : onDestroyListeners) listener.onDestroy(); onDestroy(); }
@Test public void testOnDestroy() throws Exception { Presenter.OnDestroyListener listener = mock(Presenter.OnDestroyListener.class); Presenter presenter = new Presenter(); presenter.create(null); presenter.addOnDestroyListener(listener); presenter.destroy(); verify(listener, times(1)).onDestroy(); verifyNoMoreInteractions(listener); }
@Override public void onCreate(Bundle savedState) { super.onCreate(savedState); if (savedState != null) value = savedState.getInt("1"); }
@Override public void onSave(Bundle state) { super.onSave(state); state.putInt("1", 1); } }