diff options
Diffstat (limited to 'src/com/android/providers/calendar/CalendarReceiver.java')
-rw-r--r-- | src/com/android/providers/calendar/CalendarReceiver.java | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/src/com/android/providers/calendar/CalendarReceiver.java b/src/com/android/providers/calendar/CalendarReceiver.java index d1d8a5a..55b75e0 100644 --- a/src/com/android/providers/calendar/CalendarReceiver.java +++ b/src/com/android/providers/calendar/CalendarReceiver.java @@ -16,15 +16,17 @@ package com.android.providers.calendar; +import android.app.AlarmManager; +import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.os.PowerManager; +import android.os.SystemProperties; import android.util.Log; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** * This IntentReceiver executes when the boot completes and ensures that @@ -34,13 +36,26 @@ import java.util.concurrent.Executors; * yet. */ public class CalendarReceiver extends BroadcastReceiver { - private static final String TAG = "CalendarReceiver"; + private static final String TAG = CalendarProvider2.TAG; + + private static final long NEXT_EVENT_CHECK_INTERVAL = + SystemProperties.getLong("debug.calendar.check_interval", TimeUnit.HOURS.toMillis(6)); + private static final int NEXT_EVENT_CHECK_PENDING_CODE = 100; - private final ExecutorService executor = Executors.newCachedThreadPool(); private PowerManager.WakeLock mWakeLock; @Override public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + + if (!Intent.ACTION_BOOT_COMPLETED.equals(action)) { + Log.w(TAG, "Unexpected broadcast: " + action); + return; + } + if (Log.isLoggable(TAG, Log.DEBUG)) { + Log.d(TAG, "BOOT_COMPLETED"); + } + if (mWakeLock == null) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CalendarReceiver_Provider"); @@ -48,19 +63,15 @@ public class CalendarReceiver extends BroadcastReceiver { } mWakeLock.acquire(); - final String action = intent.getAction(); final ContentResolver cr = context.getContentResolver(); final PendingResult result = goAsync(); - executor.submit(new Runnable() { - @Override - public void run() { - if (Intent.ACTION_BOOT_COMPLETED.equals(action)) { - removeScheduledAlarms(cr); - } - result.finish(); - mWakeLock.release(); - } - }); + + new Thread(() -> { + setCalendarCheckAlarm(context); + removeScheduledAlarms(cr); + result.finish(); + mWakeLock.release(); + }).start(); } /* @@ -75,10 +86,19 @@ public class CalendarReceiver extends BroadcastReceiver { * worry about serializing the use of the service. */ private void removeScheduledAlarms(ContentResolver resolver) { - if (Log.isLoggable(TAG, Log.DEBUG)) { - Log.d(TAG, "Removing scheduled alarms"); - } resolver.update(CalendarAlarmManager.SCHEDULE_ALARM_REMOVE_URI, null /* values */, null /* where */, null /* selectionArgs */); } + + private static void setCalendarCheckAlarm(Context context) { + final PendingIntent checkIntent = PendingIntent.getBroadcast(context, + NEXT_EVENT_CHECK_PENDING_CODE, + CalendarAlarmManager.getCheckNextAlarmIntentForBroadcast(context), + PendingIntent.FLAG_UPDATE_CURRENT); + + final AlarmManager am = context.getSystemService(AlarmManager.class); + + am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, + NEXT_EVENT_CHECK_INTERVAL, NEXT_EVENT_CHECK_INTERVAL, checkIntent); + } } |