Java tutorial
/** * This file is part of Privacy Friendly Password Generator. Privacy Friendly Password Generator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. Privacy Friendly Password Generator is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Privacy Friendly Password Generator. If not, see <http://www.gnu.org/licenses/>. */ package org.secuso.privacyfriendlypasswordgenerator.activities; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.support.design.widget.NavigationView; import android.support.design.widget.NavigationView.OnNavigationItemSelectedListener; import android.support.v4.app.TaskStackBuilder; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import org.secuso.privacyfriendlypasswordgenerator.R; import org.secuso.privacyfriendlypasswordgenerator.tutorial.PrefManager; import org.secuso.privacyfriendlypasswordgenerator.tutorial.TutorialActivity; /** * Created by Chris on 04.07.2016. */ public abstract class BaseActivity extends AppCompatActivity implements OnNavigationItemSelectedListener { // delay to launch nav drawer item, to allow close animation to play static final int NAVDRAWER_LAUNCH_DELAY = 250; // fade in and fade out durations for the main content when switching between // different Activities of the app through the Nav Drawer static final int MAIN_CONTENT_FADEOUT_DURATION = 150; static final int MAIN_CONTENT_FADEIN_DURATION = 250; // Navigation drawer: private DrawerLayout mDrawerLayout; private NavigationView mNavigationView; // Helper private Handler mHandler; protected SharedPreferences mSharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); mHandler = new Handler(); overridePendingTransition(0, 0); } @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } protected abstract int getNavigationDrawerID(); @Override public boolean onNavigationItemSelected(MenuItem item) { final int itemId = item.getItemId(); return goToNavigationItem(itemId); } protected boolean goToNavigationItem(final int itemId) { if (itemId == getNavigationDrawerID()) { // just close drawer because we are already in this activity mDrawerLayout.closeDrawer(GravityCompat.START); return true; } // delay transition so the drawer can close mHandler.postDelayed(new Runnable() { @Override public void run() { callDrawerItem(itemId); } }, NAVDRAWER_LAUNCH_DELAY); mDrawerLayout.closeDrawer(GravityCompat.START); selectNavigationItem(itemId); // fade out the active activity View mainContent = findViewById(R.id.main_content); if (mainContent != null) { mainContent.animate().alpha(0).setDuration(MAIN_CONTENT_FADEOUT_DURATION); } return true; } // set active navigation item private void selectNavigationItem(int itemId) { for (int i = 0; i < mNavigationView.getMenu().size(); i++) { boolean b = itemId == mNavigationView.getMenu().getItem(i).getItemId(); mNavigationView.getMenu().getItem(i).setChecked(b); } } /** * Enables back navigation for activities that are launched from the NavBar. See * {@code AndroidManifest.xml} to find out the parent activity names for each activity. * @param intent */ private void createBackStack(Intent intent) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { TaskStackBuilder builder = TaskStackBuilder.create(this); builder.addNextIntentWithParentStack(intent); builder.startActivities(); } else { startActivity(intent); finish(); } } private void callDrawerItem(final int itemId) { Intent intent; switch (itemId) { case R.id.nav_example: intent = new Intent(this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); break; case R.id.nav_tutorial: PrefManager prefManager = new PrefManager(this); prefManager.setTutorialLaunch(true); intent = new Intent(this, TutorialActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); break; case R.id.nav_about: intent = new Intent(this, AboutActivity.class); createBackStack(intent); break; case R.id.nav_help: intent = new Intent(this, HelpActivity.class); createBackStack(intent); break; case R.id.nav_settings: intent = new Intent(this, SettingsActivity.class); intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, SettingsActivity.GeneralPreferenceFragment.class.getName()); intent.putExtra(PreferenceActivity.EXTRA_NO_HEADERS, true); createBackStack(intent); break; default: } } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (getSupportActionBar() == null) { setSupportActionBar(toolbar); } mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); mDrawerLayout.addDrawerListener(toggle); toggle.syncState(); mNavigationView = (NavigationView) findViewById(R.id.nav_view); mNavigationView.setNavigationItemSelectedListener(this); selectNavigationItem(getNavigationDrawerID()); View mainContent = findViewById(R.id.main_content); if (mainContent != null) { mainContent.setAlpha(0); mainContent.animate().alpha(1).setDuration(MAIN_CONTENT_FADEIN_DURATION); } } }