package com.zhuinden.simplestackdemoexamplefragments.application; import android.content.Context; import android.content.res.Configuration; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.util.AttributeSet; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.RelativeLayout; import com.zhuinden.simplestack.Backstack; import com.zhuinden.simplestackdemoexamplefragments.R; import com.zhuinden.simplestackdemoexamplefragments.presentation.paths.statistics.StatisticsKey; import com.zhuinden.simplestackdemoexamplefragments.presentation.paths.tasks.TasksKey; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by Owner on 2017. 01. 26.. */ public class MainView extends DrawerLayout { @BindView(R.id.root) RelativeLayout root; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.nav_view) NavigationView navigationView; DrawerLayout drawerLayout; @BindView(R.id.fab_add_task) FloatingActionButton fabAddTask; @Inject Backstack backstack; private void setCheckedItem(int navigationItemId) { Menu menu = navigationView.getMenu(); for(int i = 0; i < menu.size(); i++) { MenuItem menuItem = menu.getItem(i); menuItem.setChecked(menuItem.getItemId() == navigationItemId); } } private ActionBarDrawerToggle drawerToggle; public void setupViewsForKey(Key key) { if(key.shouldShowUp()) { setDrawerLockMode(LOCK_MODE_LOCKED_CLOSED, GravityCompat.START); drawerToggle.setDrawerIndicatorEnabled(false); MainActivity.get(getContext()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } else { setDrawerLockMode(LOCK_MODE_UNLOCKED, GravityCompat.START); MainActivity.get(getContext()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); drawerToggle.setDrawerIndicatorEnabled(true); } drawerToggle.syncState(); setCheckedItem(key.navigationViewId()); MainActivity.get(getContext()).supportInvalidateOptionsMenu(); if(key.isFabVisible()) { fabAddTask.setVisibility(View.VISIBLE); } else { fabAddTask.setVisibility(View.GONE); } Fragment fragment = MainActivity.get(getContext()).getSupportFragmentManager().findFragmentByTag(key.getFragmentTag()); fabAddTask.setOnClickListener(key.fabClickListener(fragment)); if(key.fabDrawableIcon() != 0) { fabAddTask.setImageResource(key.fabDrawableIcon()); } } private final NavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener = (NavigationView.OnNavigationItemSelectedListener) item -> { switch(item.getItemId()) { case R.id.list_navigation_menu_item: backstack.goTo(TasksKey.create()); break; case R.id.statistics_navigation_menu_item: backstack.goTo(StatisticsKey.create()); default: break; } setCheckedItem(item.getItemId()); // Close the navigation drawer when an item is selected. drawerLayout.closeDrawers(); return true; }; public MainView(Context context) { super(context); init(context); } public MainView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public MainView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } private void init(Context context) { if(!isInEditMode()) { CustomApplication.get(context).getComponent().inject(this); } } @Override protected void onFinishInflate() { super.onFinishInflate(); ButterKnife.bind(this); drawerLayout = this; } public void onCreate() { navigationView.setNavigationItemSelectedListener(navigationItemSelectedListener); MainActivity.get(getContext()).setSupportActionBar(toolbar); ActionBar actionBar = MainActivity.get(getContext()).getSupportActionBar(); drawerToggle = new ActionBarDrawerToggle(MainActivity.get(getContext()), drawerLayout, toolbar, R.string.open, R.string.close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); MainActivity.get(getContext()).supportInvalidateOptionsMenu(); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); MainActivity.get(getContext()).supportInvalidateOptionsMenu(); } }; drawerLayout.setDrawerListener(drawerToggle); drawerToggle.setToolbarNavigationClickListener(v -> backstack.goBack()); actionBar.setDisplayHomeAsUpEnabled(false); actionBar.setHomeButtonEnabled(true); } public void onPostCreate() { drawerToggle.syncState(); } public void onConfigChanged(Configuration newConfig) { drawerToggle.onConfigurationChanged(newConfig); } public boolean onBackPressed() { if(drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawers(); return true; } return false; } }