package net.mvla.mvhs.ui;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.customtabs.CustomTabsIntent;
import android.support.design.widget.NavigationView;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;
import net.mvla.mvhs.PrefUtils;
import net.mvla.mvhs.R;
import net.mvla.mvhs.Utils;
import net.mvla.mvhs.aeries.AeriesActivity;
import net.mvla.mvhs.customtabs.CustomTabActivityHelper;
import net.mvla.mvhs.map.MapActivity;
import net.mvla.mvhs.schedulecalendar.ScheduleCalendarActivity;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Base Activity with the Navigation Drawer
*/
public abstract class DrawerActivity extends AppCompatActivity {
private static final int NAVDRAWER_LAUNCH_DELAY = 250;
@Nullable
@BindView(R.id.toolbar_actionbar)
Toolbar actionBarToolbar;
@BindView(R.id.drawer_navview)
NavigationView navigationView;
private DrawerLayout drawerLayout;
private Handler handler;
public static boolean openApp(Context context, String packageName) {
PackageManager manager = context.getPackageManager();
Intent i = manager.getLaunchIntentForPackage(packageName);
if (i == null) {
return false;
}
i.addCategory(Intent.CATEGORY_LAUNCHER);
context.startActivity(i);
return true;
}
/**
* Returns the navigation drawer item that corresponds to this Activity.
* Subclasses of DrawerActivity override this to indicate what nav drawer item
* corresponds to them.
*/
protected abstract int getSelfNavDrawerItem();
void onNavDrawerSlide(float offset) {
}
void onNavDrawerClosed() {
}
/**
* Sets up the navigation drawer as appropriate.
*/
private void setupNavDrawer() {
drawerLayout = (DrawerLayout) findViewById(R.id.activity_drawer_drawerlayout);
if (actionBarToolbar != null) {
actionBarToolbar.setNavigationIcon(R.drawable.ic_menu_black_24dp);
actionBarToolbar.setNavigationOnClickListener(view -> openDrawer());
}
drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
onNavDrawerSlide(slideOffset);
}
@Override
public void onDrawerClosed(View drawerView) {
onNavDrawerClosed();
}
});
navigationView.setLayoutParams(new DrawerLayout.LayoutParams(Utils.getNavDrawerWidth(this),
DrawerLayout.LayoutParams.MATCH_PARENT, Gravity.START));
if (!PrefUtils.isWelcomeDone(this)) {
PrefUtils.markWelcomeDone(this);
drawerLayout.openDrawer(GravityCompat.START);
}
navigationView.setCheckedItem(getSelfNavDrawerItem());
navigationView.setNavigationItemSelectedListener(item -> {
onNavDrawerItemClicked(item.getItemId());
return false;
});
navigationView.setItemTextColor(ContextCompat.getColorStateList(this, R.color.drawer_text));
navigationView.setItemIconTintList(ContextCompat.getColorStateList(this, R.color.drawer_icons));
}
private boolean isNormalItem(int itemId) {
return itemId != R.id.nav_settings
&& itemId != R.id.nav_changelog
&& itemId != R.id.nav_about
&& itemId != R.id.nav_site
&& itemId != R.id.nav_classroom
&& itemId != R.id.nav_feedback;
}
protected String getToolbarTitle(String navDrawerString) {
return getString(R.string.nav_drawer_toolbar_prefix) + navDrawerString;
}
protected void openDrawer() {
drawerLayout.openDrawer(GravityCompat.START);
}
void lockDrawer(boolean lock) {
if (lock) {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} else {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
ButterKnife.bind(this);
}
@Override
public void onBackPressed() {
if (isNavDrawerOpen()) {
closeNavDrawer();
} else {
super.onBackPressed();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler();
}
@Override
protected void onResume() {
super.onResume();
/* //TODO: Guest mode hidden items
if (PrefUtils.getMode(this) == 1 && (
getSelfNavDrawerItem() == NAVDRAWER_ITEM_AERIES
|| getSelfNavDrawerItem() == NAVDRAWER_ITEM_CALENDAR)) {
goToNavDrawerItem(NAVDRAWER_ITEM_MAP);
}
for (int i = 0; i < mDrawerListLinearLayout.getChildCount(); i++) {
View item = mDrawerListLinearLayout.getChildAt(i);
int itemId = (int) item.getTag();
if (PrefUtils.getMode(this) == 1 &&
(itemId == NAVDRAWER_ITEM_AERIES
|| itemId == NAVDRAWER_ITEM_CALENDAR
|| itemId == NAVDRAWER_ITEM_GCLASSROOM)
) {
item.setVisibility(View.GONE);
} else {
item.setVisibility(View.VISIBLE);
}
}*/
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
setupNavDrawer();
}
private void onNavDrawerItemClicked(final int itemId) {
if (itemId == getSelfNavDrawerItem()) {
drawerLayout.closeDrawer(GravityCompat.START);
return;
}
handler.postDelayed(() -> goToNavDrawerItem(itemId), NAVDRAWER_LAUNCH_DELAY);
drawerLayout.closeDrawer(GravityCompat.START);
}
boolean isNavDrawerOpen() {
return drawerLayout != null && drawerLayout.isDrawerOpen(GravityCompat.START);
}
void closeNavDrawer() {
if (drawerLayout != null) {
drawerLayout.closeDrawer(GravityCompat.START);
}
}
public void showChangelog() {
ChangelogDialog.newInstance().show(getFragmentManager(), "CHANGELOG_DIALOG");
}
private void goToNavDrawerItem(int itemId) {
Intent intent = null;
switch (itemId) {
case R.id.nav_sched:
intent = new Intent(this, ScheduleCalendarActivity.class);
break;
case R.id.nav_aeries:
intent = new Intent(this, AeriesActivity.class);
break;
case R.id.nav_map:
intent = new Intent(this, MapActivity.class);
break;
case R.id.nav_site:
Uri website = Uri.parse("http://www.mvla.net/MVHS/");
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
.setToolbarColor(ContextCompat.getColor(this, R.color.primary))
.enableUrlBarHiding()
.setShowTitle(true)
.build();
CustomTabActivityHelper.openCustomTab(
this, customTabsIntent, website, (activity, uri) -> {
Intent open = new Intent(Intent.ACTION_VIEW);
open.setData(uri);
activity.startActivity(open);
}
);
break;
case R.id.nav_cal:
intent = new Intent(this, StudentCalendarActivity.class);
break;
case R.id.nav_settings:
intent = new Intent(this, SettingsActivity.class);
break;
case R.id.nav_changelog:
showChangelog();
return;
case R.id.nav_classroom:
if (!openApp(this, "com.google.android.apps.classroom")) {
Uri gclassroom = Uri.parse("http://classroom.google.com");
CustomTabsIntent tabsIntent = new CustomTabsIntent.Builder()
.setToolbarColor(ContextCompat.getColor(this, R.color.primary))
.enableUrlBarHiding()
.setShowTitle(true)
.build();
CustomTabActivityHelper.openCustomTab(
this, tabsIntent, gclassroom, (activity, uri) -> {
Intent open = new Intent(Intent.ACTION_VIEW);
open.setData(uri);
activity.startActivity(open);
}
);
}
return;
case R.id.nav_feedback:
new FeedbackDialog().show(getFragmentManager(), "FEEDBACK");
return;
case R.id.nav_about:
intent = new Intent(this, AboutActivity.class);
break;
default:
Toast.makeText(getApplicationContext(), "Work in Progress",
Toast.LENGTH_SHORT).show();
return;
}
if (intent != null) {
startActivity(intent);
//If it is not a special item, finish this activity
if (isNormalItem(itemId)) {
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
finish();
}
}
}
}