/** * {@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#onSaveInstanceState(Bundle)}, {@link android.app.Fragment#onSaveInstanceState(Bundle)}, {@link android.view.View#onSaveInstanceState()}. */ public Bundle onSaveInstanceState() { Bundle bundle = new Bundle(); getPresenter(); if (presenter != null) { Bundle presenterBundle = new Bundle(); presenter.save(presenterBundle); bundle.putBundle(PRESENTER_KEY, presenterBundle); bundle.putString(PRESENTER_ID_KEY, PresenterStorage.INSTANCE.getId(presenter)); } return bundle; }
@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)); }
@After public void after() { PresenterStorage.INSTANCE.clear(); } }
public PresenterStorage mockStorage() { PresenterStorage storage = mock(PresenterStorage.class); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { presenters.add((Presenter) invocation.getArguments()[0]); return null; } }).when(storage).add(any(Presenter.class)); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { return "" + presenters.indexOf(invocation.getArguments()[0]); } }).when(storage).getId(any(Presenter.class)); doAnswer(new Answer<Object>() { @Override public Object answer(InvocationOnMock invocation) throws Throwable { return presenters.get(Integer.parseInt((String) invocation.getArguments()[0])); } }).when(storage).getPresenter(anyString()); Whitebox.setInternalState(PresenterStorage.class, "INSTANCE", storage); return storage; }