package eu.inloop.viewmodel.base; import android.os.Bundle; import android.support.annotation.CallSuper; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import eu.inloop.viewmodel.IViewModelProvider; import eu.inloop.viewmodel.ViewModelProvider; /** * All your activities must extend this activity - even in case your activity has no viewmodel. The fragment viewmodels are using the {@link IViewModelProvider} * interface to get the {@link ViewModelProvider} from the current activity. * You can copy this implementation in case you don't want to extend this class. */ public abstract class ViewModelBaseEmptyActivity extends AppCompatActivity implements IViewModelProvider { @Nullable private ViewModelProvider mViewModelProvider; @CallSuper @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { //This code must be execute prior to super.onCreate() mViewModelProvider = ViewModelProvider.newInstance(this); super.onCreate(savedInstanceState); } @Override @Nullable public Object onRetainCustomNonConfigurationInstance() { return mViewModelProvider; } @CallSuper @Override public void onStop() { super.onStop(); if (isFinishing()) { if (null == mViewModelProvider) { throw new IllegalStateException("ViewModelProvider for activity " + this + " was null."); //NON-NLS } mViewModelProvider.removeAllViewModels(); } } @Nullable @Override public ViewModelProvider getViewModelProvider() { return mViewModelProvider; } }