diff --git a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java index 4ea4ab4c2db0a9665549a925faf9f9600b2e9e93..6acd98f5eaa221f38f68dd7b69c1efd336b0d89e 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java +++ b/app/src/main/java/info/nightscout/android/medtronic/MainActivity.java @@ -51,7 +51,6 @@ import com.github.mikephil.charting.formatter.IValueFormatter; import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet; import com.github.mikephil.charting.listener.ChartTouchListener; import com.github.mikephil.charting.listener.OnChartGestureListener; -import com.github.mikephil.charting.utils.ColorTemplate; import com.github.mikephil.charting.utils.ViewPortHandler; import com.google.android.gms.appindexing.Action; import com.google.android.gms.appindexing.Thing; @@ -92,7 +91,12 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc private static final String TAG = MainActivity.class.getSimpleName(); public static int batLevel = 0; + public static boolean reducePollOnPumpAway = false; + public static long pollInterval = MedtronicCnlIntentService.POLL_PERIOD_MS; + public static long lowBatteryPollInterval = MedtronicCnlIntentService.LOW_BATTERY_POLL_PERIOD_MS; + private static long activePumpMac; + boolean mEnableCgmService = true; SharedPreferences prefs = null; private PumpInfo mActivePump; @@ -104,8 +108,7 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc private Realm mRealm; private StatusMessageReceiver statusMessageReceiver = new StatusMessageReceiver(); private MedtronicCnlAlarmReceiver medtronicCnlAlarmReceiver = new MedtronicCnlAlarmReceiver(); - public static long pollInterval = 0; - public static long lowBatteryPollInterval = 0; + public static void setActivePumpMac(long pumpMac) { activePumpMac = pumpMac; @@ -128,9 +131,10 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc stopCgmService(); } - //set poll intervals + // setup preferences MainActivity.pollInterval = Long.parseLong(prefs.getString("pollInterval", Long.toString(MedtronicCnlIntentService.POLL_PERIOD_MS))); MainActivity.lowBatteryPollInterval = Long.parseLong(prefs.getString("lowBatPollInterval", Long.toString(MedtronicCnlIntentService.LOW_BATTERY_POLL_PERIOD_MS))); + MainActivity.reducePollOnPumpAway = prefs.getBoolean("doublePollOnPumpAway", false); // Disable battery optimization to avoid missing values on 6.0+ // taken from https://github.com/NightscoutFoundation/xDrip/blob/master/app/src/main/java/com/eveningoutpost/dexdrip/Home.java#L277L298 @@ -483,6 +487,8 @@ public class MainActivity extends AppCompatActivity implements OnSharedPreferenc } else if (key.equals("lowBatPollInterval")) { MainActivity.lowBatteryPollInterval = Long.parseLong(sharedPreferences.getString("lowBatPollInterval", Long.toString(MedtronicCnlIntentService.LOW_BATTERY_POLL_PERIOD_MS))); + } else if (key.equals("doublePollOnPumpAway")) { + MainActivity.reducePollOnPumpAway = sharedPreferences.getBoolean("doublePollOnPumpAway", false); } } diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java index 9547688cbdf4801add9c7c36bcc7bbf5fcb13390..e283f3e1e7ff2903a562616894d1157effd1e615 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlAlarmManager.java @@ -36,6 +36,15 @@ public class MedtronicCnlAlarmManager { setAlarm(System.currentTimeMillis()); } + /** + * set the alarm in the future + * + * @param inFuture number of millin in the future + */ + public static void setAlarmAfterMillis(long inFuture) { + setAlarm(System.currentTimeMillis() + inFuture); + } + // Setting the alarm to call onRecieve public static void setAlarm(long millis) { if (alarmManager == null || pendingIntent == null) @@ -69,7 +78,7 @@ public class MedtronicCnlAlarmManager { // restarting the alarm after MedtronicCnlIntentService.POLL_PERIOD_MS from now public static void restartAlarm() { - setAlarm(System.currentTimeMillis() + MainActivity.pollInterval + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS); + setAlarmAfterMillis(MainActivity.pollInterval + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS); } // Cancel the alarm. diff --git a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java index 8dd84f8581f30066a7ceb33c94b0982e6e9c3c44..ec49c036d57ab639161a0c5336163443cfe4a771 100644 --- a/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java +++ b/app/src/main/java/info/nightscout/android/medtronic/service/MedtronicCnlIntentService.java @@ -200,7 +200,9 @@ public class MedtronicCnlIntentService extends IntentService { // reduce polling interval to half until pump is available //TODO: make it configurable??? - MedtronicCnlAlarmManager.setAlarm(System.currentTimeMillis() + (MainActivity.pollInterval + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS)/2L); + MedtronicCnlAlarmManager.setAlarmAfterMillis( + (MainActivity.pollInterval + MedtronicCnlIntentService.POLL_GRACE_PERIOD_MS) / (MainActivity.reducePollOnPumpAway?1L:2L) + ); } else { activePump.setLastRadioChannel(radioChannel); sendStatus(String.format(Locale.getDefault(), "Connected to Contour Next Link on channel %d.", (int) radioChannel)); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5833c20d33506c1cbb1d357cf8781ccd9ea78d12..48268a1e642c4b34d2d4e52b74dbdd9963f34731 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -52,8 +52,8 @@ <string name="menu_name_status">Status</string> <string name="menu_name_battery_status">unknown</string> - <string name="preferences_poll_interval">poll interval</string> - <string name="preferences_low_battery_poll_interval">poll interval on low pump battery</string> + <string name="preferences_poll_interval">Poll interval</string> + <string name="preferences_low_battery_poll_interval">Poll interval on low pump battery</string> <string name="no_registered_contour_next_link_devices">No registered Contour Next Link devices</string> <string name="to_register_a_contour_next_link_you_must_first_plug_it_in_and_get_a_reading_from_the_pump">To register a Contour Next Link you must first plug it in, and get a reading from the pump.</string> <string name="serial_number">Serial number</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index c42c9a0faab8db5a821d966e873dd0e1e477c320..0183e9581d19c4460d5007c0d754336c9a092668 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -25,6 +25,14 @@ android:summary="%s" android:entries="@array/poll_interval" android:entryValues="@array/poll_interval_millis"/> + <info.nightscout.android.utils.CustomSwitchPreference + android:disableDependentsState="false" + android:key="doublePollOnPumpAway" + android:summaryOff="Normal polling if pump is away" + android:summaryOn="Double polling if pump is away" + android:switchTextOff="off" + android:switchTextOn="on" + android:title="Polling interval if pump is away"/> <ListPreference android:key="lowBatPollInterval" android:defaultValue="900000"