package org.aisen.weibo.sina.ui.activity.main; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.bean.ApkInfo; import org.aisen.weibo.sina.support.bean.MenuBean; import org.aisen.weibo.sina.support.iclass.IAcNavigation; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.AppSettings; import org.aisen.weibo.sina.support.utils.CheckChangedUtils; import org.aisen.weibo.sina.ui.activity.common.WeiboBaseActivity; import org.aisen.weibo.sina.ui.activity.publish.PublishActivity; import org.aisen.weibo.sina.ui.activity.search.SearchActivity; import org.aisen.weibo.sina.ui.fragment.comment.CommentPagerFragment; import org.aisen.weibo.sina.ui.fragment.draft.DraftFragment; import org.aisen.weibo.sina.ui.fragment.friendship.FriendshipPagerFragment; import org.aisen.weibo.sina.ui.fragment.mention.Mention_v2Fragment; import org.aisen.weibo.sina.ui.fragment.menu.MenuFragment_v2; import org.aisen.weibo.sina.ui.fragment.menu.MenuFragment_v2.MenuCallback; import org.aisen.weibo.sina.ui.fragment.profile.UserProfileFragment; import org.aisen.weibo.sina.ui.fragment.settings.AboutWebFragment; import org.aisen.weibo.sina.ui.fragment.settings.SettingsFragment; import org.aisen.weibo.sina.ui.fragment.settings.VersionSettingsFragment; import org.aisen.weibo.sina.ui.fragment.timeline.FavoritesFragment; import org.aisen.weibo.sina.ui.fragment.timeline.MainTimelinePagerFragment; import android.app.ActionBar; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import com.ikimuhendis.ldrawer.ActionBarDrawerToggle; import com.ikimuhendis.ldrawer.DrawerArrowDrawable; import android.support.v4.widget.DrawerLayout; import android.text.TextUtils; import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ArrayAdapter; import com.alibaba.fastjson.JSON; import com.m.common.context.GlobalContext; import com.m.common.utils.ActivityHelper; import com.m.common.utils.SystemUtility; import com.m.support.Inject.ViewInject; import com.m.ui.fragment.ABaseFragment; import com.m.ui.fragment.CacheClearFragment; import com.m.ui.utils.MToast; public class MainActivity extends WeiboBaseActivity implements MenuCallback { public static void login() { Intent intent = new Intent(GlobalContext.getInstance(), MainActivity.class); intent.setAction(ACTION_LOGIN); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); GlobalContext.getInstance().startActivity(intent); } private static final String ACTION_LOGIN = "org.aisen.sina.weibo.LOGIN"; @ViewInject(id = R.id.drawer) private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private MenuBean lastSelectedMenu; private MenuFragment_v2 menuFragment; @Override protected void onCreate(Bundle savedInstanceState) { final org.aisen.weibo.sina.ui.fragment.base.ActivityHelper activityHelper = (org.aisen.weibo.sina.ui.fragment.base.ActivityHelper) getActivityHelper(); activityHelper.blur = AppSettings.isMainBlur(); super.onCreate(savedInstanceState); setContentView(R.layout.ui_main); // 初始化信息弹窗 MToast.yOffset = SystemUtility.getStatusBarHeight(this) * 2 + SystemUtility.getActionBarHeight(this); DrawerArrowDrawable drawerArrow = new DrawerArrowDrawable(this) { @Override public boolean isLayoutRtl() { return false; } }; mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, drawerArrow, R.string.draw_open, R.string.draw_close) { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); if (lastSelectedMenu != null) { getActionBar().setTitle(lastSelectedMenu.getTitleRes()); invalidateOptionsMenu(); } Fragment fragment = (Fragment) getFragmentManager().findFragmentByTag("MainFragment"); if (fragment instanceof IAcNavigation) { getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); } } @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); getActionBar().setTitle(R.string.app_name); invalidateOptionsMenu(); getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { super.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerStateChanged(int newState) { super.onDrawerStateChanged(newState); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); getActionBar().setDisplayHomeAsUpEnabled(true); //getActionBar().setIcon(R.drawable.ic_ab_app); //getActionBar().setDisplayShowHomeEnabled(true); lastSelectedMenu = savedInstanceState == null ? null : (MenuBean) savedInstanceState.getSerializable("menu"); if (ActivityHelper.getInstance().getBooleanShareData("isFirstLaunch", true)) { ActivityHelper.getInstance().putBooleanShareData("isFirstLaunch", false); mDrawerLayout.openDrawer(Gravity.LEFT); } else { if (lastSelectedMenu != null) getActionBar().setTitle(lastSelectedMenu.getTitleRes()); else getActionBar().setTitle(R.string.draw_timeline); } if (savedInstanceState == null) { String action = getIntent() != null ? getIntent().getAction() : null; String type = null; // 处理点击Notification时,设置显示菜单 if (ACTION_LOGIN.equals(action)) { type = "1"; } else if ("showFollowers".equals(action)) { type = "4"; } else if ("showComments".equals(action)) { type = "3"; } else if ("showMentionStatus".equals(action)) { ActivityHelper.getInstance().putShareData("showMensitonType", "showMentionStatus"); type = "2"; } else if ("showMentionCmt".equals(action)) { ActivityHelper.getInstance().putShareData("showMensitonType", "showMentionCmt"); type = "2"; } else if ("showDraft".equals(action)) { type = "6"; } menuFragment = MenuFragment_v2.newInstance(type); menuFragment.setMenuCallback(this); getFragmentManager().beginTransaction().add(R.id.menu_frame, menuFragment, "MenuFragment").commit(); } else { menuFragment = (MenuFragment_v2) getFragmentManager().findFragmentByTag("MenuFragment"); menuFragment.setMenuCallback(this); // 2014-8-30 解决因为状态保存而导致的耗时阻塞 if (lastSelectedMenu.getType().equals("1")) onMenuSelected(lastSelectedMenu, true); } if (ActivityHelper.getInstance().getBooleanShareData("newVersion", false)) { String apkInfoJson = ActivityHelper.getInstance().getShareData("apkInfo", null); if (!TextUtils.isEmpty(apkInfoJson)) { ApkInfo apkInfo = JSON.parseObject(apkInfoJson, ApkInfo.class); if (!ActivityHelper.getInstance().getBooleanShareData("IgnoreNewVersion-" + apkInfo.getVersionCode(), false)) { VersionSettingsFragment.showNewVersionDialog(this, apkInfo, true); } } } // 每次启动应用,检测是否下载了壁纸 CheckChangedUtils.checkWallpaper(); // 2014-10-29 解决首次进入首页时,ActionBar的颜色总差一点点的BUG new Handler().postDelayed(new Runnable() { @Override public void run() { activityHelper.wallpaper.setWallpaper(); } }, 200); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent != null) { String action = intent.getAction(); lastSelectedMenu = null; MenuBean menuBean = null; if (ACTION_LOGIN.equals(action)) { menuBean = getMenu(1); } else if ("showFollowers".equals(action)) { menuBean = getMenu(4); } else if ("showComments".equals(action)) { menuBean = getMenu(3); } else if ("showMentionStatus".equals(action)) { ActivityHelper.getInstance().putShareData("showMensitonType", "showMentionStatus"); menuBean = getMenu(2); } else if ("showMentionCmt".equals(action)) { ActivityHelper.getInstance().putShareData("showMensitonType", "showMentionCmt"); menuBean = getMenu(2); } else if ("showDraft".equals(action)) { menuBean = getMenu(6); } if (menuBean != null) { onMenuSelected(menuBean, true); MenuFragment_v2 menuFragment = (MenuFragment_v2) getFragmentManager().findFragmentByTag("MenuFragment"); menuFragment.setItemTextColor(menuBean); if ("1".equals(menuBean.getType())) menuFragment.setAccountItem(); } if (isDrawerOpened()) closeDrawer(); } } private MenuBean getMenu(int type) { return MenuFragment_v2.newMenu(String.valueOf(type)); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (lastSelectedMenu != null) outState.putSerializable("menu", lastSelectedMenu); } @Override public boolean onMenuSelected(MenuBean menu, boolean replace) { if (!replace && lastSelectedMenu != null && lastSelectedMenu.getType().equals(menu.getType())) { closeDrawer(); return true; } int type = Integer.parseInt(menu.getType()); ActionBar actionBar = getActionBar(); actionBar.setSubtitle(null); actionBar.setTitle(menu.getTitleRes()); ABaseFragment fragment = null; switch (type) { // 授权用户信息 case 0: fragment = UserProfileFragment.newInstance(); break; // 微博首页 case 1: fragment = MainTimelinePagerFragment.newInstance(); break; // 提及 case 2: // 显示提及的微博、评论的Navigation导航 // fragment = MentionFragment.newInstance(); // 修改为只有提及全部微博、全部评论,没有Navigation导航 fragment = Mention_v2Fragment.newInstance(); break; // 评论 case 3: fragment = CommentPagerFragment.newInstance(); break; // 朋友关系 case 4: fragment = FriendshipPagerFragment.newInstance(); break; // 草稿箱 case 6: fragment = DraftFragment.newInstance(); break; // 收藏的微博 case 7: fragment = FavoritesFragment.newInstance(); break; // 设置 case 5: closeDrawer(); SettingsFragment.launch(this); return true; // 搜索 case 8: closeDrawer(); SearchActivity.launch(this); return true; default: return true; } if (fragment instanceof IAcNavigation) { actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); IAcNavigation onNavigation = (IAcNavigation) fragment; ArrayAdapter<CharSequence> spinnerAdapter = ArrayAdapter.createFromResource(this, onNavigation.adapterResource(), R.layout.sherlock_spinner_item); spinnerAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); actionBar.setListNavigationCallbacks(spinnerAdapter, onNavigation); actionBar.setSelectedNavigationItem(onNavigation.current()); } else { actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); } getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment, "MainFragment").commit(); lastSelectedMenu = menu; return false; } public void closeDrawer() { mDrawerLayout.closeDrawers(); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.findItem(R.id.publish).setVisible(true); menu.findItem(R.id.help).setVisible(false); menu.findItem(R.id.about).setVisible(true); if (lastSelectedMenu != null && "1".equals(lastSelectedMenu.getType())) { } // 微博首页时,一直显示发布新微博 if (lastSelectedMenu != null && "1".equals(lastSelectedMenu.getType()) && !isDrawerOpened()) { menu.findItem(R.id.publish).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); } // 其他情况,放置到溢出菜单 else { menu.findItem(R.id.publish).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); } return super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { resetAcUnused(); if (mDrawerToggle.onOptionsItemSelected(item)) return true; if (item.getItemId() == R.id.publish) PublishActivity.publishStatus(this, null); else if (item.getItemId() == R.id.help) AboutWebFragment.launchHelp(this); else if (item.getItemId() == R.id.about) AboutWebFragment.launchAbout(this); else if (item.getItemId() == R.id.feedback) PublishActivity.publishFeedback(this); return super.onOptionsItemSelected(item); } public boolean isDrawerOpened() { return mDrawerLayout.isDrawerOpen(Gravity.LEFT); } private boolean canFinish = false; @Override public boolean onBackClick() { if (!canFinish) { canFinish = true; showMessage(R.string.hint_exit); new Handler().postDelayed(new Runnable() { @Override public void run() { canFinish = false; } }, 1500); return true; } setMDestory(true); return super.onBackClick(); } @Override protected void onResume() { final org.aisen.weibo.sina.ui.fragment.base.ActivityHelper activityHelper = (org.aisen.weibo.sina.ui.fragment.base.ActivityHelper) getActivityHelper(); activityHelper.wallpaper.blur = AppSettings.isMainBlur(); super.onResume(); if (!AppContext.isLogedin()) finish(); } @Override public void onDestroy() { super.onDestroy(); // 清理压缩缓存 CacheClearFragment.clearCompress(); } }