package org.aisen.weibo.sina.base;
import java.io.File;
import java.util.List;
import org.aisen.weibo.sina.R;
import org.aisen.weibo.sina.support.bean.AccountBean;
import org.aisen.weibo.sina.support.bean.AppSettingsBean;
import org.aisen.weibo.sina.support.bean.PublishBean;
import org.aisen.weibo.sina.support.bean.WallpaperBean;
import org.aisen.weibo.sina.support.biz.BizLogic;
import org.aisen.weibo.sina.support.db.AccountDB;
import org.aisen.weibo.sina.support.db.EmotionsDB;
import org.aisen.weibo.sina.support.db.SinaDB;
import org.aisen.weibo.sina.support.publish.PublishDB;
import org.aisen.weibo.sina.support.utils.AisenUtil;
import org.aisen.weibo.sina.support.utils.AppContext;
import org.aisen.weibo.sina.support.utils.AppSettings;
import org.aisen.weibo.sina.sys.receiver.TimingBroadcastReceiver;
import org.aisen.weibo.sina.sys.receiver.TimingIntent;
import org.aisen.weibo.sina.ui.fragment.account.AccountFragment;
import org.aisen.weibo.sina.ui.widget.WallpaperViewGroup;
import org.sina.android.bean.WeiBoUser;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import com.m.common.context.GlobalContext;
import com.m.common.settings.SettingUtility;
import com.m.common.utils.ActivityHelper;
import com.m.common.utils.CommSettings;
import com.m.common.utils.DateUtils;
import com.m.common.utils.Logger;
import com.m.support.sqlite.SqliteUtility;
import com.m.support.sqlite.util.FieldUtils;
import com.m.support.task.TaskException;
import com.m.support.task.WorkTask;
import com.m.ui.utils.MToast;
public class MyApplication extends GlobalContext {
@Override
public void onCreate() {
super.onCreate();
SettingUtility.addSettings("meizt_actions");
MToast.type = 2;
if (AppSettings.isCrashLogUpload())
initBaiduAnalyze();
// 设置登录账户
AccountBean accountBean = AccountDB.getLogedinAccount();
if (accountBean != null)
AppContext.login(accountBean.getUser(), accountBean.getGroups(), accountBean.getToken());
// 检查表情
try {
EmotionsDB.checkEmotions();
} catch (Exception e) {
}
// KitKat以下,禁用设置选项
if (!WallpaperViewGroup.isKitKat()) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(GlobalContext.getInstance());
Editor editor = prefs.edit();
editor.putBoolean("pTranslucent", false);
editor.commit();
}
// 默认设置壁纸
// 暂时不默认设置壁纸
if (false && ActivityHelper.getInstance().getBooleanShareData("app_wallpaper_init", true)) {
ActivityHelper.getInstance().putBooleanShareData("app_wallpaper_init", false);
CommSettings.setAppTheme(R.style.BaseTheme_Translucent);
AppContext.setWallpaper(AisenUtil.generaterDefaultWallpaper());
}
else {
String selection = String.format(" %s = ? ", FieldUtils.KEY);
String[] selectionArgs = new String[]{ "wallpaper_setting" };
List<WallpaperBean> settingList = SinaDB.getSqlite().selectAll(WallpaperBean.class, selection, selectionArgs);
if (settingList.size() > 0)
AppContext.setWallpaper(settingList.get(0));
}
if (ActivityHelper.getInstance().getBooleanShareData("theme_init", true)) {
ActivityHelper.getInstance().putBooleanShareData("theme_init", false);
if (WallpaperViewGroup.isKitKat())
CommSettings.setAppTheme(R.style.BaseTheme_Translucent);
}
}
@Override
public String getDataPath() {
// 读取SD卡文件速度慢很多
return getCacheDir().getAbsolutePath();
// return super.getDataPath();
}
@Override
public String getImagePath() {
return super.getAppPath() + SettingUtility.getPermanentSettingAsStr("com_m_common_image", "image") + File.separator;
}
private void initBaiduAnalyze() {
com.baidu.mobstat.StatService.setAppChannel(this, SettingUtility.getStringSetting("app_channel"), true);
com.baidu.mobstat.StatService.setSessionTimeOut(5 * 60);
// com.baidu.mobstat.StatService.setSessionTimeOut(10);
// 打开崩溃错误收集
com.baidu.mobstat.StatService.setOn(this, com.baidu.mobstat.StatService.EXCEPTION_LOG);
com.baidu.mobstat.StatService.setDebugOn(true);
}
public static MyApplication getInstance() {
return (MyApplication) GlobalContext.getInstance();
}
// 刷新定时发布任务
public static void refreshPublishAlarm() {
new WorkTask<Void, Void, Void>() {
@Override
public Void workInBackground(Void... params) throws TaskException {
List<PublishBean> beans = PublishDB.getPublishList(AppContext.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.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 refreshSettings() {
// 更新程序配置信息
new UpdateSettings().execute();
}
static class UpdateSettings extends WorkTask<Void, Void, AppSettingsBean> {
@Override
public AppSettingsBean workInBackground(Void... params) throws TaskException {
AppSettingsBean bean = BizLogic.newInstance().getSettings();
if (bean != null)
SqliteUtility.getInstance().insert(null, bean);
AppSettings.setSettings(bean);
return null;
}
}
}