package com.pluscubed.plustimer.base; import android.content.Context; import android.content.Loader; public final class PresenterLoader<T extends Presenter> extends Loader<T> { private final PresenterFactory<T> factory; private T presenter; public PresenterLoader(Context context, PresenterFactory<T> factory) { super(context); this.factory = factory; } @Override protected void onStartLoading() { // if we already own a presenter instance, simply deliver it. if (presenter != null) { deliverResult(presenter); return; } // Otherwise, force a load forceLoad(); } @Override protected void onForceLoad() { // Create the Presenter using the Factory presenter = factory.create(); // Deliver the result deliverResult(presenter); } @Override public void deliverResult(T data) { super.deliverResult(data); } @Override protected void onStopLoading() { } @Override protected void onReset() { if (presenter != null) { presenter.onDestroyed(); presenter = null; } } }