Turned navigation drawer code into base activity to subclass
This commit is contained in:
146
src/net/i2p/android/router/activity/I2PActivityBase.java
Normal file
146
src/net/i2p/android/router/activity/I2PActivityBase.java
Normal file
@ -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();
|
||||||
|
}
|
||||||
|
}
|
@ -1,78 +1,16 @@
|
|||||||
package net.i2p.android.router.activity;
|
package net.i2p.android.router.activity;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
import net.i2p.android.router.R;
|
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.MainFragment;
|
||||||
import net.i2p.android.router.fragment.VersionDialog.VersionDialogListener;
|
import net.i2p.android.router.fragment.VersionDialog.VersionDialogListener;
|
||||||
import net.i2p.android.router.util.Util;
|
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 {
|
implements VersionDialogListener {
|
||||||
private DrawerLayout mDrawerLayout;
|
|
||||||
private ListView mDrawerList;
|
|
||||||
private ActionBarDrawerToggle mDrawerToggle;
|
|
||||||
|
|
||||||
private CharSequence mDrawerTitle;
|
|
||||||
private CharSequence mTitle;
|
|
||||||
private String[] mFragments;
|
|
||||||
private String[] mFragmentTitles;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(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
|
// Start with the home view
|
||||||
if (savedInstanceState == null) {
|
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
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
Util.i("Initializing...");
|
Util.i("Initializing...");
|
||||||
@ -137,27 +28,6 @@ public class MainActivity extends ActionBarActivity
|
|||||||
init.debugStuff();
|
init.debugStuff();
|
||||||
init.initialize();
|
init.initialize();
|
||||||
super.onPostCreate(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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onFirstRun() {
|
public void onFirstRun() {
|
||||||
|
Reference in New Issue
Block a user