package com.mortarnav; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import com.mortarnav.deps.WithActivityDependencies; import com.mortarnav.stackable.HomeStackable; import com.mortarnav.view.MyPopup2View; import com.mortarnav.view.MyPopupView; import javax.inject.Inject; import architect.Navigator; import architect.NavigatorView; import architect.TransitionsMapping; import architect.commons.ActivityArchitector; import architect.commons.Architected; import architect.commons.transition.BottomAppearTransition; import architect.commons.transition.Config; import architect.commons.transition.FadeModalTransition; import architect.commons.transition.LateralViewTransition; import architect.robot.DaggerService; import autodagger.AutoComponent; import autodagger.AutoInjector; import butterknife.Bind; import butterknife.ButterKnife; import mortar.MortarScope; import mortar.bundler.BundleServiceRunner; /** * Root activity * * @author Lukasz Piliszczuk - lukasz.pili@gmail.com */ @AutoComponent( dependencies = App.class, superinterfaces = WithActivityDependencies.class ) @AutoInjector @DaggerScope(MainActivity.class) public class MainActivity extends AppCompatActivity { private MortarScope scope; private Navigator navigator; @Inject protected ToolbarOwner toolbarOwner; @Bind(R.id.navigator_container) protected NavigatorView containerView; @Bind(R.id.toolbar) protected Toolbar toolbar; @Override public Object getSystemService(String name) { if (scope != null && scope.hasService(name)) { return scope.getService(name); } return super.getSystemService(name); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); toolbar.setTitle("Mortar architect"); setSupportActionBar(toolbar); scope = ActivityArchitector.onCreateScope(this, savedInstanceState, new Architected() { @Override public Navigator createNavigator(MortarScope scope) { Navigator navigator = Navigator.create(scope, new Parceler()); navigator.transitions().register(new TransitionsMapping() .byDefault(new LateralViewTransition(new Config().duration(300))) .show(MyPopupView.class).withTransition(new FadeModalTransition(new Config().duration(250))) .show(MyPopup2View.class).withTransition(new BottomAppearTransition(true, new Config().duration(1000))) // .show(SlidesView.class).withTransition(new CustomFullScreenLateralTransition()) ); return navigator; } @Override public void configureScope(MortarScope.Builder builder, MortarScope parentScope) { MainActivityComponent component = DaggerMainActivityComponent.builder() .appComponent(parentScope.<AppComponent>getService(DaggerService.SERVICE_NAME)) .build(); builder.withService(DaggerService.SERVICE_NAME, component); } }); DaggerService.<MainActivityComponent>get(this).inject(this); toolbarOwner.takeView(toolbar); // it is usually the best to create the navigator after everything else navigator = ActivityArchitector.onCreateNavigator(this, savedInstanceState, containerView, new HomeStackable("Default home path")); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); navigator.delegate().onNewIntent(intent); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); BundleServiceRunner.getBundleServiceRunner(scope).onSaveInstanceState(outState); navigator.delegate().onSaveInstanceState(outState); } @Override protected void onStart() { super.onStart(); navigator.delegate().onStart(); } @Override protected void onStop() { navigator.delegate().onStop(); super.onStop(); } @Override protected void onDestroy() { toolbarOwner.dropView(toolbar); navigator.delegate().onDestroy(); navigator = null; if (isFinishing() && scope != null) { scope.destroy(); scope = null; } super.onDestroy(); } @Override public void onBackPressed() { if (navigator.delegate().onBackPressed()) { return; } super.onBackPressed(); } }