From 440a14a780882cf29caf507835bf0f19654b0468 Mon Sep 17 00:00:00 2001
From: Volker Richert <v.richert@addmore.de>
Date: Thu, 1 Dec 2016 15:29:20 +0100
Subject: [PATCH] use different methods to set alarm depending on OS version

---
 .../service/MedtronicCnlAlarmReceiver.java    | 22 ++++++++++++-------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java
index a0af992..6b766f0 100644
--- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java
+++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmReceiver.java
@@ -4,6 +4,7 @@ import android.app.AlarmManager;
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.support.v4.content.WakefulBroadcastReceiver;
 import android.util.Log;
 
@@ -16,8 +17,8 @@ public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
     private static final String TAG = MedtronicCnlAlarmReceiver.class.getSimpleName();
     private static final int ALARM_ID = 102; // Alarm id
 
-    private static PendingIntent pi = null;
-    private static AlarmManager am = null;
+    private static PendingIntent pendingIntent = null;
+    private static AlarmManager alarmManager = null;
 
     @Override
     public void onReceive(final Context context, Intent intent) {
@@ -31,9 +32,9 @@ public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
     public void setContext(Context context) {
         cancelAlarm();
 
-        am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
+        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
         Intent intent = new Intent(context, MedtronicCnlAlarmReceiver.class);
-        pi = PendingIntent.getBroadcast(context, ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+        pendingIntent = PendingIntent.getBroadcast(context, ALARM_ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
     }
 
     // Setting the alarm in 15 seconds from now
@@ -43,7 +44,7 @@ public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
 
     // Setting the alarm to call onRecieve
     public void setAlarm(long millis) {
-        if (am == null || pi == null)
+        if (alarmManager == null || pendingIntent == null)
             return;
 
         cancelAlarm();
@@ -53,7 +54,12 @@ public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
             millis = System.currentTimeMillis();
 
         Log.d(TAG, "AlarmManager set to fire   at " + new Date(millis));
-        am.setExact(AlarmManager.RTC_WAKEUP, millis, pi);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+            alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, millis, pendingIntent);
+        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+            alarmManager.setExact(AlarmManager.RTC_WAKEUP, millis, pendingIntent);
+        } else
+            alarmManager.set(AlarmManager.RTC_WAKEUP, millis, pendingIntent);
     }
 
     // restarting the alarm after MedtronicCnlIntentService.POLL_PERIOD_MS from now
@@ -63,10 +69,10 @@ public class MedtronicCnlAlarmReceiver extends WakefulBroadcastReceiver {
 
     // Cancel the alarm.
     public void cancelAlarm() {
-        if (am == null || pi == null)
+        if (alarmManager == null || pendingIntent == null)
             return;
 
-        am.cancel(pi);
+        alarmManager.cancel(pendingIntent);
     }
 
 }
-- 
GitLab