/* * Copyright 2013-2015 The GDG Frisbee Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gdg.frisbee.android.common; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.graphics.drawable.DrawerArrowDrawable; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import org.gdg.frisbee.android.Const; import org.gdg.frisbee.android.R; import org.gdg.frisbee.android.about.AboutActivity; import org.gdg.frisbee.android.activity.SettingsActivity; import org.gdg.frisbee.android.app.App; import org.gdg.frisbee.android.chapter.MainActivity; import org.gdg.frisbee.android.eventseries.TaggedEventSeries; import org.gdg.frisbee.android.eventseries.TaggedEventSeriesActivity; import org.gdg.frisbee.android.gde.GdeActivity; import org.gdg.frisbee.android.onboarding.AppInviteLinkGenerator; import org.gdg.frisbee.android.pulse.PulseActivity; import org.gdg.frisbee.android.utils.PlusUtils; import org.gdg.frisbee.android.utils.PrefUtils; import org.gdg.frisbee.android.utils.Utils; import org.gdg.frisbee.android.widget.FeedbackFragment; import java.util.List; import butterknife.BindView; public abstract class GdgNavDrawerActivity extends GdgActivity { private static final int DRAWER_HOME = 0; private static final int DRAWER_PULSE = 2; private static final int DRAWER_GDE = 5; private static final int DRAWER_SETTINGS = 100; private static final int DRAWER_INVITE = 101; private static final int DRAWER_HELP = 102; private static final int DRAWER_FEEDBACK = 103; private static final int DRAWER_ABOUT = 104; // Drawer Special Event Items public static final int DRAWER_DEVFEST = 30; public static final int DRAWER_WTM = 31; public static final int DRAWER_STUDY_JAM = 32; public static final int DRAWER_IO_EXTENDED = 33; public static final int DRAWER_GCP_NEXT = 34; private static final String EXTRA_SELECTED_DRAWER_ITEM_ID = "SELECTED_DRAWER_ITEM_ID"; private static final int GROUP_ID = 1; private static final int SETTINGS_GROUP_ID = 2; @BindView(R.id.drawer) DrawerLayout mDrawerLayout; @BindView(R.id.nav_view) NavigationView mNavigationView; private DrawerHeaderDisplayer headerDisplayer; @Override public void setContentView(int layoutResId) { super.setContentView(layoutResId); if (toolbar != null) { DrawerArrowDrawable drawerIcon = new DrawerArrowDrawable(getSupportActionBar().getThemedContext()); toolbar.setNavigationIcon(drawerIcon); } setupDrawerContent(mNavigationView); } private void setupDrawerContent(NavigationView navigationView) { Menu menu = navigationView.getMenu(); populateMainGroup(menu); populateSettingsGroup(menu); int selectedDrawerItemId = getIntent().getIntExtra(EXTRA_SELECTED_DRAWER_ITEM_ID, DRAWER_HOME); navigationView.setCheckedItem(selectedDrawerItemId); navigationView.setNavigationItemSelectedListener(createDrawerItemClickListener()); headerDisplayer = new DrawerHeaderDisplayer(navigationView.getHeaderView(0), new View.OnClickListener() { @Override public void onClick(View view) { onSignInClick(); } }); } private void populateMainGroup(Menu menu) { menu.add(GROUP_ID, DRAWER_HOME, Menu.NONE, R.string.home_gdg).setIcon(R.drawable.ic_drawer_home_gdg); menu.add(GROUP_ID, DRAWER_GDE, Menu.NONE, R.string.gde).setIcon(R.drawable.ic_drawer_gde); menu.add(GROUP_ID, DRAWER_PULSE, Menu.NONE, R.string.pulse).setIcon(R.drawable.ic_drawer_pulse); //adding special events in navigation drawer final List<TaggedEventSeries> currentEventSeries = App.from(this).currentTaggedEventSeries(); for (TaggedEventSeries taggedEventSeries : currentEventSeries) { menu.add(GROUP_ID, taggedEventSeries.getDrawerId(), Menu.NONE, taggedEventSeries.getTitleResId() ).setIcon(taggedEventSeries.getDrawerIconResId()); } menu.setGroupCheckable(GROUP_ID, true, true); } private static void populateSettingsGroup(Menu menu) { menu.add(SETTINGS_GROUP_ID, DRAWER_SETTINGS, Menu.NONE, R.string.settings) .setIcon(R.drawable.ic_drawer_settings); menu.add(SETTINGS_GROUP_ID, DRAWER_INVITE, Menu.NONE, R.string.invite_friends) .setIcon(R.drawable.ic_drawer_invite); menu.add(SETTINGS_GROUP_ID, DRAWER_HELP, Menu.NONE, R.string.help) .setIcon(R.drawable.ic_drawer_help); menu.add(SETTINGS_GROUP_ID, DRAWER_FEEDBACK, Menu.NONE, R.string.feedback) .setIcon(R.drawable.ic_drawer_feedback); menu.add(SETTINGS_GROUP_ID, DRAWER_ABOUT, Menu.NONE, R.string.about) .setIcon(R.drawable.ic_drawer_about); } private NavigationView.OnNavigationItemSelectedListener createDrawerItemClickListener() { return new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { onDrawerItemClick(menuItem.getItemId()); mDrawerLayout.closeDrawers(); return false; } }; } private void onSignInClick() { if (PrefUtils.isSignedIn(this)) { return; } closeNavDrawer(); requestSignIn(); } @Override protected void onSuccessfulSignIn(GoogleSignInAccount signInAccount) { super.onSuccessfulSignIn(signInAccount); headerDisplayer.updateUserDetails(PlusUtils.getCurrentAccount(this)); String welcome = getString(R.string.welcome_sign_in, signInAccount.getDisplayName()); Toast.makeText(this, welcome, Toast.LENGTH_SHORT).show(); } void onDrawerItemClick(int itemId) { Bundle data = new Bundle(); data.putInt(EXTRA_SELECTED_DRAWER_ITEM_ID, itemId); switch (itemId) { case DRAWER_HOME: navigateTo(MainActivity.class, data); break; case DRAWER_GDE: navigateTo(GdeActivity.class, data); break; case DRAWER_DEVFEST: case DRAWER_WTM: case DRAWER_STUDY_JAM: case DRAWER_IO_EXTENDED: case DRAWER_GCP_NEXT: onDrawerSpecialItemClick(itemId, data); break; case DRAWER_PULSE: navigateTo(PulseActivity.class, data); break; case DRAWER_SETTINGS: navigateTo(SettingsActivity.class, data); break; case DRAWER_INVITE: AppInviteLinkGenerator.shareAppInviteLink(this); break; case DRAWER_HELP: startActivity(Utils.createExternalIntent(this, Uri.parse(Const.URL_HELP))); break; case DRAWER_FEEDBACK: displayFeedbackDialog(); break; case DRAWER_ABOUT: navigateTo(AboutActivity.class, data); break; } } private void onDrawerSpecialItemClick(int itemId, Bundle data) { if (this instanceof TaggedEventSeriesActivity) { TaggedEventSeriesActivity activity = (TaggedEventSeriesActivity) this; TaggedEventSeries taggedEventSeries = activity.getTaggedEventSeries(); if (taggedEventSeries.getDrawerId() == itemId) { return; } } final List<TaggedEventSeries> currentEventSeries = App.from(this).currentTaggedEventSeries(); for (TaggedEventSeries taggedEventSeries : currentEventSeries) { if (taggedEventSeries.getDrawerId() == itemId) { data.putString(Const.EXTRA_TAGGED_EVENT_CACHEKEY, taggedEventSeries.getTag()); data.putParcelable(Const.EXTRA_TAGGED_EVENT, taggedEventSeries); navigateTo(TaggedEventSeriesActivity.class, data); break; } } } private void displayFeedbackDialog() { trackView("Feedback/" + getTrackedViewName()); new FeedbackFragment().show(getSupportFragmentManager(), "FeedbackFragment"); } private void navigateTo(Class<? extends Activity> activityClass, @Nullable Bundle additional) { if (this.getClass().equals(activityClass) && !(this instanceof TaggedEventSeriesActivity)) { return; } Intent intent = new Intent(GdgNavDrawerActivity.this, activityClass); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); if (additional != null) { intent.putExtras(additional); } startActivity(intent); mDrawerLayout.closeDrawers(); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { toggleNavDrawer(); return true; } return super.onOptionsItemSelected(item); } private void toggleNavDrawer() { if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) { mDrawerLayout.closeDrawer(GravityCompat.START); } else { mDrawerLayout.openDrawer(GravityCompat.START); } } @Override protected void onResume() { super.onResume(); headerDisplayer.maybeUpdateChapterImage(PrefUtils.getHomeChapterId(this)); headerDisplayer.updateUserDetails(PlusUtils.getCurrentAccount(this)); } @Override public void onBackPressed() { if (isNavDrawerOpen()) { closeNavDrawer(); } else { super.onBackPressed(); } } private boolean isNavDrawerOpen() { return mDrawerLayout.isDrawerOpen(GravityCompat.START); } private void closeNavDrawer() { mDrawerLayout.closeDrawer(GravityCompat.START); } }