package com.pluscubed.plustimer.base;
import android.app.LoaderManager;
import android.content.Loader;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public abstract class BasePresenterActivity<P extends Presenter<V>, V> extends AppCompatActivity {
private static final String TAG = "base-activity";
private static final int LOADER_ID = 101;
protected P presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PresenterFactory<P> presenterFactory = getPresenterFactory();
if(presenterFactory!=null) {
getLoaderManager().initLoader(LOADER_ID, null, new LoaderManager.LoaderCallbacks<P>() {
@Override
public final Loader<P> onCreateLoader(int id, Bundle args) {
Log.i(TAG, "onCreateLoader");
return new PresenterLoader<>(BasePresenterActivity.this, presenterFactory);
}
@Override
public final void onLoadFinished(Loader<P> loader, P presenter) {
Log.i(TAG, "onLoadFinished");
BasePresenterActivity.this.presenter = presenter;
onPresenterPrepared(presenter);
}
@Override
public final void onLoaderReset(Loader<P> loader) {
Log.i(TAG, "onLoaderReset");
BasePresenterActivity.this.presenter = null;
onPresenterDestroyed();
}
});
}
}
@Override
protected void onResume() {
super.onResume();
if(presenter!=null)
presenter.onViewAttached(getPresenterView());
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
if(presenter!=null)
presenter.onViewDetached();
super.onDestroy();
}
/**
* Default: returns null, disables MVP loader
*/
protected PresenterFactory<P> getPresenterFactory(){
return null;
}
protected void onPresenterPrepared(P presenter){
}
protected void onPresenterDestroyed() {
// hook for subclasses
}
// Override in case of Activity not implementing Presenter<View> interface
protected V getPresenterView() {
return (V) this;
}
}