Keep the device awake while we schedule the next alarm

Bug: 5777855
Change-Id: I59e97ce69e0dcbaf1b8eaa25407f2d3234140b98
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index 7174d10..4b0d547 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -4798,6 +4798,7 @@
         sCalendarAlertsProjectionMap.put(CalendarAlerts.BEGIN, "begin");
         sCalendarAlertsProjectionMap.put(CalendarAlerts.END, "end");
         sCalendarAlertsProjectionMap.put(CalendarAlerts.ALARM_TIME, "alarmTime");
+        sCalendarAlertsProjectionMap.put(CalendarAlerts.NOTIFY_TIME, "notifyTime");
         sCalendarAlertsProjectionMap.put(CalendarAlerts.STATE, "state");
         sCalendarAlertsProjectionMap.put(CalendarAlerts.MINUTES, "minutes");
 
diff --git a/src/com/android/providers/calendar/CalendarReceiver.java b/src/com/android/providers/calendar/CalendarReceiver.java
index 6fccbb9..5f1acd3 100644
--- a/src/com/android/providers/calendar/CalendarReceiver.java
+++ b/src/com/android/providers/calendar/CalendarReceiver.java
@@ -20,6 +20,7 @@
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
+import android.os.PowerManager;
 import android.util.Log;
 
 import java.util.concurrent.ExecutorService;
@@ -37,9 +38,17 @@
     static final String SCHEDULE = "com.android.providers.calendar.SCHEDULE_ALARM";
 
     private final ExecutorService executor = Executors.newCachedThreadPool();
+    private PowerManager.WakeLock mWakeLock;
 
     @Override
     public void onReceive(Context context, Intent intent) {
+        if (mWakeLock == null) {
+            PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+            mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CalendarReceiver_Provider");
+            mWakeLock.setReferenceCounted(true);
+        }
+        mWakeLock.acquire();
+
         final String action = intent.getAction();
         final ContentResolver cr = context.getContentResolver();
         final PendingResult result = goAsync();
@@ -53,6 +62,7 @@
                     removeScheduledAlarms(cr);
                 }
                 result.finish();
+                mWakeLock.release();
             }
         });
     }