Java tutorial
/* Privacy Friendly Net Monitor (Net Monitor) - Copyright (2015 - 2017) Felix Tsala Schiller ################################################################### This file is part of Net Monitor. Net Monitor 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 (at your option) any later version. Net Monitor 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 Net Monitor. If not, see <http://www.gnu.org/licenses/>. Diese Datei ist Teil von Net Monitor. Net Monitor ist Freie Software: Sie knnen es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation, Version 3 der Lizenz oder (nach Ihrer Wahl) jeder spteren verffentlichten Version, weiterverbreiten und/oder modifizieren. Net Monitor wird in der Hoffnung, dass es ntzlich sein wird, aber OHNE JEDE GEWHRLEISTUNG, bereitgestellt; sogar ohne die implizite Gewhrleistung der MARKTFHIGKEIT oder EIGNUNG FR EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License fr weitere Details. Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe <http://www.gnu.org/licenses/>. ################################################################### This app has been created in affiliation with SecUSo-Department of Technische Universitt Darmstadt. The design is based on the Privacy Friendly Example App template by Karola Marky, Christopher Beckmann and Markus Hau (https://github.com/SecUSo/privacy-friendly-app-example). Privacy Friendly Net Monitor is based on TLSMetric by Felix Tsala Schiller https://bitbucket.org/schillef/tlsmetric/overview. */ package org.secuso.privacyfriendlynetmonitor.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.privacyfriendlynetmonitor.Assistant.RunStore; import org.secuso.privacyfriendlynetmonitor.R; /** * Base activity for other activities */ public 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: DrawerLayout mDrawerLayout; NavigationView mNavigationView; // Helper private Handler mHandler; protected SharedPreferences mSharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); mHandler = new Handler(); //ActionBar ab = getSupportActionBar(); //if (ab != null) { // mActionBar = ab; // ab.setDisplayHomeAsUpEnabled(true); //} 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 int getNavigationDrawerID() { return 0; } @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 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_main: intent = new Intent(this, MainActivity.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); setToolbar(); } public void setToolbar() { 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); } } }