fun showHilt(hiltImageUrl: String) fun showBlade(color: Int, length: Int) fun hideBlade() interface Presenter { } fun attach() fun detach() fun activate() fun deactivate() class LightSaberPresenter: LightSaberMVP.Presenter interface LightSaberPresenterImpl: LightSaberPresenter
fun showHilt(hiltImageUrl: String) fun showBlade(color: Int, length: Int) fun hideBlade() interface Presenter { } fun attach() fun detach() fun activate() fun deactivate()
fun onDestroy() fun onActivated() fun onDeactivated() @shekibobo #IOextendedGR Implementation Details interface Presenter { } fun attach() fun detach() fun activate() fun deactivate() interface Presenter { } fun onAttached() fun onDetached() fun onActivated() fun onDeactivated()
fun attach() fun detach() fun activate() fun deactivate() interface Presenter { } fun attach(view: View) fun detach(cache: Bool = false) fun activate() fun deactivate()
fun attach() fun detach() fun activate() fun deactivate() ‣ Usage: ‣ Presenter owned by View. ‣ Update view as soon as it's attached. ‣ Detach view to cancel or cache.
fun attach() fun detach() fun activate() fun deactivate() ‣ Benefits: ‣ View is @Nonnull. ‣ Fewer paths to test. ‣ Does not need to track state. ‣ Downsides: ‣ Long-running processes are lost.
fun attach() fun detach() fun activate() fun deactivate() interface Presenter { } fun attach(view: View) fun detach(cache: Bool = false) fun activate() fun deactivate()
fun attach(view: View) fun detach(cache: Bool = false) fun activate() fun deactivate() ‣ Usage: ‣ Presenter created without view. ‣ Weak reference to view bound in Activity.onCreate(). ‣ Persisted in PresenterCache when detached.
fun attach(view: View) fun detach(cache: Bool = false) fun activate() fun deactivate() ‣ Benefits: ‣ Lifecycle independence. ‣ Can be cached in @ApplicationScope PresenterCache. ‣ Downsides: ‣ Presenter owns state instead of model. ‣ View is @Nullable. ‣ Extra testing steps and scenarios. ‣ Attach has important side-effects that complicate testing.
Charles Woods swmand4 Further Reading Presenters are Not for Persisting https://hackernoon.com/presenters-are-not-for-persisting-f537a2cc7962 Model-View-Presenter: Android Guidelines https://medium.com/@cervonefrancesco/model-view-presenter-android-guidelines-94970b430ddf Clean Architecture with Kotlin + RxJava + Dagger 2 https://medium.com/uptech-team/clean-architecture-in-android-with-kotlin-rxjava-dagger-2-2fdc7441edfc