package com.aiyou; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.aiyou.bbs.BBSContentActivity; import com.aiyou.bbs.BBSListActivity; import com.aiyou.bbs.bean.Article; import com.aiyou.bbs.bean.Board; import com.aiyou.bbs.bean.Favorite; import com.aiyou.bbs.bean.Section; import com.aiyou.bbs.bean.Refer.ReferType; import com.aiyou.bbs.pullrefer.BBSService; import com.aiyou.bbs.utils.BBSManager; import com.aiyou.ecard.EcardActivity; import com.aiyou.electricity.ElectricityActivity; import com.aiyou.iptv.IptvListActivity; import com.aiyou.iptv.utils.IptvManager; import com.aiyou.map.MapActivity; import com.aiyou.map.data.MapHelper; import com.aiyou.news.NewsListActivity; import com.aiyou.utils.ActivityFunc; import com.aiyou.utils.AiYouManager; import com.aiyou.utils.JsonHelper; import com.aiyou.utils.NetWorkManager; import com.aiyou.utils.NetWorkManager.NetStatsChangeListener; import com.aiyou.utils.SwitchManager; import com.aiyou.utils.http.HttpManager; import com.aiyou.utils.logcat.Logcat; import com.aiyou.utils.thread.ThreadUtils; import com.aiyou.view.IUWidget; import com.umeng.analytics.MobclickAgent; import com.umeng.fb.FeedbackAgent; import external.otherview.ActivitySplitAnimationUtil; import android.animation.Animator; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.animation.Animator.AnimatorListener; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.annotation.TargetApi; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.View; import android.view.animation.DecelerateInterpolator; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends BaseActivity { private static final String TAG = MainActivity.class.getSimpleName(); private static final String KEY_TITLE = "title"; private static final String KEY_CONTENT = "content"; // 最多查询的每日祝福的页数 private static final int MAX_PAGE = 5; // 北邮愿望树版面名称 private static final String BOARD_BLESS = "Blessing"; private static final int MSG_BLESS = 0; private NetWorkManager mNetWorkManager; // 后台服务 private static final int INTERVAL = 1000 * 60 * 10;// 10分钟检查一次 private AlarmManager mAlarmMgr; private PendingIntent mPendingIntent; private boolean mIsGettingSec = false; private boolean mStartImmediatly = false; /** * 爱邮心声 */ private String mIUTitle, mIUContent, mIUUrl; /** * UI组件 */ // 背景 private ImageView mBgImgView; // 每日祝福 private IUWidget mBlessWidget; // 爱邮心声 private IUWidget mIUWidget; // 爱邮心声详细 private FrameLayout mIUDetailFLayout; private TextView mIUDetailTV; // 闪屏 private FrameLayout mSplashView; private Handler mHandler = new Handler(new Handler.Callback() { public boolean handleMessage(Message msg) { if (msg.what == MSG_BLESS) { Bundle data = msg.getData(); mBlessWidget.setTitle(data.getString(KEY_TITLE)); mBlessWidget.setContent(data.getString(KEY_CONTENT)); startAlphaAnimation(mBlessWidget); } return true; } }); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNetWorkManager = NetWorkManager.getInstance(this); init(); showSplash(); /** * 友盟用户反馈 */ mFeedbackAgent = new FeedbackAgent(this); mFeedbackAgent.setDebug(false); // check if the app developer has replied to the feedback or not. mFeedbackAgent.sync(); mFeedbackAgent.openAudioFeedback(); mFeedbackAgent.openFeedbackPush(); /** * 友盟推送 */ mPushAgent.enable(); } @SuppressWarnings("deprecation") public void onClick(View view) { int nId = view.getId(); if (R.id.iu_detail == nId || R.id.tv_iu_detail == nId) { mIUDetailFLayout.setVisibility(View.GONE); } if (R.id.iu_bless == nId) { // 打开每日祝福 Article article = (Article) view.getTag(); Intent intent = new Intent(this, BBSContentActivity.class); intent.putExtra(BBSContentActivity.KEY_ARTICLE, article); ActivityFunc.startActivity(this, intent); } else if (R.id.iu_iu == nId) { // 打开爱邮心声 if (!"0".equals(mIUTitle) && !"0".equals(mIUContent)) { if ("0".equals(mIUUrl)) { if (SwitchManager.getInstance(getBaseContext()) .isSimpleModeEnabled()) { if (SwitchManager.getInstance(getBaseContext()) .isNightModeEnabled()) { mIUDetailFLayout.setBackgroundColor(getResources() .getColor(R.color.bbs_background_night)); } else { mIUDetailFLayout.setBackgroundColor(getResources() .getColor(R.color.bbs_background_day)); } } else { mIUDetailFLayout.setBackgroundDrawable(AiYouManager .getBlurBg(this)); } mIUDetailFLayout.setVisibility(View.VISIBLE); mIUDetailTV.setText(mIUContent); } else { String arr[] = mIUUrl.split("<url>"); if (3 == arr.length) { Intent intent; // 链接到bbs Article article = new Article(); article.title = arr[0]; article.board_name = arr[1]; article.group_id = Integer.parseInt(arr[2]); intent = new Intent(this, BBSContentActivity.class); intent.putExtra(BBSContentActivity.KEY_ARTICLE, article); ActivityFunc.startActivity(this, intent); } } } } } public void onLabelClick(View view) { int nId = view.getId(); double dPercent = 0; Intent intent = null; if (nId == R.id.news) { // 新闻公告 intent = new Intent(this, NewsListActivity.class); dPercent = 0.1; } else if (nId == R.id.iptv) { // iptv if (IptvManager.mChanelList == null || IptvManager.mChanelList.isEmpty()) { // 获取iptv频道列表 IptvManager.getChanelList(); Toast.makeText(getBaseContext(), "正在初始化iptv数据", Toast.LENGTH_SHORT).show(); return; } intent = new Intent(this, IptvListActivity.class); dPercent = 0.3; } else if (nId == R.id.bbs) { // 论坛 if (!checkSectionData() || Favorite.mFavorite == null) { initFavorite(); Toast.makeText(getBaseContext(), "正在初始化论坛数据", Toast.LENGTH_SHORT).show(); return; } intent = new Intent(this, BBSListActivity.class); dPercent = 0.5; } else if (nId == R.id.map) { // 地图 if (MapHelper.getMapDatas() == null) { Toast.makeText(getBaseContext(), "地图数据尚未完成初始化", Toast.LENGTH_SHORT).show(); MapHelper.initMapDatas(getApplicationContext()); return; } intent = new Intent(this, MapActivity.class); dPercent = 0.7; } else if (nId == R.id.set) { // 设置 ActivityFunc.startActivity(this, SetActivity.class, null, true); return; } // 如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。 if (intent != null) { intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); if (SwitchManager.getInstance(this).isSimpleModeEnabled() || Build.VERSION.SDK_INT < 14) { ActivityFunc.startActivity(this, intent); } else { ActivitySplitAnimationUtil.startActivity(this, intent, dPercent); } } } public void onQuery(View v) { int nId = v.getId(); Intent intent = null; if (nId == R.id.tv_electricity) { intent = new Intent(this, ElectricityActivity.class); } else if (nId == R.id.tv_ecard) { intent = new Intent(this, EcardActivity.class); } if (intent != null) { ActivityFunc.startActivity(this, intent); } } private boolean checkSectionData() { if (Section.getRootSection(getBaseContext()) != null) { return true; } if (!mIsGettingSec) { initSections(); } return false; } private void initSections() { if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) { return; } mIsGettingSec = true; ThreadUtils.execute(new Runnable() { @Override public void run() { Section.getRootSection(MainActivity.this); mIsGettingSec = false; } }); } private void initFavorite() { if (Favorite.mFavorite != null) { return; } if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) { return; } ThreadUtils.execute(new Runnable() { @Override public void run() { String strJson = Favorite.getFavorite( AiYouApplication.getInstance(), 0); if (!TextUtils.isEmpty(strJson) && JsonHelper.checkError(strJson) == null) { Favorite.mFavorite = new Favorite(strJson); } } }); } @Override public void onBackPressed() { if (View.VISIBLE == mIUDetailFLayout.getVisibility()) { // 关于页面 mIUDetailFLayout.setVisibility(View.GONE); return; } scrollToFinishActivity(); } @Override protected void onDestroy() { super.onDestroy(); // 程序退出时需调用的方法 mNetWorkManager.recycle(); HttpManager.getInstance(this).release(); ThreadUtils.shutDown(); mHandler.removeCallbacksAndMessages(null); mHandler = null; if (null != mAlarmMgr && mPendingIntent != null) { mAlarmMgr.cancel(mPendingIntent); } mAlarmMgr = null; mPendingIntent = null; ActivitySplitAnimationUtil.destroy(); } private void showSplash() { // 显示闪屏页面 mSplashView.setVisibility(View.VISIBLE); TextView mNameVersion = (TextView) findViewById(R.id.tv_name_version); mNameVersion.setText(getString(R.string.version, AiYouManager .getInstance(getApplicationContext()).getAppName(), AiYouManager.getInstance(getApplicationContext()) .getAppVersionName())); if (!NetWorkManager.getInstance(getBaseContext()).isNetAvailable()) { Toast.makeText(getBaseContext(), " 网络不可用 \n联网后加载页面", Toast.LENGTH_LONG).show(); NetStatsChangeListener listener = new NetStatsChangeListener() { @Override public void onNetStatsChange() { if (mNetWorkManager.isNetAvailable()) { getUMParams(); getBlessList(1); initFavorite(); hideSplash(); mNetWorkManager.unregisterNetStatsChangeListener(this); } } }; mNetWorkManager.registerNetStatsChangeListener(listener); } else { getUMParams(); getBlessList(1); mHandler.postDelayed(new Runnable() { @Override public void run() { hideSplash(); } }, 2000); } } private void getUMParams() { // 友盟在线参数 // MobclickAgent.updateOnlineConfig(this); mIUTitle = MobclickAgent.getConfigParams( AiYouApplication.getInstance(), "main_iu_title"); mIUContent = MobclickAgent.getConfigParams( AiYouApplication.getInstance(), "main_iu_content"); mIUUrl = MobclickAgent.getConfigParams(AiYouApplication.getInstance(), "main_iu_url"); } private void getBlessList(final int page) { if (page > MAX_PAGE) { // 最多查询5页 return; } ThreadUtils.execute(new Runnable() { public void run() { String strJson = Board.getBoard(MainActivity.this, BOARD_BLESS, page); if (TextUtils.isEmpty(strJson)) { return; } String strError = JsonHelper.checkError(strJson); if (strError != null) { Logcat.e(TAG, strError); return; } // 将json数据解析为User元数据 Board board = new Board(strJson); if (board.articles == null) { Logcat.e(TAG, "board.articles为空"); return; } Article article = null; for (int i = 0; i < board.articles.length; i++) { if (board.articles[i].is_top || board.articles[i].user.id.equals("deliver") || board.articles[i].user.id.equals("原帖已删除")) { continue; } article = board.articles[i]; break; } if (null == article) { // 没有用户发的帖子,查看下一页 getBlessList(page + 1); } else { // 找到了用户的帖子,获取帖子的内容 getBlessContent(article.id); } } }); } private void getBlessContent(final int id) { ThreadUtils.execute(new Runnable() { public void run() { String strJson = Article.getArticle(MainActivity.this, BOARD_BLESS, id); if (TextUtils.isEmpty(strJson)) { return; } // 祝福内容 String strError = JsonHelper.checkError(strJson); if (strError != null) { Logcat.e(TAG, strError); return; } // 将json数据解析为User元数据 Article article = new Article(strJson); String title = article.title; String content = article.content; if (null != content) { Pattern p = Pattern.compile("(\\[[\\s\\S]*?\\])"); Matcher m = p.matcher(content); while (m.find()) { content = content.replace(m.group(), ""); } // 去除多余的尾巴 while (content.endsWith("-") || content.endsWith("\n")) { content = content.substring(0, content.length() - 1); } } mBlessWidget.setTag(article); if (null != mHandler) { Message msg = mHandler.obtainMessage(MSG_BLESS); Bundle data = msg.getData(); data.putString(KEY_TITLE, title); data.putString(KEY_CONTENT, content); mHandler.sendMessage(msg); } } }); } private void hideSplash() { SwitchManager switchMgr = SwitchManager.getInstance(getBaseContext()); if (switchMgr.isFirstRun()) { Intent intent = new Intent(this, HelpActivity.class); ActivityFunc.startActivity(this, intent); switchMgr.disableFirstRun(); } startSpalshAnim(); // tag动画 startTagAnimation(); // 背景饱和度动画 startBackgroundAnimation(); if (!TextUtils.isEmpty(mIUTitle) && !TextUtils.isEmpty(mIUContent) && !"0".equals(mIUTitle) && !"0".equals(mIUContent)) { mIUWidget.setTitle(mIUTitle); mIUWidget.setContent(mIUContent); startAlphaAnimation(mIUWidget); } } /** * 透明度动画 * * @param view */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void startAlphaAnimation(final View view) { if (Build.VERSION.SDK_INT < 11) { view.setVisibility(View.VISIBLE); return; } int delay = 2500; if (mStartImmediatly) { delay = 0; } final int duration = 500; final ObjectAnimator oa = ObjectAnimator.ofFloat(view, "alpha", 0, 1f); oa.setDuration(duration); oa.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { view.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animator animation) { } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); mHandler.postDelayed(new Runnable() { @Override public void run() { oa.start(); } }, delay); } /** * 背景饱和度动画 */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void startBackgroundAnimation() { if (Build.VERSION.SDK_INT < 11) { return; } final int delay = 1000; final int duration = 1000; final ColorMatrix matrix = new ColorMatrix(); matrix.setSaturation(0); ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix); mBgImgView.setColorFilter(filter); final ValueAnimator va = ValueAnimator.ofFloat(0, 1f); va.setDuration(duration); va.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float) animation.getAnimatedValue(); matrix.setSaturation(value); ColorMatrixColorFilter filter = new ColorMatrixColorFilter( matrix); mBgImgView.setColorFilter(filter); } }); va.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { mStartImmediatly = true; } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); mHandler.postDelayed(new Runnable() { @Override public void run() { va.start(); } }, delay); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void startTagAnimation() { if (Build.VERSION.SDK_INT < 11) { return; } final int delay = 500; final int interval = 200; final int duration = 1000; final LinearLayout[] ll = new LinearLayout[5]; ll[0] = (LinearLayout) findViewById(R.id.news); ll[1] = (LinearLayout) findViewById(R.id.iptv); ll[2] = (LinearLayout) findViewById(R.id.bbs); ll[3] = (LinearLayout) findViewById(R.id.map); ll[4] = (LinearLayout) findViewById(R.id.set); int tempwidth = ll[0].getWidth(); if (tempwidth <= 0) { tempwidth = 200; } final int width = tempwidth; final ValueAnimator va[] = new ValueAnimator[5]; for (int i = 0; i < va.length; i++) { va[i] = ValueAnimator.ofFloat(0, 1f); va[i].setDuration(duration); final int j = i; va[i].addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float) animation.getAnimatedValue(); ll[j].setTranslationX((-1f + value) * width); ll[j].setRotationY((1 - value) * 270); } }); mHandler.postDelayed(new Runnable() { @Override public void run() { va[j].start(); } }, delay + interval * i); } } @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void startSpalshAnim() { if (Build.VERSION.SDK_INT < 11) { mSplashView.setVisibility(View.GONE); return; } final int duration = 1000; final ObjectAnimator oa = ObjectAnimator.ofFloat(mSplashView, "alphascale", 1f, 0); oa.setDuration(duration); oa.setInterpolator(new DecelerateInterpolator()); oa.addUpdateListener(new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float value = (Float) animation.getAnimatedValue(); mSplashView.setAlpha(value); mSplashView.setScaleX((3 - value) / 2); mSplashView.setScaleY((3 - value) / 2); } }); oa.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { mSplashView.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); oa.start(); } private void init() { BBSManager bbsManager = BBSManager.getInstance(getBaseContext()); bbsManager.setBBSNotificationMail(false); bbsManager.setBBSNotificationRefer(ReferType.REPLY, 0); bbsManager.setBBSNotificationRefer(ReferType.AT, 0); mBgImgView = (ImageView) findViewById(R.id.bg); mBlessWidget = (IUWidget) findViewById(R.id.iu_bless); mIUWidget = (IUWidget) findViewById(R.id.iu_iu); mIUDetailFLayout = (FrameLayout) findViewById(R.id.iu_detail); mIUDetailTV = (TextView) findViewById(R.id.tv_iu_detail); mSplashView = (FrameLayout) findViewById(R.id.splash); /** * 开启服务 */ mAlarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE); mPendingIntent = PendingIntent.getService(this, 0, new Intent(this, BBSService.class), PendingIntent.FLAG_UPDATE_CURRENT); long now = System.currentTimeMillis(); mAlarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, now, INTERVAL, mPendingIntent); } }