package net.oschina.gitapp.ui; import net.oschina.gitapp.AppContext; import net.oschina.gitapp.AppException; import net.oschina.gitapp.AppManager; import net.oschina.gitapp.R; import android.annotation.TargetApi; import android.content.Intent; import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import net.oschina.gitapp.bean.CommonList; import net.oschina.gitapp.bean.ProjectNotificationArray; import net.oschina.gitapp.common.DoubleClickExitHelper; import net.oschina.gitapp.common.UIHelper; import net.oschina.gitapp.common.UpdateManager; import net.oschina.gitapp.interfaces.*; import net.oschina.gitapp.ui.fragments.ExploreViewPagerFragment; import net.oschina.gitapp.ui.fragments.MySelfViewPagerFragment; import net.oschina.gitapp.widget.BadgeView; /** * 程序主界面 * @created 2014-04-29 * @author 火蚁(http://my.oschina.net/LittleDY) * * 最后更新:2014-05-29 * 更新内容:更改以callBack的方式进行交互 * 更新者:火蚁 */ @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public class MainActivity extends ActionBarActivity implements DrawerMenuCallBack { static final String DRAWER_MENU_TAG = "drawer_menu"; static final String DRAWER_CONTENT_TAG = "drawer_content"; static final String CONTENT_TAG_EXPLORE = "content_explore"; static final String CONTENT_TAG_MYSELF = "content_myself"; static final String CONTENTS[] = { CONTENT_TAG_EXPLORE, CONTENT_TAG_MYSELF }; static final String FRAGMENTS[] = { ExploreViewPagerFragment.class.getName(), MySelfViewPagerFragment.class.getName() }; final String TITLES[] = { "发现", "我的" }; private static DrawerNavigationMenu mMenu = DrawerNavigationMenu.newInstance(); private DrawerLayout mDrawerLayout; private ActionBarDrawerToggle mDrawerToggle; private FragmentManager mFragmentManager; private DoubleClickExitHelper mDoubleClickExitHelper; // 当前显示的界面标识 private String mCurrentContentTag; private ActionBar mActionBar; private AppContext mContext; private static String mTitle;// actionbar标题 public static BadgeView mNotificationBadgeView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = (AppContext) getApplicationContext(); initView(savedInstanceState); AppManager.getAppManager().addActivity(this); // 检查新版本 if (mContext.isCheckUp()) { UpdateManager.getUpdateManager().checkAppUpdate(this, false); } // 启动轮询获取通知信息 if (mContext.isReceiveNotice()) { foreachUserNotice(); } } @Override protected void onDestroy() { super.onDestroy(); } @Override protected void onResume() { super.onResume(); if (mTitle != null) { mActionBar.setTitle(mTitle); } if (mCurrentContentTag != null && mContext !=null && mMenu != null) { if (mCurrentContentTag.equalsIgnoreCase(CONTENTS[1])) { if (!mContext.isLogin()) { onClickExplore(); mMenu.highlightExplore(); } } } } private void initView(Bundle savedInstanceState) { mActionBar = getSupportActionBar(); mActionBar.setDisplayHomeAsUpEnabled(true); mActionBar.setHomeButtonEnabled(true); mDoubleClickExitHelper = new DoubleClickExitHelper(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerLayout.setDrawerListener(new DrawerMenuListener()); // 设置滑出菜单的阴影效果 //mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, 0, 0); mFragmentManager = getSupportFragmentManager(); if (null == savedInstanceState) { setExploreShow(); } } private void setExploreShow() { FragmentTransaction ft = mFragmentManager.beginTransaction(); ft.replace(R.id.main_slidingmenu_frame, mMenu, DRAWER_MENU_TAG) .replace(R.id.main_content, ExploreViewPagerFragment.newInstance(), DRAWER_CONTENT_TAG).commit(); mTitle = "发现"; mActionBar.setTitle(mTitle); mCurrentContentTag = CONTENT_TAG_EXPLORE; } /** * 轮询通知信息 */ private void foreachUserNotice() { final boolean isLogin = mContext.isLogin(); final Handler handler = new Handler() { @SuppressWarnings("unchecked") public void handleMessage(Message msg) { if (msg.what == 1) { CommonList<ProjectNotificationArray> commonList = (CommonList<ProjectNotificationArray>) msg.obj; int count = 0; for (ProjectNotificationArray pna : commonList.getList()) { count += pna.getProject().getNotifications().size(); } UIHelper.sendBroadCast(MainActivity.this, count); } foreachUserNotice();// 回调 } }; new Thread() { public void run() { Message msg = new Message(); try { sleep(60 * 1000); if (isLogin) { msg.obj = mContext.getNotification("", "", ""); msg.what = 1; } else { msg.what = 0; } } catch (AppException e) { e.printStackTrace(); msg.what = -1; } catch (Exception e) { e.printStackTrace(); msg.what = -1; } handler.sendMessage(msg); } }.start(); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_actionbar_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.main_actionbar_menu_search: UIHelper.showSearch(mContext); return true; case R.id.main_actionbar_menu_notification: onClickNotice(); return true; default: break; } return mDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // 判断菜单是否打开 if (mDrawerLayout.isDrawerOpen(Gravity.START)) { mDrawerLayout.closeDrawers(); return true; } return mDoubleClickExitHelper.onKeyDown(keyCode, event); } if (keyCode == KeyEvent.KEYCODE_MENU) { if (mDrawerLayout.isDrawerOpen(Gravity.START)) { mDrawerLayout.closeDrawers(); return true; } else { mDrawerLayout.openDrawer(Gravity.START); return true; } } return super.onKeyDown(keyCode, event); } /** 显示内容*/ private void showMainContent(int pos) { //关闭侧边栏菜单 mDrawerLayout.closeDrawers(); //获取当前的tag String tag = CONTENTS[pos]; //如果获得的tag 就是当前的tag,那么返回,什么也不做 if (tag.equalsIgnoreCase(mCurrentContentTag)) return; // FragmentTransaction对fragment进行添加,移除,替换,以及执行其他动作。 FragmentTransaction ft = mFragmentManager.beginTransaction(); if(mCurrentContentTag != null) { Fragment fragment = mFragmentManager.findFragmentByTag(mCurrentContentTag); //这儿为什么要移除 Fragment。 if(fragment != null) { ft.remove(fragment); } } //instantiate 这个是干嘛的? ft.replace(R.id.main_content, Fragment.instantiate(this, FRAGMENTS[pos]), tag); ft.commit(); mActionBar.setTitle(TITLES[pos]); mTitle = mActionBar.getTitle().toString();//记录主界面的标题 mCurrentContentTag = tag; } //回调方法用于:触发菜单栏中的各个条目 private void showLoginActivity() { if (!mContext.isLogin()) { Intent intent = new Intent(mContext, LoginActivity.class); startActivity(intent); } else { UIHelper.showMySelfInfoDetail(MainActivity.this); } } @Override public void onClickLogin() { showLoginActivity(); } @Override public void onClickExplore() { showMainContent(0); } @Override public void onClickMySelf() { if (!mContext.isLogin()) { UIHelper.showLoginActivity(this); return; } else { showMainContent(1); } } public void onClickNotice() { if (!mContext.isLogin()) { UIHelper.showLoginActivity(this); return; } Intent intent = new Intent(mContext, NotificationActivity.class); startActivity(intent); } @Override public void onClickLanguage() { Intent intent = new Intent(mContext, LanguageActivity.class); startActivity(intent); } @Override public void onClickShake() { Intent intent = new Intent(mContext, ShakeActivity.class); startActivity(intent); } @Override public void onClickSetting() { Intent intent = new Intent(mContext, SettingActivity.class); startActivity(intent); } @Override public void onClickExit() { this.finish(); } private class DrawerMenuListener implements DrawerLayout.DrawerListener { @Override public void onDrawerOpened(View drawerView) { mDrawerToggle.onDrawerOpened(drawerView); } @Override public void onDrawerClosed(View drawerView) { mDrawerToggle.onDrawerClosed(drawerView); } @Override public void onDrawerSlide(View drawerView, float slideOffset) { mDrawerToggle.onDrawerSlide(drawerView, slideOffset); } @Override public void onDrawerStateChanged(int newState) { mDrawerToggle.onDrawerStateChanged(newState); } } }