package org.aisen.weibo.sina.base;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.os.Environment;
import com.tencent.bugly.crashreport.CrashReport;
import com.umeng.analytics.MobclickAgent;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.common.setting.SettingUtility;
import org.aisen.android.common.utils.CrashHandler;
import org.aisen.android.common.utils.DateUtils;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.component.bitmaploader.BitmapLoader;
import org.aisen.android.network.task.TaskException;
import org.aisen.android.network.task.WorkTask;
import org.aisen.weibo.sina.BuildConfig;
import org.aisen.weibo.sina.receiver.TimingBroadcastReceiver;
import org.aisen.weibo.sina.receiver.TimingIntent;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.sinasdk.core.SinaErrorMsgUtil;
import org.aisen.weibo.sina.support.bean.AccountBean;
import org.aisen.weibo.sina.support.bean.PublishBean;
import org.aisen.weibo.sina.support.sqlit.EmotionsDB;
import org.aisen.weibo.sina.support.sqlit.PublishDB;
import org.aisen.weibo.sina.support.sqlit.SinaDB;
import org.aisen.weibo.sina.support.utils.AccountUtils;
import org.aisen.weibo.sina.support.utils.UMengUtil;
import org.aisen.weibo.sina.ui.fragment.account.AccountFragment;
import java.io.File;
import java.util.List;
import java.util.Random;
/**
* Created by wangdan on 15/12/13.
*/
public class MyApplication extends GlobalContext {
@Override
public void onCreate() {
super.onCreate();
// 添加一些配置项
SettingUtility.addSettings(this, "actions");
SettingUtility.addSettings(this, "settings");
// 初始化一个颜色主题
setupTheme();
// 打开Debug日志
Logger.DEBUG = BuildConfig.LOG_DEBUG;
setupCrash();
// 初始化图片加载
BitmapLoader.newInstance(this, getImagePath());
// 配置异常处理类
TaskException.config(new SinaErrorMsgUtil());
// 初始化数据库
SinaDB.setInitDB();
// 检查表情
try {
EmotionsDB.checkEmotions();
} catch (Exception e) {
}
// 设置登录账号
AppContext.setAccount(AccountUtils.getLogedinAccount());
if (AppContext.isLoggedIn())
AppContext.login(AppContext.getAccount());
}
public static String getImagePath() {
return GlobalContext.getInstance().getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath() + File.separator;
}
private void setupTheme() {
int position = AppSettings.getThemeColor();
if (position == -1) {
// 一些我喜欢的颜色
int[] initIndex = new int[]{ 0, 1, 4, 8, 15, 16, 18 };
position = initIndex[new Random().nextInt(initIndex.length)];
AppSettings.setThemeColor(position);
}
}
public void setupCrash() {
if (BuildConfig.LOG_DEBUG) {
CrashHandler.setupCrashHandler(this);
}
// UMENG统计设置
MobclickAgent.setDebugMode(Logger.DEBUG);
// AnalyticsConfig.setAppkey(this, BuildConfig.UMENG_APP_ID);
MobclickAgent.setCatchUncaughtExceptions(false);
MobclickAgent.openActivityDurationTrack(false);
if (BuildConfig.LOG_DEBUG) {
Logger.d("Device_info", UMengUtil.getDeviceInfo(this));
}
// BUGLY日志上报
CrashReport.initCrashReport(this, BuildConfig.BUGLY_APP_ID, Logger.DEBUG);
}
// 刷新定时发布任务
public static void refreshPublishAlarm() {
new WorkTask<Void, Void, Void>() {
@Override
public Void workInBackground(Void... params) throws TaskException {
List<PublishBean> beans = PublishDB.getPublishList(AppContext.getAccount().getUser());
AlarmManager am = (AlarmManager) GlobalContext.getInstance().getSystemService(ALARM_SERVICE);
for (PublishBean bean : beans) {
// PendingIntent sender = PendingIntent.getService(getInstance(), (int) (bean.getTiming() - System.currentTimeMillis()), intent, PendingIntent.FLAG_CANCEL_CURRENT);
if (bean.getTiming() > System.currentTimeMillis()) {
TimingIntent intent = new TimingIntent(bean.getTiming());
String timingStr = bean.getTiming() / 1000 + "";
int requectCode = Integer.parseInt(timingStr.substring(timingStr.length() - 6, timingStr.length()));
PendingIntent sender = PendingIntent.getBroadcast(GlobalContext.getInstance(), requectCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Logger.d(TimingBroadcastReceiver.TAG, "添加一个定时任务到系统时钟, request = " + requectCode);
Logger.d(TimingBroadcastReceiver.TAG, DateUtils.formatDate(bean.getTiming(), DateUtils.TYPE_01));
Logger.d(AccountFragment.TAG, "添加一个定时任务到系统时钟, request = " + requectCode);
Logger.d(AccountFragment.TAG, DateUtils.formatDate(bean.getTiming(), DateUtils.TYPE_01));
am.set(AlarmManager.RTC_WAKEUP, bean.getTiming(), sender);
}
else {
Logger.d(TimingBroadcastReceiver.TAG, "定时任务已过期");
}
}
return null;
}
}.executeOnSerialExecutor();
}
public static void removeAllPublishAlarm() {
new WorkTask<WeiBoUser, Void, Void>() {
@Override
public Void workInBackground(WeiBoUser... params) throws TaskException {
List<PublishBean> beans = PublishDB.getPublishList(params[0]);
for (PublishBean bean : beans) {
if (bean.getTiming() > System.currentTimeMillis()) {
Logger.d(AccountFragment.TAG, "清理所有定时任务");
Logger.d(TimingBroadcastReceiver.TAG, "清理所有定时任务");
removePublishAlarm(bean);
}
}
return null;
}
}.execute(AppContext.getAccount().getUser());
}
public static void removePublishAlarm(PublishBean bean) {
TimingIntent intent = new TimingIntent(bean.getTiming());
String timingStr = bean.getTiming() / 1000 + "";
int requectCode = Integer.parseInt(timingStr.substring(timingStr.length() - 6, timingStr.length()));
PendingIntent sender = PendingIntent.getBroadcast(GlobalContext.getInstance(), requectCode, intent, PendingIntent.FLAG_CANCEL_CURRENT);
Logger.d(AccountFragment.TAG, "从系统时钟移除一个定时任务, request = " + requectCode);
Logger.d(TimingBroadcastReceiver.TAG, "从系统时钟移除一个定时任务, request = " + requectCode);
AlarmManager am = (AlarmManager) GlobalContext.getInstance().getSystemService(ALARM_SERVICE);
am.cancel(sender);
}
public static void setDebugAccount(AccountBean account) {
try {
// FIR.addCustomizeValue("uid", account.getUserId());
// FIR.addCustomizeValue("screen_name", URLEncoder.encode(account.getUser().getScreen_name(), "utf-8"));
} catch (Throwable e) {
e.printStackTrace();
}
}
}