package ua.kpi.ecampus.ui.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import java.util.List; import butterknife.ButterKnife; import dagger.ObjectGraph; import ua.kpi.ecampus.CampusApplication; import ua.kpi.ecampus.di.ActivityModule; /** * Base activity created to be extended by every activity class. * This class provides dependency injection configuration, ButterKnife * Android library configuration and some methods common to every activity. * <p> * Created by Administrator on 26.01.2016. */ public abstract class BaseActivity extends AppCompatActivity { private ObjectGraph objectGraph; @Override protected void onCreate(Bundle savedInstanceState) { injectDependencies(); super.onCreate(savedInstanceState); } /** * Create a new Dagger ObjectGraph to add new dependencies using a plus * operation and inject the declared one in the activity. This new graph * will be destroyed once the activity lifecycle finish. * <p> * This is the key of how to use Activity scope dependency injection. */ private void injectDependencies() { CampusApplication application = (CampusApplication) getApplication(); List<Object> modules = getModules(); modules.add(new ActivityModule(this)); objectGraph = application.plus(modules); inject(this); } /** * Method used to resolve dependencies provided by Dagger modules. Inject * an object to provide * every @Inject annotation contained. * * @param object to inject. */ public void inject(Object object) { objectGraph.inject(object); } /** * Get a list of Dagger modules with Activity scope needed to this Activity. * * @return modules with new dependencies to provide. */ protected abstract List<Object> getModules(); /** * Replace every field annotated with ButterKnife annotations like @Bind * with the proper * value. */ protected void bindViews() { ButterKnife.bind(this); } }