package com.ronakmanglani.watchlist.ui.fragment; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.NavigationView; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AlertDialog; import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar.OnMenuItemClickListener; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.ronakmanglani.watchlist.R; import com.ronakmanglani.watchlist.WatchlistApp; import com.ronakmanglani.watchlist.ui.activity.BackupActivity; import com.ronakmanglani.watchlist.ui.activity.SearchActivity; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; import static android.support.design.widget.NavigationView.OnNavigationItemSelectedListener; public class MovieDrawerFragment extends Fragment implements OnMenuItemClickListener, OnNavigationItemSelectedListener { private Fragment fragment; private Unbinder unbinder; private SharedPreferences preferences; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.drawer_layout) DrawerLayout drawerLayout; @BindView(R.id.navigation_view) NavigationView navigationView; // Fragment lifecycle @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_movie_drawer, container, false); unbinder = ButterKnife.bind(this, v); preferences = getContext().getSharedPreferences(WatchlistApp.TABLE_USER, Context.MODE_PRIVATE); // Setup toolbar toolbar.inflateMenu(R.menu.menu_movie); toolbar.setOnMenuItemClickListener(this); onRefreshToolbarMenu(); // Setup navigation drawer ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.app_name, R.string.app_name) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; drawerLayout.setDrawerListener(actionBarDrawerToggle); navigationView.setNavigationItemSelectedListener(this); actionBarDrawerToggle.syncState(); // Load previously selected drawer item int lastPosition = preferences.getInt(WatchlistApp.LAST_SELECTED, 0); if (savedInstanceState == null) { setSelectedDrawerItem(lastPosition); } else { fragment = getActivity().getSupportFragmentManager().findFragmentByTag(WatchlistApp.TAG_GRID_FRAGMENT); if (savedInstanceState.containsKey(WatchlistApp.TOOLBAR_TITLE)) { toolbar.setTitle(savedInstanceState.getString(WatchlistApp.TOOLBAR_TITLE)); } else { toolbar.setTitle(navigationView.getMenu().getItem(lastPosition).getTitle()); } } return v; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(WatchlistApp.TOOLBAR_TITLE, toolbar.getTitle().toString()); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } // Toolbar action menu @Override public boolean onMenuItemClick(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_search: startActivity(new Intent(getContext(), SearchActivity.class)); return true; case R.id.action_grid: SharedPreferences.Editor editor1 = preferences.edit(); editor1.putInt(WatchlistApp.VIEW_MODE, WatchlistApp.VIEW_MODE_GRID); editor1.apply(); onRefreshToolbarMenu(); onRefreshFragmentLayout(); return true; case R.id.action_list: SharedPreferences.Editor editor2 = preferences.edit(); editor2.putInt(WatchlistApp.VIEW_MODE, WatchlistApp.VIEW_MODE_LIST); editor2.apply(); onRefreshToolbarMenu(); onRefreshFragmentLayout(); return true; case R.id.action_compact: SharedPreferences.Editor editor3 = preferences.edit(); editor3.putInt(WatchlistApp.VIEW_MODE, WatchlistApp.VIEW_MODE_COMPACT); editor3.apply(); onRefreshToolbarMenu(); onRefreshFragmentLayout(); return true; case R.id.action_backup: Intent backupIntent = new Intent(getContext(), BackupActivity.class); startActivity(backupIntent); return true; case R.id.action_rate: Intent rateIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getContext().getPackageName())); startActivity(rateIntent); return true; case R.id.action_twitter: Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://twitter.com/Ronak_LM")); startActivity(browserIntent); return true; case R.id.action_email: Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto","ronak_lm@outlook.com", null)); emailIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name)); try { startActivity(Intent.createChooser(emailIntent, getString(R.string.action_email_using))); } catch (Exception e) { Toast.makeText(getContext(), R.string.action_email_error, Toast.LENGTH_SHORT).show(); } return true; case R.id.action_about: AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_about, null); view.findViewById(R.id.tmdb_link).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://themoviedb.org")); startActivity(browserIntent); } }); builder.setView(view); builder.show(); return true; default: return false; } } private void onRefreshToolbarMenu() { int viewMode = preferences.getInt(WatchlistApp.VIEW_MODE, WatchlistApp.VIEW_MODE_GRID); if (viewMode == WatchlistApp.VIEW_MODE_GRID) { // Change from grid to list Menu menu = toolbar.getMenu(); menu.findItem(R.id.action_grid).setVisible(false); menu.findItem(R.id.action_list).setVisible(true); menu.findItem(R.id.action_compact).setVisible(false); } else if (viewMode == WatchlistApp.VIEW_MODE_LIST) { // Change from list to compact Menu menu = toolbar.getMenu(); menu.findItem(R.id.action_grid).setVisible(false); menu.findItem(R.id.action_list).setVisible(false); menu.findItem(R.id.action_compact).setVisible(true); } else { // Change from compact to grid Menu menu = toolbar.getMenu(); menu.findItem(R.id.action_grid).setVisible(true); menu.findItem(R.id.action_list).setVisible(false); menu.findItem(R.id.action_compact).setVisible(false); } } private void onRefreshFragmentLayout() { if (fragment instanceof MovieListFragment) { ((MovieListFragment) fragment).refreshLayout(); } else if (fragment instanceof MovieSavedFragment) { ((MovieSavedFragment) fragment).refreshLayout(); } } // Drawer item selection @Override public boolean onNavigationItemSelected(MenuItem item) { drawerLayout.closeDrawers(); int id = item.getItemId(); switch (id) { case R.id.drawer_popular: setSelectedDrawerItem(0); return true; case R.id.drawer_rated: setSelectedDrawerItem(1); return true; case R.id.drawer_upcoming: setSelectedDrawerItem(2); return true; case R.id.drawer_playing: setSelectedDrawerItem(3); return true; case R.id.drawer_watched: setSelectedDrawerItem(4); return true; case R.id.drawer_to_see: setSelectedDrawerItem(5); return true; default: return false; } } private void setSelectedDrawerItem(int position) { MenuItem item = navigationView.getMenu().getItem(position); item.setChecked(true); toolbar.setTitle(item.getTitle()); // Create and setup bundle args Bundle args = new Bundle(); if (position == 0) { args.putInt(WatchlistApp.VIEW_TYPE, WatchlistApp.VIEW_TYPE_POPULAR); } else if (position == 1) { args.putInt(WatchlistApp.VIEW_TYPE, WatchlistApp.VIEW_TYPE_RATED); } else if (position == 2) { args.putInt(WatchlistApp.VIEW_TYPE, WatchlistApp.VIEW_TYPE_UPCOMING); } else if (position == 3) { args.putInt(WatchlistApp.VIEW_TYPE, WatchlistApp.VIEW_TYPE_PLAYING); } else if (position == 4) { args.putInt(WatchlistApp.VIEW_TYPE, WatchlistApp.VIEW_TYPE_WATCHED); } else if (position == 5) { args.putInt(WatchlistApp.VIEW_TYPE, WatchlistApp.VIEW_TYPE_TO_SEE); } // Initialize fragment type if (position <= 3) { fragment = new MovieListFragment(); } else { fragment = new MovieSavedFragment(); } fragment.setArguments(args); FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.content_frame, fragment, WatchlistApp.TAG_GRID_FRAGMENT); transaction.commit(); // Save selected position to preference SharedPreferences.Editor editor = preferences.edit(); editor.putInt(WatchlistApp.LAST_SELECTED, position); editor.apply(); } }