package com.jdroid.android.navdrawer; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import com.jdroid.android.application.AbstractApplication; import com.jdroid.android.R; import com.jdroid.android.activity.AbstractFragmentActivity; import com.jdroid.java.concurrent.ExecutorUtils; public abstract class NavDrawer { public static final String NAV_DRAWER_MANUALLY_USED = "navDrawerManuallyUsed"; private static Boolean navDrawerManuallyUsed = false; private AbstractFragmentActivity activity; private Toolbar appBar; private Boolean isNavDrawerTopLevelView = false; private Boolean isNavDrawerOpenedOnFirstSession = true; private DrawerLayout drawerLayout; private ActionBarDrawerToggle drawerToggle; private View contentView; public NavDrawer(final AbstractFragmentActivity activity, Toolbar appBar) { this.activity = activity; this.appBar = appBar; drawerLayout = activity.findView(R.id.drawer_layout); } public void init() { // Set the adapter for the list view // set a custom shadow that overlays the main content when the drawer opens drawerLayout.setDrawerShadow(R.drawable.jdroid_drawer_shadow, GravityCompat.START); final DrawerLayout.DrawerListener drawerListener = new DrawerLayout.DrawerListener() { @Override public void onDrawerStateChanged(int newState) { if (newState == DrawerLayout.STATE_DRAGGING) { saveNavDrawerManuallyUsed(); } } @Override public void onDrawerSlide(View drawerView, float slideOffset) { // Do nothing } @Override public void onDrawerOpened(View view) { // Do nothing } @Override public void onDrawerClosed(View view) { // Do nothing } }; if (isNavDrawerTopLevelView && appBar != null) { drawerToggle = new ActionBarDrawerToggle(activity, drawerLayout, appBar, R.string.jdroid_drawerOpen, R.string.jdroid_drawerClose) { @Override public void onDrawerStateChanged(int newState) { super.onDrawerStateChanged(newState); drawerListener.onDrawerStateChanged(newState); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { // 0 offset to disable the hamburger animation super.onDrawerSlide(drawerView, 0); drawerListener.onDrawerSlide(drawerView, 0); } @Override public void onDrawerClosed(View view) { super.onDrawerClosed(view); drawerListener.onDrawerClosed(view); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); drawerListener.onDrawerOpened(drawerView); } }; // Set the drawer toggle as the DrawerListener drawerLayout.addDrawerListener(drawerToggle); } else { drawerLayout.removeDrawerListener(drawerListener); } contentView = createContentView(); if (isNavDrawerOpenedOnFirstSession) { ExecutorUtils.schedule(new Runnable() { @Override public void run() { navDrawerManuallyUsed = PreferenceManager.getDefaultSharedPreferences(AbstractApplication.get()).getBoolean( NAV_DRAWER_MANUALLY_USED, false); activity.runOnUiThread(new Runnable() { @Override public void run() { String action = activity.getIntent().getAction(); if (!navDrawerManuallyUsed && Intent.ACTION_MAIN.equals(action)) { drawerLayout.openDrawer(contentView); } } }); } }, 1L); } } private void saveNavDrawerManuallyUsed() { if ((navDrawerManuallyUsed == null) || !navDrawerManuallyUsed) { ExecutorUtils.execute(new Runnable() { @Override public void run() { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(AbstractApplication.get()); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putBoolean(NAV_DRAWER_MANUALLY_USED, true); editor.apply(); navDrawerManuallyUsed = true; } }); } } public boolean onOptionsItemSelected(MenuItem item) { // Pass the event to ActionBarDrawerToggle, if it returns true, then it has handled the app icon touch event if ((drawerToggle != null) && drawerToggle.onOptionsItemSelected(item)) { saveNavDrawerManuallyUsed(); return true; } else { return false; } } public void onPostCreate(Bundle savedInstanceState) { if (drawerToggle != null) { // Sync the toggle state after onRestoreInstanceState has occurred. drawerToggle.syncState(); } } public void onConfigurationChanged(Configuration newConfig) { if (drawerToggle != null) { drawerToggle.onConfigurationChanged(newConfig); } } public Boolean onBackPressed() { if (drawerLayout.isDrawerOpen(contentView)) { drawerLayout.closeDrawer(contentView); return true; } return false; } public DrawerLayout getDrawerLayout() { return drawerLayout; } public void onResume() { // Do Nothing } public abstract View createContentView(); protected AbstractFragmentActivity getActivity() { return activity; } public void setIsNavDrawerTopLevelView(Boolean isNavDrawerTopLevelView) { this.isNavDrawerTopLevelView = isNavDrawerTopLevelView; } public void setIsNavDrawerOpenedOnFirstSession(Boolean isNavDrawerOpenedOnFirstSession) { this.isNavDrawerOpenedOnFirstSession = isNavDrawerOpenedOnFirstSession; } }