package com.luseen.arch; import android.arch.lifecycle.LifecycleRegistry; import android.arch.lifecycle.LifecycleRegistryOwner; import android.arch.lifecycle.ViewModelProviders; import android.os.Bundle; import android.support.annotation.CallSuper; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; /** * Created by Chatikyan on 20.05.2017. */ public abstract class BaseActivity<V extends BaseContract.View, P extends BaseContract.Presenter<V>> extends AppCompatActivity implements BaseContract.View, LifecycleRegistryOwner { private final LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this); protected P presenter; @SuppressWarnings("unchecked") @CallSuper @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); BaseViewModel<V, P> viewModel = ViewModelProviders.of(this).get(BaseViewModel.class); boolean isPresenterCreated = false; if (viewModel.getPresenter() == null) { viewModel.setPresenter(initPresenter()); isPresenterCreated = true; } presenter = viewModel.getPresenter(); presenter.attachLifecycle(getLifecycle()); presenter.attachView((V) this); if (isPresenterCreated) presenter.onPresenterCreated(); } @Override public LifecycleRegistry getLifecycle() { return lifecycleRegistry; } @CallSuper @Override protected void onDestroy() { super.onDestroy(); presenter.detachLifecycle(getLifecycle()); presenter.detachView(); } protected abstract P initPresenter(); }