package studio.uphie.one.ui; import android.app.AlertDialog; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.PersistableBundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.text.TextUtils; import android.view.Gravity; import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RadioGroup; import android.widget.TextView; import com.umeng.analytics.AnalyticsConfig; import com.umeng.analytics.MobclickAgent; import com.umeng.fb.FeedbackAgent; import com.umeng.fb.model.UserInfo; import com.umeng.update.UmengUpdateAgent; import com.umeng.update.UmengUpdateListener; import com.umeng.update.UpdateResponse; import com.umeng.update.UpdateStatus; import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Random; import butterknife.Bind; import butterknife.ButterKnife; import studio.uphie.one.R; import studio.uphie.one.common.App; import studio.uphie.one.interfaces.ShareChannel; import studio.uphie.one.ui.article.ArticleFragment; import studio.uphie.one.ui.home.HomeFragment; import studio.uphie.one.ui.personal.PersonalFragment; import studio.uphie.one.ui.question.QuestionFragment; import studio.uphie.one.ui.thing.ThingFragment; import studio.uphie.one.utils.ConfigUtil; import studio.uphie.one.utils.SysUtil; import studio.uphie.one.utils.TextToast; /** * Created by Uphie on 2015/9/5. * Email: uphie7@gmail.com */ public class MainActivity extends FragmentActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener { @Bind(R.id.tab_group) RadioGroup tabGroup; @Bind(R.id.action_bar_more) TextView actionBarMore; private HomeFragment homeFragment; private ArticleFragment articleFragment; private QuestionFragment questionFragment; private ThingFragment thingFragment; private PersonalFragment personalFragment; private FragmentManager fragmentManager; private PopupWindow sharePanel; private long curTime; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); App.displayMetrics = SysUtil.getDisplayMetrics(this); actionBarMore.setOnClickListener(this); tabGroup.setOnCheckedChangeListener(this); fragmentManager = getSupportFragmentManager(); if (savedInstanceState == null) { homeFragment = new HomeFragment(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.add(R.id.main_content, homeFragment); transaction.commit(); } setUmeng(); } @Override protected void onResume() { super.onResume(); MobclickAgent.onPageStart("MainPage"); MobclickAgent.onResume(this); } @Override protected void onPause() { super.onPause(); MobclickAgent.onPageEnd("MainPage"); MobclickAgent.onPause(this); } @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { //不保存Fragment的状态,否则在后台长时间运行再返回后,会有Fragment重叠的情况 } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //2秒之内的连续按返回键视为退出,防止误操作 if (System.currentTimeMillis() - curTime < 2000) { finish(); MobclickAgent.onKillProcess(this); System.exit(0); } else { TextToast.shortShow("再按一次退出"); curTime = System.currentTimeMillis(); } return true; } return super.onKeyDown(keyCode, event); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.action_bar_more: if (tabGroup.getCheckedRadioButtonId() != R.id.tab_personal) { showSharePanel(); } break; case R.id.share_facebook: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.FACEBOOK, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.FACEBOOK, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.FACEBOOK, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.FACEBOOK, thingFragment.getCurThing()); break; } sharePanel.dismiss(); break; case R.id.share_twitter: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.TWITTER, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.TWITTER, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.TWITTER, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.TWITTER, thingFragment.getCurThing()); break; } sharePanel.dismiss(); break; case R.id.share_google_plus: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.GOOGLE_PLUS, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.GOOGLE_PLUS, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.GOOGLE_PLUS, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.GOOGLE_PLUS, thingFragment.getCurThing()); break; } sharePanel.dismiss(); break; case R.id.share_wechat: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.WECHAT, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.WECHAT, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.WECHAT, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.WECHAT, thingFragment.getCurThing()); break; } sharePanel.dismiss(); break; case R.id.share_weibo: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.WEIBO, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.WEIBO, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.WEIBO, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.WEIBO, thingFragment.getCurThing()); break; } sharePanel.dismiss(); break; case R.id.share_qq: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.QQ, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.QQ, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.QQ, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.QQ, thingFragment.getCurThing()); break; } sharePanel.dismiss(); break; case R.id.share_qzone: switch (tabGroup.getCheckedRadioButtonId()) { case R.id.tab_home: homeFragment.share(ShareChannel.QZONE, homeFragment.getCurSaying()); break; case R.id.tab_article: articleFragment.share(ShareChannel.QZONE, articleFragment.getCurArticle()); break; case R.id.tab_question: questionFragment.share(ShareChannel.QZONE, questionFragment.getCurQuestion()); break; case R.id.tab_thing: thingFragment.share(ShareChannel.QZONE, thingFragment.getCurThing()); break; } sharePanel.dismiss(); case R.id.btn_cancel: sharePanel.dismiss(); break; } } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { FragmentTransaction transaction = fragmentManager.beginTransaction(); if (homeFragment != null) { transaction.hide(homeFragment); } if (articleFragment != null) { transaction.hide(articleFragment); } if (questionFragment != null) { transaction.hide(questionFragment); } if (thingFragment != null) { transaction.hide(thingFragment); } if (personalFragment != null) { transaction.hide(personalFragment); } switch (checkedId) { case R.id.tab_home: if (homeFragment == null) { homeFragment = new HomeFragment(); transaction.add(R.id.main_content, homeFragment); } else { transaction.show(homeFragment); } break; case R.id.tab_article: if (articleFragment == null) { articleFragment = new ArticleFragment(); transaction.add(R.id.main_content, articleFragment); } else { transaction.show(articleFragment); } break; case R.id.tab_question: if (questionFragment == null) { questionFragment = new QuestionFragment(); transaction.add(R.id.main_content, questionFragment); } else { transaction.show(questionFragment); } break; case R.id.tab_thing: if (thingFragment == null) { thingFragment = new ThingFragment(); transaction.add(R.id.main_content, thingFragment); } else { transaction.show(thingFragment); } break; case R.id.tab_personal: if (personalFragment == null) { personalFragment = new PersonalFragment(); transaction.add(R.id.main_content, personalFragment); } else { transaction.show(personalFragment); } break; } transaction.commit(); } private void showSharePanel() { if (sharePanel == null) { View view = View.inflate(this, R.layout.menu_share, null); view.findViewById(R.id.share_facebook).setOnClickListener(this); view.findViewById(R.id.share_twitter).setOnClickListener(this); view.findViewById(R.id.share_google_plus).setOnClickListener(this); view.findViewById(R.id.share_wechat).setOnClickListener(this); view.findViewById(R.id.share_weibo).setOnClickListener(this); view.findViewById(R.id.share_qq).setOnClickListener(this); view.findViewById(R.id.share_qzone).setOnClickListener(this); view.findViewById(R.id.btn_cancel).setOnClickListener(this); sharePanel = new PopupWindow(view, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); sharePanel.setOutsideTouchable(true); sharePanel.setFocusable(true); sharePanel.setBackgroundDrawable(new BitmapDrawable()); sharePanel.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.alpha = 1f; getWindow().setAttributes(layoutParams); } }); sharePanel.showAtLocation(findViewById(R.id.main_content), Gravity.BOTTOM, 0, 0); WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.alpha = 0.3f; getWindow().setAttributes(layoutParams); } else { if (!sharePanel.isShowing()) { sharePanel.showAtLocation(findViewById(R.id.main_content), Gravity.BOTTOM, 0, 0); WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.alpha = 0.3f; getWindow().setAttributes(layoutParams); } else { sharePanel.dismiss(); } } } private void setUmeng() { //对友盟统计日志加密 AnalyticsConfig.enableEncrypt(true); //友盟统计不采集mac信息 MobclickAgent.setCheckDevice(false); //禁止自动提示更新对话框 UmengUpdateAgent.setUpdateAutoPopup(false); //禁止增量更新 UmengUpdateAgent.setDeltaUpdate(false); UmengUpdateAgent.setUpdateListener(new UmengUpdateListener() { @Override public void onUpdateReturned(int status, UpdateResponse updateResponse) { switch (status) { case UpdateStatus.Yes: //有更新 showUpdateDialog(updateResponse); break; case UpdateStatus.No: //无更新 break; case UpdateStatus.NoneWifi: //无wifi break; case UpdateStatus.Timeout: //超时 break; } } }); //友盟设置检查更新,不限于wifi UmengUpdateAgent.setUpdateOnlyWifi(false); //禁用集成检测,否则会提示缺少xxx,然而我并不需要那些东西 UmengUpdateAgent.setUpdateCheckConfig(false); //检查更新 UmengUpdateAgent.update(this); //同步数据 final FeedbackAgent agent = new FeedbackAgent(this); // agent.openFeedbackPush(); 启用推送在小米手机上会有崩溃发生 agent.sync(); UserInfo userInfo = agent.getUserInfo(); String nickname = ConfigUtil.readString("user", "nickname"); if (TextUtils.isEmpty(nickname)) { final String n = generateNickname(); Map<String, String> contact = new HashMap<>(); contact.put("昵称", n); userInfo.setContact(contact); agent.setUserInfo(userInfo); new Thread(new Runnable() { @Override public void run() { boolean success = agent.updateUserInfo(); if (success) { ConfigUtil.writeString("user", "nickname", n); } } }).start(); } //启用推送 // PushAgent.getInstance(this).enable(); 启用推送在小米手机上会有崩溃发生 } /** * 生成昵称 * * @return 昵称 */ private String generateNickname() { String[] temp = getResources().getStringArray(R.array.nicknames); Random random = new Random(); int index = random.nextInt(temp.length); return temp[index] + "-" + random.nextInt(1000); } private void showUpdateDialog(final UpdateResponse updateResponse) { View view = View.inflate(this, R.layout.dialog_update, null); TextView content = (TextView) view.findViewById(R.id.dialog_update_content); TextView cancel = (TextView) view.findViewById(R.id.dialog_update_cancel); TextView ok = (TextView) view.findViewById(R.id.dialog_update_ok); content.setText(String.format(getResources().getString(R.string.label_update_content), updateResponse.version, updateResponse.updateLog)); AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT); builder.setView(view); builder.setCancelable(false); final AlertDialog dialog = builder.create(); cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); //开始下载 File file = UmengUpdateAgent.downloadedFile(MainActivity.this, updateResponse); if (file == null) { //若未下载,下载 UmengUpdateAgent.startDownload(MainActivity.this, updateResponse); } else { // 已经下载,直接安装 UmengUpdateAgent.startInstall(MainActivity.this, file); } } }); dialog.show(); } }