package com.example.scoop.basics; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.ViewGroup; import butterknife.BindView; import butterknife.ButterKnife; import com.example.scoop.basics.scoop.AppRouter; import com.example.scoop.basics.scoop.DialogRouter; import com.example.scoop.basics.scoop.DialogUiContainer; import com.example.scoop.basics.scoop.MainUiContainer; import com.example.scoop.basics.ui.DemoScreen; import com.lyft.scoop.Scoop; import com.lyft.scoop.dagger.DaggerInjector; import dagger.ObjectGraph; import javax.inject.Inject; import rx.subscriptions.CompositeSubscription; import timber.log.Timber; public class MainActivity extends AppCompatActivity { @BindView(R.id.screen_container) MainUiContainer mainUiContainer; @BindView(R.id.dialog_container) DialogUiContainer dialogContainer; @Inject AppRouter appRouter; @Inject DialogRouter dialogRouter; private CompositeSubscription subscriptions = new CompositeSubscription(); private Scoop activityScoop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Timber.d("onCreate"); setContentView(R.layout.activity_main); getActivityScoop().inflate(R.layout.root, (ViewGroup) findViewById(R.id.root), true); ButterKnife.bind(this); DaggerInjector.fromScoop(getActivityScoop()).inject(this); } @Override protected void onResume() { super.onResume(); Timber.d("onResume"); if (!appRouter.hasActiveScreen()) { appRouter.goTo(new DemoScreen()); } } @Override protected void onPause() { super.onPause(); Timber.d("onPause"); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); } @Override protected void onDestroy() { Timber.d("onDestroy"); subscriptions.clear(); getActivityScoop().destroy(); super.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); } @Override public void onBackPressed() { if (dialogContainer.onBack()) { return; } if (mainUiContainer.onBack()) { return; } if (dialogRouter.dismiss()) { return; } if (appRouter.goBack()) { return; } super.onBackPressed(); } private Scoop getActivityScoop() { if (activityScoop == null) { Timber.d("getActivityScoop"); ObjectGraph activityGraph = getApp().getApplicationGraph().plus(new MainActivityModule(this)); DaggerInjector activityInjector = new DaggerInjector(activityGraph); activityScoop = new Scoop.Builder("activity_scoop") .service(DaggerInjector.SERVICE_NAME, activityInjector) .build(); } return activityScoop; } private App getApp() { return (App) getApplicationContext(); } }