package cn.scau.scautreasure.ui; import android.app.AlarmManager; import android.app.PendingIntent; import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; import android.os.SystemClock; import cn.scau.scautreasure.AppConstant; import cn.scau.scautreasure.AppContext; import cn.scau.scautreasure.AppContext_; import cn.scau.scautreasure.WidgetProvider; import cn.scau.scautreasure.helper.WidgetHelper; import cn.scau.scautreasure.helper.WidgetHelper_; /** * 桌面小插件控制类 * * User: special * Date: 13-9-10 * Time: 下午8:23 * Mail: specialcyci@gmail.com */ public class Widget extends AppWidgetProvider { private AppContext app; private AlarmManager alarmManager; private WidgetHelper widgetHelper; private Context context; private void setUpWidgetContext(Context context) { this.context = context; alarmManager = ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)); app = AppContext_.getInstance(); widgetHelper = WidgetHelper_.getInstance_(context); } @Override public void onReceive(Context context, Intent intent) { setUpWidgetContext(context); startUpdateTimer(); app.Log("intent: " + intent.getAction()); if (intent.getAction().equals(AppConstant.INTENT_MONDAY)){ widgetHelper.showDayClassTableView(1); }else if (intent.getAction().equals(AppConstant.INTENT_TUESDAY)){ widgetHelper.showDayClassTableView(2); }else if (intent.getAction().equals(AppConstant.INTENT_WEDNESDAY)){ widgetHelper.showDayClassTableView(3); }else if (intent.getAction().equals(AppConstant.INTENT_THURDAY)){ widgetHelper.showDayClassTableView(4); }else if (intent.getAction().equals(AppConstant.INTENT_FRIDAY)){ widgetHelper.showDayClassTableView(5); }else if (intent.getAction().equals(AppConstant.INTENT_SATURDAY)){ widgetHelper.showDayClassTableView(6); }else if (intent.getAction().equals(AppConstant.INTENT_SUNDAY)){ widgetHelper.showDayClassTableView(7); }else if (intent.getAction().equals(AppConstant.INTENT_SETTINGS)){ startSettingsActivity(); } else { widgetHelper.setUpViews(); } super.onReceive(context, intent); } @Override public void onEnabled(Context context) { setUpWidgetContext(context); startUpdateTimer(); super.onEnabled(context); } @Override public void onDisabled(Context context) { setUpWidgetContext(context); stopUpdateTimer(); super.onDisabled(context); } private void startSettingsActivity(){ WidgetConfiguration_.intent(context).flags(Intent.FLAG_ACTIVITY_NEW_TASK).start(); } private void startUpdateTimer(){ if (isUpdateTimerRunning()) return; long firstime = SystemClock.elapsedRealtime(); long interval = AppConstant.WIDGET_UPDATE_INTERVAL; alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstime, interval, getUpdateTimer()); } private PendingIntent getUpdateTimer(){ Intent intent = new Intent(context,WidgetProvider.class); intent.setAction(AppConstant.INTENT_UPDATE); return PendingIntent.getBroadcast(context, 0,intent, 0); } private void stopUpdateTimer(){ alarmManager.cancel(getUpdateTimer()); } private boolean isUpdateTimerRunning(){ Intent intent = new Intent(context,WidgetProvider.class); intent.setAction(AppConstant.INTENT_UPDATE); return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_NO_CREATE) != null; } // onDeleted(Context context, int[] appWidgetIds) 删除App Widget是调用此方法 // onDisabled(Context context) 最后一个App Widget实例删除后调用此方法 // onEnabled(Context context) App WIdget实例第一次被创建是调用此方法 // onReceive(Context context, Intent intent) 接收广播事件 // onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 到达指定更新时间或用户向桌面添加了App Widget时调用此方法 }