summaryrefslogtreecommitdiff
path: root/src/com/android/providers/calendar/CalendarReceiver.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/providers/calendar/CalendarReceiver.java')
-rw-r--r--src/com/android/providers/calendar/CalendarReceiver.java56
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);
+ }
}