package org.softeg.slartus.forpdaplus;/* * Created by slinkin on 07.04.2014. */ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Handler; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.Toast; import com.afollestad.materialdialogs.MaterialDialog; import org.softeg.slartus.forpdaplus.common.AppLog; import org.softeg.slartus.forpdaplus.fragments.DownloadFragment; import org.softeg.slartus.forpdaplus.fragments.ForumRulesFragment; import org.softeg.slartus.forpdaplus.fragments.topic.ThemeFragment; import org.softeg.slartus.forpdaplus.listtemplates.AppAndGame; import org.softeg.slartus.forpdaplus.listtemplates.BrickInfo; import org.softeg.slartus.forpdaplus.listtemplates.DownloadsBrickInfo; import org.softeg.slartus.forpdaplus.listtemplates.FaqBrickInfo; import org.softeg.slartus.forpdaplus.listtemplates.ForumRulesBrick; import org.softeg.slartus.forpdaplus.listtemplates.ListCore; import org.softeg.slartus.forpdaplus.listtemplates.MarkAllReadBrickInfo; import org.softeg.slartus.forpdaplus.listtemplates.PreferencesBrickInfo; import org.softeg.slartus.forpdaplus.prefs.Preferences; import org.softeg.slartus.forpdaplus.prefs.PreferencesActivity; import java.util.List; public class MainDrawerMenu implements NavigationView.OnNavigationItemSelectedListener { private DrawerLayout mDrawerLayout; private NavigationView mDrawer; private ActionBarDrawerToggle mDrawerToggle; private MainActivity mActivity; private SelectItemListener mSelectItemListener; private Handler mHandler = new Handler(); private SharedPreferences prefs; private Menu menu; private int prevSelectedGroup; private int prevSelectedItem; private BrickInfo selectedBrick; public interface SelectItemListener { void selectItem(BrickInfo brickInfo); } public MainDrawerMenu(MainActivity activity, SelectItemListener listener) { prefs = App.getInstance().getPreferences(); DisplayMetrics displayMetrics = App.getInstance().getResources().getDisplayMetrics(); float dpWidth = displayMetrics.widthPixels; if (dpWidth > displayMetrics.density * 400) { dpWidth = displayMetrics.density * 400; } dpWidth -= 80 * displayMetrics.density; mActivity = activity; mSelectItemListener = listener; mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawer = (NavigationView) findViewById(R.id.left_drawer); mDrawer.setNavigationItemSelectedListener(this); DrawerLayout.LayoutParams params = (DrawerLayout.LayoutParams) mDrawer.getLayoutParams(); params.width = (int) dpWidth; if ("right".equals(Preferences.System.getDrawerMenuPosition())) { params.gravity = Gravity.RIGHT; mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_end, GravityCompat.END); } else { mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow_start, GravityCompat.START); } mDrawer.setLayoutParams(params); setNavigationItems(); mDrawerToggle = new ActionBarDrawerToggle(mActivity, mDrawerLayout, mActivity.toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); mActivity.hidePopupWindows(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); mDrawerToggle.syncState(); } private void setNavigationItems() { menu = mDrawer.getMenu(); menu.clear(); int itemId = 0; int i = 0; SubMenu subMenu; List<BrickInfo> list; subMenu = menu.addSubMenu(1, 0, 0, R.string.all); list = ListCore.getMainMenuBricks(); for (i = 0; i < list.size(); i++, itemId++) subMenu.add(1, itemId, i, list.get(i).getTitle()).setIcon(list.get(i).getIcon()); subMenu = menu.addSubMenu(2, 0, 0, R.string.other); list = ListCore.getOthersBricks(); for (i = 0; i < list.size(); i++, itemId++) subMenu.add(2, itemId, i, list.get(i).getTitle()).setIcon(list.get(i).getIcon()); } public void setItemCheckable(String name) { SubMenu subMenu; MenuItem item; for (int i = 0; i < menu.size(); i++) { subMenu = menu.getItem(i).getSubMenu(); for (int j = 0; j < subMenu.size(); j++) { item = subMenu.getItem(j); if (item.getTitle().equals(name)) { Log.e("keka", "true"); menu.getItem(prevSelectedGroup).getSubMenu().getItem(prevSelectedItem).setCheckable(false).setChecked(false); item.setCheckable(true).setChecked(true); prevSelectedGroup = i; prevSelectedItem = j; prefs.edit().putString("navItemTitle", name).apply(); return; } } } } private void selectItem(BrickInfo brickIinfo) { mSelectItemListener.selectItem(brickIinfo); Preferences.Lists.setLastSelectedList(brickIinfo.getName()); Preferences.Lists.addLastAction(brickIinfo.getName()); setItemCheckable(brickIinfo.getTitle()); } public NavigationView getNavigationView() { return mDrawer; } public ActionBarDrawerToggle getDrawerToggle() { return mDrawerToggle; } public DrawerLayout getDrawerLayout() { return mDrawerLayout; } private Context getContext() { return mActivity.getContext(); } private View findViewById(int id) { return mActivity.findViewById(id); } public void toggleOpenState() { if (mDrawerLayout.isDrawerOpen(mDrawer)) { mDrawerLayout.closeDrawer(mDrawer); } else { mDrawerLayout.openDrawer(mDrawer); } } public void close() { mDrawerLayout.closeDrawer(mDrawer); } public Boolean isOpen() { return mDrawerLayout.isDrawerOpen(mDrawer); } @Override public boolean onNavigationItemSelected(MenuItem item) { close(); switch (item.getGroupId()) { case 0: selectedBrick = ListCore.createBricks(Preferences.Lists.getLastActions()).get(item.getOrder()); break; case 1: selectedBrick = ListCore.getMainMenuBricks().get(item.getOrder()); break; case 2: selectedBrick = ListCore.getOthersBricks().get(item.getOrder()); break; } switcha: switch (selectedBrick.getName()) { case AppAndGame.NAME: final List<ApplicationInfo> packages = getContext().getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo : packages) { if (packageInfo.packageName.equals("ru.freeman42.app4pda")) { getContext().startActivity(getContext().getPackageManager().getLaunchIntentForPackage(packageInfo.packageName)); break switcha; } } ThemeFragment.showTopicById("275433"); break; case PreferencesBrickInfo.NAME: mActivity.startActivityForResult(new Intent(mActivity, PreferencesActivity.class), 0); break; case DownloadsBrickInfo.NAME: try { DownloadFragment.newInstance(); } catch (Exception ex) { AppLog.e(mActivity, ex); } break; case MarkAllReadBrickInfo.NAME: if (!Client.getInstance().getLogined()) { Toast.makeText(mActivity, R.string.need_login, Toast.LENGTH_SHORT).show(); break; } new MaterialDialog.Builder(mActivity) .title(R.string.confirm_action) .content(getContext().getString(R.string.mark_all_forums_read) + "?") .positiveText(R.string.yes) .callback(new MaterialDialog.ButtonCallback() { @Override public void onPositive(MaterialDialog dialog) { Toast.makeText(mActivity, R.string.request_sent, Toast.LENGTH_SHORT).show(); new Thread(new Runnable() { public void run() { Throwable ex = null; try { Client.getInstance().markAllForumAsRead(); } catch (Throwable e) { ex = e; } final Throwable finalEx = ex; mHandler.post(new Runnable() { public void run() { try { if (finalEx != null) { Toast.makeText(mActivity, R.string.error, Toast.LENGTH_SHORT).show(); AppLog.e(mActivity, finalEx); } else { Toast.makeText(mActivity, R.string.forum_setted_read, Toast.LENGTH_SHORT).show(); } } catch (Exception ex) { AppLog.e(mActivity, ex); } } }); } }).start(); } }) .negativeText(R.string.cancel) .show(); break; case FaqBrickInfo.NAME: IntentActivity.showTopic("http://4pda.ru/forum/index.php?s=&showtopic=271502&view=findpost&p=45570566"); break; case ForumRulesBrick.NAME: ForumRulesFragment.showRules(); break; default: if (item.getGroupId() != 2) selectItem(selectedBrick); } return true; } }