package com.novoda.activitytalkbackinvestigation;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.LayoutRes;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
public abstract class DrawerActivity extends AppCompatActivity {
private Intent pendingNavigationClick;
@Override
public void setContentView(@LayoutRes int layoutResID) {
super.setContentView(R.layout.drawer_layout);
ViewGroup contentView = (ViewGroup) findViewById(R.id.content_frame);
getLayoutInflater().inflate(layoutResID, contentView);
setupDrawer();
}
private void setupDrawer() {
ListView listView = (ListView) findViewById(R.id.left_drawer);
listView.setAdapter(createDrawerAdapter(this));
final DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
pendingNavigationClick = createIntentForItem(position, DrawerActivity.this);
drawerLayout.closeDrawers();
}
}
);
ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
// waiting for the drawer to close, then navigating seems to cause issue.
// why wait for the drawer to close? jankiness.
if (pendingNavigationClick != null) {
startActivity(pendingNavigationClick);
pendingNavigationClick = null;
}
}
};
drawerLayout.setDrawerListener(drawerToggle);
}
private static ListAdapter createDrawerAdapter(Context context) {
return new ArrayAdapter<>(
context,
android.R.layout.simple_list_item_1,
new String[]{"Earth", "Saturn"}
);
}
private static Intent createIntentForItem(int itemPosition, Context context) {
if (itemPosition == 0) {
return new Intent(context, EarthActivity.class);
} else {
return new Intent(context, SaturnActivity.class);
}
}
}