package com.smartisanos.sidebar; import android.app.Application; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Process; import android.os.StrictMode; import com.smartisanos.sidebar.util.Constants; import com.smartisanos.sidebar.util.CalendarIcon; import com.smartisanos.sidebar.util.LOG; import com.smartisanos.sidebar.util.MailContactsHelper; import com.smartisanos.sidebar.util.RecentFileManager; import com.smartisanos.sidebar.util.ThreadVerify; import com.smartisanos.sidebar.util.Tracker; import com.smartisanos.sidebar.util.UserPackage; import com.smartisanos.sidebar.util.anim.AnimStatusManager; public class SidebarApplication extends Application { private static final LOG log = LOG.getInstance(SidebarApplication.class); private static final boolean ENABLE_STRICT_MODE = true; private volatile static SidebarApplication myself; public static SidebarApplication getInstance() { return myself; } @Override public void onCreate() { super.onCreate(); myself = this; Tracker.init(this); Constants.init(this); UserPackage.registerCallback(this); AnimStatusManager.getInstance().reset(); ThreadVerify.PROCESS_ID = Process.myTid(); setStrictMode(); // this is necessary ! init it to make its inner data be filled // so we can use it correctly later MailContactsHelper.getInstance(this); IntentFilter dateFilter = new IntentFilter(); dateFilter.addAction(ACTION_UPDATE_CALENDAR_DATE); dateFilter.addAction(Intent.ACTION_DATE_CHANGED); dateFilter.addAction(Intent.ACTION_TIME_CHANGED); dateFilter.addAction(Intent.ACTION_TIMEZONE_CHANGED); registerReceiver(mDateTimeReceiver, dateFilter); } @Override public void onTerminate() { super.onTerminate(); Tracker.flush(); UserPackage.unregisterCallback(this); myself = null; RecentFileManager.getInstance(getApplicationContext()).stopFileObserver(); unregisterReceiver(mDateTimeReceiver); } private void setStrictMode() { if (!ENABLE_STRICT_MODE) { return; } StrictMode.ThreadPolicy threadPolicy = new StrictMode.ThreadPolicy.Builder() .detectAll() .detectDiskReads() .detectDiskWrites() .detectNetwork() .detectCustomSlowCalls() .build(); StrictMode.setThreadPolicy(threadPolicy); StrictMode.VmPolicy vmPolicy = new StrictMode.VmPolicy.Builder() .detectLeakedSqlLiteObjects() .detectLeakedClosableObjects() .penaltyLog() .penaltyDeath() .build(); StrictMode.setVmPolicy(vmPolicy); } public static final String ACTION_UPDATE_CALENDAR_DATE = "smartisan.intent.action.update_calendar_date"; private final BroadcastReceiver mDateTimeReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (ACTION_UPDATE_CALENDAR_DATE.equals(action) || Intent.ACTION_TIME_CHANGED.equals(action) || Intent.ACTION_TIMEZONE_CHANGED.equals(action) || Intent.ACTION_DATE_CHANGED.equals(action)) { SidebarController.getInstance(context).refreshCalendarView(); CalendarIcon.releaseOldIcon(); } } }; }