package com.chrome.codereview;
import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.util.SparseArray;
import android.view.Menu;
import com.chrome.codereview.issuelists.BaseIssueListFragment;
import com.chrome.codereview.issuelists.CCIssuesFragment;
import com.chrome.codereview.issuelists.HiddenIssuesFragment;
import com.chrome.codereview.issuelists.IncomingIssuesFragment;
import com.chrome.codereview.issuelists.OutgoingIssuesFragment;
import com.chrome.codereview.issuelists.RecentlyClosedIssuesFragment;
import com.chrome.codereview.requests.ServerCaller;
public class UserIssueActivityWithDrawer extends Activity implements NavigationDrawerFragment.NavigationDrawerCallbacks {
private static final Class[] ISSUE_FRAGMENTS = new Class[]{IncomingIssuesFragment.class, OutgoingIssuesFragment.class, CCIssuesFragment.class, RecentlyClosedIssuesFragment.class, HiddenIssuesFragment.class};
private static final int REQUEST_LOGIN = 1;
private class PhoneIssueSelectionListener implements BaseIssueListFragment.IssueSelectionListener {
@Override
public void onIssueSelected(int issueId, boolean force) {
if (!force) {
return;
}
Intent intent = new Intent(UserIssueActivityWithDrawer.this, IssueDetailActivity.class);
intent.putExtra(IssueDetailsFragment.EXTRA_ISSUE_ID, issueId);
startActivity(intent);
}
}
private class TabletIssueSelectionListener implements BaseIssueListFragment.IssueSelectionListener {
@Override
public void onIssueSelected(int issueId, boolean force) {
issueDetailsFragment.setIssueId(issueId);
if (issueId == -1) {
getActionBar().setTitle(getResources().getStringArray(R.array.drawer_titles)[selectedInDrawer]);
}
}
}
/**
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
*/
private NavigationDrawerFragment navigationDrawerFragment;
private IssueDetailsFragment issueDetailsFragment;
private SparseArray<BaseIssueListFragment> fragments = new SparseArray<BaseIssueListFragment>();
private int selectedInDrawer = 0;
@Override
public void onNavigationDrawerItemSelected(int position) {
// update the main content by replacing fragments
selectedInDrawer = position;
FragmentManager fragmentManager = getFragmentManager();
BaseIssueListFragment fragment = getFragment(position);
initIssueDetailsFragment();
fragment.setIssueSelectionListener(issueDetailsFragment == null ? new PhoneIssueSelectionListener() : new TabletIssueSelectionListener());
if (issueDetailsFragment != null) {
issueDetailsFragment.setIssueId(-1);
fragment.selectFirstIssue();
}
getActionBar().setTitle(getResources().getStringArray(R.array.drawer_titles)[position]);
fragmentManager.beginTransaction()
.replace(R.id.container, fragment, position + "")
.commit();
}
public void restoreActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (navigationDrawerFragment == null) {
return super.onCreateOptionsMenu(menu);
}
if ( !navigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
restoreActionBar();
return true;
}
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ServerCaller serverCaller = ServerCaller.from(this);
Fragment fr = getFragmentManager().findFragmentById(R.id.container);
if (fr != null) {
fragments.put(Integer.parseInt(fr.getTag()), (BaseIssueListFragment) fr);
}
if (serverCaller.getState() != ServerCaller.State.OK) {
startActivityForResult(new Intent(this, LoginActivity.class), REQUEST_LOGIN);
return;
}
initializeViews();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode != REQUEST_LOGIN && resultCode != RESULT_OK) {
return;
}
initializeViews();
}
private void initializeViews() {
setContentView(R.layout.activity_user_issue_activity_with_drawer);
navigationDrawerFragment = (NavigationDrawerFragment)
getFragmentManager().findFragmentById(R.id.navigation_drawer);
navigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
CleanUpService.scheduleCleanUp(this);
}
private void initIssueDetailsFragment() {
if (issueDetailsFragment == null) {
issueDetailsFragment = (IssueDetailsFragment) getFragmentManager().findFragmentById(R.id.issue_details);
}
}
private BaseIssueListFragment getFragment(int position) {
BaseIssueListFragment result = fragments.get(position);
if (result == null) {
Class cl = ISSUE_FRAGMENTS[position];
try {
result = (BaseIssueListFragment) cl.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
fragments.put(position, result);
}
return result;
}
}