package com.arconus.dicecommander.ui.activity; import android.app.ActionBar; import android.content.Intent; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; import com.arconus.dicecommander.Application; import com.arconus.dicecommander.R; import com.arconus.dicecommander.adapters.ViewPagerAdapter; import com.arconus.dicecommander.events.CharacterSelectedEvent; import com.arconus.dicecommander.events.NewCharacterEvent; import com.arconus.dicecommander.interactors.managers.GameCharacterManager; import com.arconus.dicecommander.model.entities.character.GameCharacter; import com.squareup.otto.Subscribe; public class DashboardActivity extends FragmentActivity implements AdapterView.OnItemClickListener { private DrawerLayout drawerLayout; private ListView drawerList; private ActionBarDrawerToggle drawerToggle; private ViewPager viewPager; private String title = "DiceCommander"; @Override protected void onCreate(Bundle inState) { super.onCreate(inState); setContentView(R.layout.dashboard); Application.bus.register(this); Application.store.loadFromFile(); initializeMenuDrawer(); viewPager = ((ViewPager) findViewById(R.id.pager)); configureViewPager(); if (GameCharacterManager.isEmpty()) { showNewCharacterDialog(); } else { setSelectedCharFromPreferences(); } } private void initializeMenuDrawer() { drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerList = (ListView) findViewById(R.id.left_drawer); drawerList.setOnItemClickListener(this); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 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) { getActionBar().setTitle(title); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; drawerLayout.setDrawerListener(drawerToggle); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); } private void configureViewPager() { ViewPagerAdapter pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(pagerAdapter); } private ArrayAdapter<GameCharacter> getDrawerAdapter() { return new ArrayAdapter<GameCharacter>(this, R.layout.nav_drawer_item_layout, android.R.id.text1, GameCharacterManager.getInstance().getGameCharacters()); } private void setSelectedCharFromPreferences() { GameCharacterManager instance = GameCharacterManager.getInstance(); instance.setSelectedCharacterFromPreferences(); } @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 (drawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.menu_new_character: showNewCharacterDialog(); return true; case R.id.menu_new_power: if (GameCharacterManager.getInstance().isCharacterSelected()) { Intent intent = new Intent(this, PowerWizardActivity.class); startActivity(intent); } else { Toast.makeText(this, getString(R.string.toast_no_selected_character), Toast.LENGTH_SHORT).show(); } return true; default: return super.onOptionsItemSelected(item); } } private void showNewCharacterDialog() { Intent intent = new Intent(this, CharacterWizardActivity.class); startActivity(intent); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { GameCharacterManager.getInstance().setSelectedCharacter(position); drawerList.setItemChecked(position, true); drawerLayout.closeDrawer(drawerList); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. drawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); drawerToggle.onConfigurationChanged(newConfig); } @Subscribe public void answerCharSelectedEvent(CharacterSelectedEvent event) { setTitleFromSelectedCharacter(); } private void setTitleFromSelectedCharacter() { GameCharacter selectedCharacter = GameCharacterManager.getSelectedCharacter(); if (selectedCharacter != null) { title = selectedCharacter.getName(); ActionBar actionBar = getActionBar(); if (actionBar != null) { actionBar.setTitle(title); } } } @Override protected void onPause() { super.onPause(); Application.bus.unregister(this); Application.store.saveToFile(); } @Override protected void onResume() { super.onResume(); Application.bus.register(this); drawerList.setAdapter(getDrawerAdapter()); setTitleFromSelectedCharacter(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.character_list_menu, menu); return true; } @Subscribe public void answerNewCharacterCreatedEvent(NewCharacterEvent event) { drawerList.setAdapter(getDrawerAdapter()); } }