package br.com.extractor.easyfinance.ui;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.SparseArray;
import android.view.MenuItem;
import android.widget.TextView;
import com.google.android.gms.analytics.Tracker;
import br.com.extractor.easyfinance.R;
import br.com.extractor.easyfinance.arquitetura.Fragmento;
import br.com.extractor.easyfinance.arquitetura.preference.Preferences;
import br.com.extractor.easyfinance.ui.configuracoes.ConfiguracoesFragment;
import br.com.extractor.easyfinance.ui.despesa.DespesaListFragment;
import br.com.extractor.easyfinance.ui.home.HomeFragment;
import br.com.extractor.easyfinance.ui.receita.ReceitaListFragment;
import br.com.extractor.easyfinance.ui.sobre.SobreFragment;
import br.com.extractor.easyfinance.ui.tipo.TipoListFragment;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements ActivityCommunication {
@Bind(R.id.drawer_layout)
DrawerLayout drawerLayout;
@Bind(R.id.nav_view)
NavigationView navigationView;
@Bind(R.id.toolbar)
Toolbar toolbar;
@Bind(R.id.txt_username)
TextView txtUsername;
private ActionBarDrawerToggle drawerToggle;
private SparseArray<Fragmento> mapFragmento;
private FragmentManager fragmentManager;
private ActionBar actionBar;
private FragmentCommunication fragmentCommunication;
private Tracker tracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getFragmentManager();
ButterKnife.bind(this);
initMapFragmentos();
setupToolbar();
setupDrawerContent();
changeFragment(R.id.menu_dashboard);
tracker = EasyFinanceApplication.defaultTracker;
updateValues();
}
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
private void setupToolbar() {
setSupportActionBar(toolbar);
toolbar.setTitleTextColor(getResources().getColor(android.R.color.white));
actionBar = getSupportActionBar();
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.nav_drawer_open, R.string.nav_drawer_close);
drawerLayout.setDrawerListener(drawerToggle);
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
private void initMapFragmentos() {
if (mapFragmento == null) {
mapFragmento = new SparseArray<>();
mapFragmento.put(R.id.menu_dashboard, new Fragmento(new HomeFragment(), R.string.dashboard));
mapFragmento.put(R.id.menu_receitas, new Fragmento(new ReceitaListFragment(), R.string.incomes));
mapFragmento.put(R.id.menu_despesas, new Fragmento(new DespesaListFragment(), R.string.expenses));
mapFragmento.put(R.id.menu_tipo, new Fragmento(new TipoListFragment(), R.string.type));
mapFragmento.put(R.id.menu_configuracoes, new Fragmento(new ConfiguracoesFragment(), R.string.settings));
mapFragmento.put(R.id.menu_sobre, new Fragmento(new SobreFragment(), R.string.about));
}
}
private void setupDrawerContent() {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
changeFragment(menuItem.getItemId());
drawerLayout.closeDrawers();
return true;
}
});
}
private void changeFragment(int itemId) {
Fragmento fragmento = mapFragmento.get(itemId);
Fragment fragment = fragmento.getFragment();
try {
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.main_container, fragment);
fragmentTransaction.commit();
actionBar.setTitle(fragmento.getTitle());
fragmentCommunication = (FragmentCommunication) fragment;
} catch (ClassCastException e) {
throw new RuntimeException(fragment.getClass().getSimpleName() + " must implement " +
"FragmentCommunication ");
}
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
drawerLayout.closeDrawers();
} else {
if (fragmentManager.getBackStackEntryCount() > 0) {
fragmentManager.popBackStack();
} else {
if (fragmentCommunication.hasPendencies()) {
fragmentCommunication.freePendencies();
} else {
super.onBackPressed();
}
}
}
}
@Override
public void updateValues() {
txtUsername.setText(Preferences.getString(Preferences.USERNAME, R.string.username));
}
}