package com.mechinn.android.ouralliance.activity;
import android.content.res.Configuration;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TabHost;
import com.mechinn.android.ouralliance.Prefs;
import com.mechinn.android.ouralliance.R;
import com.mechinn.android.ouralliance.adapter.GraphDataSetAdapter;
import com.mechinn.android.ouralliance.adapter.TeamGraphAdapter;
import com.mechinn.android.ouralliance.data.EventTeam;
import com.mechinn.android.ouralliance.data.GraphDataSet;
import com.mechinn.android.ouralliance.data.TeamGraph;
import com.mechinn.android.ouralliance.fragment.AnalysisFragment;
import com.mechinn.android.ouralliance.fragment.frc2015.AnalysisFragment2015;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import de.greenrobot.event.EventBus;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
import timber.log.Timber;
public class AnalysisActivity extends OurAllianceActivity implements FragmentManager.OnBackStackChangedListener, TabHost.OnTabChangeListener {
private static final String GRAPHS = "Graphs";
private static final String TEAMS = "Teams";
private ActionBarDrawerToggle mDrawerToggle;
private AnalysisFragment fragment;
private DrawerLayout mDrawerLayout;
private TabHost listTabs;
private StickyListHeadersListView graphList;
private ListView teamList;
private GraphDataSetAdapter graphAdapter;
private TeamGraphAdapter teamAdapter;
private Prefs prefs;
/**
* Used to store the last screen title. For use in {@link #restoreActionBar()}.
*/
private CharSequence mTitle;
@Override
public void onTabChanged(String tabId) {
if(tabId.equals(GRAPHS)) {
}else if(tabId.equals(TEAMS)) {
}
}
public class AnalysisNavigationSelected {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
prefs = new Prefs(this);
this.getSupportFragmentManager().addOnBackStackChangedListener(this);
setContentView(R.layout.activity_analysis);
listTabs = (TabHost)findViewById(R.id.navigation_drawer);
listTabs.setup();
listTabs.setOnTabChangedListener(this);
listTabs.addTab(listTabs.newTabSpec(GRAPHS).setIndicator(GRAPHS).setContent(R.id.graph_data));
listTabs.addTab(listTabs.newTabSpec(TEAMS).setIndicator(TEAMS).setContent(R.id.graph_teams));
graphList = (StickyListHeadersListView) listTabs.getTabContentView().getChildAt(0);
teamList = (ListView) listTabs.getTabContentView().getChildAt(1);
graphList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
GraphDataSet graph = (GraphDataSet) graphAdapter.getItem(position);
Timber.d("selected: "+graph);
graphList.setItemChecked(position, !graph.isEnabled());
graph.switchEnabled();
EventBus.getDefault().post(new AnalysisNavigationSelected());
}
});
graphAdapter = new GraphDataSetAdapter(this);
graphList.setAdapter(graphAdapter);
graphList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
teamList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TeamGraph team = (TeamGraph) teamAdapter.getItem(position);
Timber.d(team.getLabel()+" selected");
teamList.setItemChecked(position, !team.isEnabled());
team.switchEnabled();
EventBus.getDefault().post(new AnalysisNavigationSelected());
}
});
teamAdapter = new TeamGraphAdapter(this);
teamList.setAdapter(teamAdapter);
teamList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
// add views to tab host
// listTabs.addTab(listTabs.newTabSpec(TEAMS).setIndicator(TEAMS).setContent(new TabHost.TabContentFactory() {
// public View createTabContent(String arg0) {
// return teamList;
// }
// }));
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(
this, /* host Activity */
mDrawerLayout, /* DrawerLayout object */
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
AnalysisActivity.this.supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (!prefs.isAnalysisDrawerLearned()) {
prefs.setAnalysisDrawerLearned(true);
}
AnalysisActivity.this.supportInvalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
if (!prefs.isAnalysisDrawerLearned()) {
mDrawerLayout.openDrawer(listTabs);
}
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mTitle = getTitle();
switch(prefs.getYear()) {
default:
this.getSupportFragmentManager().popBackStack();
case 2015:
fragment = new AnalysisFragment2015();
}
if(null!=fragment) {
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
}
}
@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);
mDrawerToggle.onConfigurationChanged(newConfig);
}
public void onEventMainThread(AnalysisFragment.TeamsLoaded loadTeams) {
ArrayList<TeamGraph> teams = loadTeams.getTeams();
teamAdapter.changeList(teams);
for(int teamPosition=0;teamPosition<teams.size();teamPosition++) {
teamList.setItemChecked(teamPosition,teams.get(teamPosition).isEnabled());
}
}
public void onEventMainThread(AnalysisFragment.DataSetLoaded dataSet) {
ArrayList<GraphDataSet> graphDataSets = dataSet.getDataSet();
graphAdapter.changeList(graphDataSets);
for(int graphNum=0;graphNum<graphDataSets.size();graphNum++) {
graphList.setItemChecked(graphNum,graphDataSets.get(graphNum).isEnabled());
}
}
@Override
public void onBackStackChanged() {
Timber.i("back stack changed " + getSupportFragmentManager().getBackStackEntryCount());
if (getSupportFragmentManager().getBackStackEntryCount() < 1){
this.getSupportActionBar().setTitle("Analysis");
}
}
public void restoreActionBar() {
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle(mTitle);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!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.
getMenuInflater().inflate(R.menu.ouralliance, menu);
restoreActionBar();
return true;
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Pass the event to ActionBarDrawerToggle, if it returns
// true, then it has handled the app icon touch event
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
public boolean isDrawerOpen() {
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(listTabs);
}
}