package eu.inloop.viewmodel.base; import android.os.Bundle; import android.support.annotation.CallSuper; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import eu.inloop.viewmodel.AbstractViewModel; import eu.inloop.viewmodel.IView; import eu.inloop.viewmodel.ProxyViewHelper; import eu.inloop.viewmodel.ViewModelHelper; import eu.inloop.viewmodel.binding.ViewModelBindingConfig; public abstract class ViewModelBaseActivity<T extends IView, R extends AbstractViewModel<T>> extends ViewModelBaseEmptyActivity implements IView { @NonNull private final ViewModelHelper<T, R> mViewModeHelper = new ViewModelHelper<>(); @CallSuper @Override protected void onCreate(@Nullable final Bundle savedInstanceState) { super.onCreate(savedInstanceState); Class<? extends AbstractViewModel<T>> viewModelClass = getViewModelClass(); // try to extract the ViewModel class from the implementation if (viewModelClass == null) { //noinspection unchecked viewModelClass = (Class<? extends AbstractViewModel<T>>) ProxyViewHelper.getGenericType(getClass(), AbstractViewModel.class); } mViewModeHelper.onCreate(this, savedInstanceState, viewModelClass, getIntent().getExtras()); } /** * Call this after your view is ready - usually on the end of {@link android.app.Activity#onCreate(Bundle)} * @param view view */ @SuppressWarnings("unused") public void setModelView(@NonNull final T view) { mViewModeHelper.setView(view); } @Nullable public Class<R> getViewModelClass() { return null; } @CallSuper @Override public void onSaveInstanceState(@NonNull final Bundle outState) { super.onSaveInstanceState(outState); mViewModeHelper.onSaveInstanceState(outState); } @CallSuper @Override public void onStart() { super.onStart(); mViewModeHelper.onStart(); } @CallSuper @Override public void onStop() { super.onStop(); mViewModeHelper.onStop(); } @CallSuper @Override public void onDestroy() { mViewModeHelper.onDestroy(this); super.onDestroy(); } /** * @see ViewModelHelper#getViewModel() */ @SuppressWarnings("unused") @NonNull public R getViewModel() { return mViewModeHelper.getViewModel(); } @Override public void removeViewModel() { mViewModeHelper.removeViewModel(this); } @Nullable @Override public ViewModelBindingConfig getViewModelBindingConfig() { return null; } }