From c2bc999847d9241c0f16d1a82753a20bcd28f98d Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Sat, 10 Aug 2013 10:17:41 +0000 Subject: [PATCH] Turned navigation drawer code into base activity to subclass --- .../router/activity/I2PActivityBase.java | 146 ++++++++++++++++++ .../android/router/activity/MainActivity.java | 134 +--------------- 2 files changed, 148 insertions(+), 132 deletions(-) create mode 100644 src/net/i2p/android/router/activity/I2PActivityBase.java diff --git a/src/net/i2p/android/router/activity/I2PActivityBase.java b/src/net/i2p/android/router/activity/I2PActivityBase.java new file mode 100644 index 000000000..c4bfae7e9 --- /dev/null +++ b/src/net/i2p/android/router/activity/I2PActivityBase.java @@ -0,0 +1,146 @@ +package net.i2p.android.router.activity; + +import net.i2p.android.router.R; +import net.i2p.android.router.fragment.I2PFragmentBase; +import android.content.res.Configuration; +import android.os.Bundle; +import android.support.v4.app.ActionBarDrawerToggle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.view.GravityCompat; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.ActionBarActivity; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +public class I2PActivityBase extends ActionBarActivity { + protected DrawerLayout mDrawerLayout; + protected ListView mDrawerList; + protected ActionBarDrawerToggle mDrawerToggle; + + private CharSequence mDrawerTitle; + private CharSequence mTitle; + private String[] mFragments; + private String[] mFragmentTitles; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + mTitle = mDrawerTitle = getTitle(); + mFragments = getResources().getStringArray(R.array.main_fragments); + mFragmentTitles = getResources().getStringArray(R.array.main_fragment_titles); + mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); + mDrawerList = (ListView) findViewById(R.id.drawer); + + // Set a custom shadow that overlays the main content when the drawer opens + mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); + mDrawerList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); + // Set the adapter for the list view + mDrawerList.setAdapter(new ArrayAdapter<String>(this, + android.R.layout.simple_list_item_1, mFragmentTitles)); + // Set the list's click listener + mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); + + // Enable ActionBar app icon to behave as action to toggle nav drawer + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setHomeButtonEnabled(true); + + mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, + R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { + + /** Called when a drawer has settled in a completely closed state. */ + public void onDrawerClosed(View view) { + getSupportActionBar().setTitle(mTitle); + supportInvalidateOptionsMenu(); + } + + /** Called when a drawer has settled in a completely open state. */ + public void onDrawerOpened(View view) { + getSupportActionBar().setTitle(mDrawerTitle); + supportInvalidateOptionsMenu(); + } + }; + + // Set the drawer toggle as the DrawerListener + mDrawerLayout.setDrawerListener(mDrawerToggle); + } + + /* Called whenever we call invalidateOptionsMenu() */ + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + // If the nav drawer is open, hide action items related to the content view + boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); + //menu.findItem(R.id.action_add_to_addressbook).setVisible(!drawerOpen); + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // The action bar home/up action should open or close the drawer. + // ActionBarDrawerToggle will take care of this. + if(mDrawerToggle.onOptionsItemSelected(item)) { + return true; + } + // Handle action buttons + return super.onOptionsItemSelected(item); + } + + private class DrawerItemClickListener implements ListView.OnItemClickListener { + public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { + selectItem(pos); + } + } + + private void selectItem(int pos) { + Fragment fragment = Fragment.instantiate(I2PActivityBase.this, mFragments[pos]); + + // Insert the fragment by replacing any existing fragment + FragmentManager fragmentManager = getSupportFragmentManager(); + fragmentManager.beginTransaction() + .replace(R.id.main_content, fragment) + .commit(); + + // Highlight the selected item, update the title, and close the drawer + mDrawerList.setItemChecked(pos, true); + setTitle(mFragmentTitles[pos]); + mDrawerLayout.closeDrawer(mDrawerList); + } + + @Override + public void setTitle(CharSequence title) { + mTitle = title; + getSupportActionBar().setTitle(mTitle); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + // Sync the toggle state after onRestoreInstanceState has occurred. + mDrawerToggle.syncState(); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + // Pass any configuration change to the drawer toggle + mDrawerToggle.onConfigurationChanged(newConfig); + } + + @Override + public void onBackPressed() { + Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_content); + if (fragment instanceof I2PFragmentBase) { + I2PFragmentBase ifb = (I2PFragmentBase) fragment; + // If we shouldn't stay on this fragment, go back. + if (ifb.onBackPressed()) + return; + } + super.onBackPressed(); + } +} diff --git a/src/net/i2p/android/router/activity/MainActivity.java b/src/net/i2p/android/router/activity/MainActivity.java index 582c829f0..6a15e57f0 100644 --- a/src/net/i2p/android/router/activity/MainActivity.java +++ b/src/net/i2p/android/router/activity/MainActivity.java @@ -1,78 +1,16 @@ package net.i2p.android.router.activity; +import android.os.Bundle; import net.i2p.android.router.R; -import net.i2p.android.router.fragment.I2PFragmentBase; import net.i2p.android.router.fragment.MainFragment; import net.i2p.android.router.fragment.VersionDialog.VersionDialogListener; import net.i2p.android.router.util.Util; -import android.content.res.Configuration; -import android.os.Bundle; -import android.support.v4.app.ActionBarDrawerToggle; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentManager; -import android.support.v4.view.GravityCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarActivity; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; -import android.widget.ListView; -public class MainActivity extends ActionBarActivity +public class MainActivity extends I2PActivityBase implements VersionDialogListener { - private DrawerLayout mDrawerLayout; - private ListView mDrawerList; - private ActionBarDrawerToggle mDrawerToggle; - - private CharSequence mDrawerTitle; - private CharSequence mTitle; - private String[] mFragments; - private String[] mFragmentTitles; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - mTitle = mDrawerTitle = getTitle(); - mFragments = getResources().getStringArray(R.array.main_fragments); - mFragmentTitles = getResources().getStringArray(R.array.main_fragment_titles); - mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); - mDrawerList = (ListView) findViewById(R.id.drawer); - - // Set a custom shadow that overlays the main content when the drawer opens - mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); - mDrawerList.setChoiceMode(ListView.CHOICE_MODE_SINGLE); - // Set the adapter for the list view - mDrawerList.setAdapter(new ArrayAdapter<String>(this, - android.R.layout.simple_list_item_1, mFragmentTitles)); - // Set the list's click listener - mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); - - // Enable ActionBar app icon to behave as action to toggle nav drawer - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setHomeButtonEnabled(true); - - mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, - R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { - - /** Called when a drawer has settled in a completely closed state. */ - public void onDrawerClosed(View view) { - getSupportActionBar().setTitle(mTitle); - supportInvalidateOptionsMenu(); - } - - /** Called when a drawer has settled in a completely open state. */ - public void onDrawerOpened(View view) { - getSupportActionBar().setTitle(mDrawerTitle); - supportInvalidateOptionsMenu(); - } - }; - - // Set the drawer toggle as the DrawerListener - mDrawerLayout.setDrawerListener(mDrawerToggle); // Start with the home view if (savedInstanceState == null) { @@ -83,53 +21,6 @@ public class MainActivity extends ActionBarActivity } } - /* Called whenever we call invalidateOptionsMenu() */ - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - // If the nav drawer is open, hide action items related to the content view - boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); - //menu.findItem(R.id.action_add_to_addressbook).setVisible(!drawerOpen); - return super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // The action bar home/up action should open or close the drawer. - // ActionBarDrawerToggle will take care of this. - if(mDrawerToggle.onOptionsItemSelected(item)) { - return true; - } - // Handle action buttons - return super.onOptionsItemSelected(item); - } - - private class DrawerItemClickListener implements ListView.OnItemClickListener { - public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { - selectItem(pos); - } - } - - private void selectItem(int pos) { - Fragment fragment = Fragment.instantiate(MainActivity.this, mFragments[pos]); - - // Insert the fragment by replacing any existing fragment - FragmentManager fragmentManager = getSupportFragmentManager(); - fragmentManager.beginTransaction() - .replace(R.id.main_content, fragment) - .commit(); - - // Highlight the selected item, update the title, and close the drawer - mDrawerList.setItemChecked(pos, true); - setTitle(mFragmentTitles[pos]); - mDrawerLayout.closeDrawer(mDrawerList); - } - - @Override - public void setTitle(CharSequence title) { - mTitle = title; - getSupportActionBar().setTitle(mTitle); - } - @Override protected void onPostCreate(Bundle savedInstanceState) { Util.i("Initializing..."); @@ -137,27 +28,6 @@ public class MainActivity extends ActionBarActivity init.debugStuff(); init.initialize(); super.onPostCreate(savedInstanceState); - // Sync the toggle state after onRestoreInstanceState has occurred. - mDrawerToggle.syncState(); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - // Pass any configuration change to the drawer toggle - mDrawerToggle.onConfigurationChanged(newConfig); - } - - @Override - public void onBackPressed() { - Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.main_content); - if (fragment instanceof I2PFragmentBase) { - I2PFragmentBase ifb = (I2PFragmentBase) fragment; - // If we shouldn't stay on this fragment, go back. - if (ifb.onBackPressed()) - return; - } - super.onBackPressed(); } public void onFirstRun() { -- GitLab