Initialize WakeLock in the CTOR

Protect against possible race

Also added a log that will indicate if a second provider is created in the in
same process.

Bug: 11260491
Change-Id: I3048d3c57d1cf6a13b808b85151d20ddb85d95a9
diff --git a/src/com/android/providers/calendar/CalendarAlarmManager.java b/src/com/android/providers/calendar/CalendarAlarmManager.java
index dd4ffb8..596848e 100644
--- a/src/com/android/providers/calendar/CalendarAlarmManager.java
+++ b/src/com/android/providers/calendar/CalendarAlarmManager.java
@@ -119,7 +119,7 @@
     /**
      * Used to keep the process from getting killed while scheduling alarms
      */
-    private WakeLock mScheduleNextAlarmWakeLock;
+    private final WakeLock mScheduleNextAlarmWakeLock;
 
     @VisibleForTesting
     protected Context mContext;
@@ -127,6 +127,17 @@
 
     public CalendarAlarmManager(Context context) {
         initializeWithContext(context);
+
+        PowerManager powerManager = (PowerManager) mContext.getSystemService(
+                Context.POWER_SERVICE);
+        // Create a wake lock that will be used when we are actually
+        // scheduling the next alarm
+        mScheduleNextAlarmWakeLock = powerManager.newWakeLock(
+                PowerManager.PARTIAL_WAKE_LOCK, SCHEDULE_NEXT_ALARM_WAKE_LOCK);
+        // We want the Wake Lock to be reference counted (so that we dont
+        // need to take care
+        // about its reference counting)
+        mScheduleNextAlarmWakeLock.setReferenceCounted(true);
     }
 
     protected void initializeWithContext(Context context) {
@@ -165,18 +176,6 @@
     }
 
     PowerManager.WakeLock getScheduleNextAlarmWakeLock() {
-        if (mScheduleNextAlarmWakeLock == null) {
-            PowerManager powerManager = (PowerManager) mContext.getSystemService(
-                    Context.POWER_SERVICE);
-            // Create a wake lock that will be used when we are actually
-            // scheduling the next alarm
-            mScheduleNextAlarmWakeLock = powerManager.newWakeLock(
-                    PowerManager.PARTIAL_WAKE_LOCK, SCHEDULE_NEXT_ALARM_WAKE_LOCK);
-            // We want the Wake Lock to be reference counted (so that we dont
-            // need to take care
-            // about its reference counting)
-            mScheduleNextAlarmWakeLock.setReferenceCounted(true);
-        }
         return mScheduleNextAlarmWakeLock;
     }
 
diff --git a/src/com/android/providers/calendar/CalendarProvider2.java b/src/com/android/providers/calendar/CalendarProvider2.java
index 0ac6a6c..cf4f16a 100644
--- a/src/com/android/providers/calendar/CalendarProvider2.java
+++ b/src/com/android/providers/calendar/CalendarProvider2.java
@@ -561,12 +561,12 @@
 
     protected void initCalendarAlarm() {
         mCalendarAlarm = getOrCreateCalendarAlarmManager();
-        mCalendarAlarm.getScheduleNextAlarmWakeLock();
     }
 
     synchronized CalendarAlarmManager getOrCreateCalendarAlarmManager() {
         if (mCalendarAlarm == null) {
             mCalendarAlarm = new CalendarAlarmManager(mContext);
+            Log.i(TAG, "Created " + mCalendarAlarm + "(" + this + ")");
         }
         return mCalendarAlarm;
     }
diff --git a/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java b/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
index e31f881..e4146dc 100644
--- a/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
+++ b/tests/src/com/android/providers/calendar/CalendarProvider2ForTesting.java
@@ -37,7 +37,6 @@
     @Override
     protected void initCalendarAlarm() {
         mCalendarAlarm = new MockCalendarAlarmManager(getContext());
-        mCalendarAlarm.getScheduleNextAlarmWakeLock();
     }
 
     @Override