/* Class that handles the NavigationDrawer when a user swipes from the right or
* clicks the icon in the ActionBar
*/
package com.databases.example.app;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.ActivityOptionsCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import com.databases.example.R;
import com.databases.example.features.categories.CategoriesActivity;
import com.databases.example.features.checkbook.CheckbookActivity;
import com.databases.example.features.home.MainActivity;
import com.databases.example.features.plans.PlansActivity;
import com.databases.example.features.settings.SettingsActivity;
import com.databases.example.utils.Constants.ActivityTag;
import timber.log.Timber;
//An Object Class used to handle the NavigationDrawer
public class DrawerActivity {
private final AppCompatActivity appCompatActivity;
private ActivityTag activityTag;
private final DrawerToggleInterface drawerToggleInterface;
private DrawerLayout drawerLayout;
private NavigationView drawerNavView;
public DrawerActivity(final AppCompatActivity appCompatActivity, final DrawerToggleInterface drawerToggleInterface) {
this.appCompatActivity = appCompatActivity;
this.drawerToggleInterface = drawerToggleInterface;
}
public void initialize() {
Toolbar toolbar = (Toolbar) appCompatActivity.findViewById(R.id.toolbar);
appCompatActivity.setSupportActionBar(toolbar);
drawerLayout = (DrawerLayout) appCompatActivity.findViewById(R.id.drawer_layout);
drawerNavView = (NavigationView) appCompatActivity.findViewById(R.id.drawer);
drawerNavView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
drawerLayout.closeDrawers();
switch (menuItem.getItemId()) {
case R.id.home:
Intent intentHome = new Intent(appCompatActivity, MainActivity.class);
intentHome.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityOptionsCompat optionsHome = ActivityOptionsCompat.makeCustomAnimation(appCompatActivity, R.anim.slide_in_right, R.anim.slide_out_left);
ActivityCompat.startActivity(appCompatActivity, intentHome, optionsHome.toBundle());
return true;
case R.id.checkbook:
Intent intentCheckbook = new Intent(appCompatActivity, CheckbookActivity.class);
intentCheckbook.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityOptionsCompat optionsCheckbook = ActivityOptionsCompat.makeCustomAnimation(appCompatActivity, R.anim.slide_in_right, R.anim.slide_out_left);
ActivityCompat.startActivity(appCompatActivity, intentCheckbook, optionsCheckbook.toBundle());
return true;
case R.id.categories:
Intent intentCategories = new Intent(appCompatActivity, CategoriesActivity.class);
intentCategories.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityOptionsCompat optionsCategories = ActivityOptionsCompat.makeCustomAnimation(appCompatActivity, R.anim.slide_in_right, R.anim.slide_out_left);
ActivityCompat.startActivity(appCompatActivity, intentCategories, optionsCategories.toBundle());
return true;
case R.id.plans:
Intent intentPlans = new Intent(appCompatActivity, PlansActivity.class);
intentPlans.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
ActivityOptionsCompat optionsPlans = ActivityOptionsCompat.makeCustomAnimation(appCompatActivity, R.anim.slide_in_right, R.anim.slide_out_left);
ActivityCompat.startActivity(appCompatActivity, intentPlans, optionsPlans.toBundle());
return true;
case R.id.statistics:
Timber.v("Statistics Listener Fired");
return true;
case R.id.options:
Intent intentOptions = new Intent(appCompatActivity, SettingsActivity.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeCustomAnimation(appCompatActivity, R.anim.slide_in_right, R.anim.slide_out_left);
ActivityCompat.startActivity(appCompatActivity, intentOptions, options.toBundle());
return true;
case R.id.help:
Timber.v("Help Listener Fired");
return true;
case R.id.exit:
closeApp();
return true;
default:
Timber.e("Default Listener Fired");
return true;
}
}
});
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(appCompatActivity, drawerLayout,
toolbar, R.string.drawer_open, R.string.drawer_closed) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (drawerToggleInterface != null) {
drawerToggleInterface.onDrawerClosed(drawerView);
}
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (drawerToggleInterface != null) {
drawerToggleInterface.onDrawerOpened(drawerView);
}
}
};
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
}
public void closeDrawer() {
drawerLayout.closeDrawers();
}
//Is drawer open (on start/left-hand side)
public boolean isDrawerOpen() {
return drawerLayout.isDrawerOpen(GravityCompat.START);
}
public void setActivityTag(ActivityTag activityTag) {
this.activityTag = activityTag;
switch (activityTag) {
case MAIN:
drawerNavView.getMenu().getItem(0).setChecked(true);
break;
case CHECKBOOK:
drawerNavView.getMenu().getItem(1).setChecked(true);
break;
case CATEGROIES:
drawerNavView.getMenu().getItem(2).setChecked(true);
break;
case PLANS:
drawerNavView.getMenu().getItem(3).setChecked(true);
break;
case STATISTICS:
drawerNavView.getMenu().getItem(4).setChecked(true);
break;
case OPTIONS:
drawerNavView.getMenu().getItem(5).setChecked(true);
break;
case HELP:
drawerNavView.getMenu().getItem(6).setChecked(true);
break;
case EXIT:
drawerNavView.getMenu().getItem(7).setChecked(true);
break;
case SEARCH:
break;
case LINKS:
break;
default:
Timber.e("Unknown Drawer Menu Item");
break;
}
}
public ActivityTag getActivityTag() {
return activityTag;
}
//Method to exit app
private void closeApp() {
System.exit(0);
}
}