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());
}
}