From a920946cd18deef5695e4ced5c6c45ec8c02cba6 Mon Sep 17 00:00:00 2001 From: Johannes Mockenhaupt Date: Mon, 30 Oct 2017 17:48:22 +0100 Subject: [PATCH 01/17] Extract local alerts for unreachable pump, missed BG readings. --- .../plugins/Overview/Notification.java | 2 + .../plugins/Overview/NotificationStore.java | 35 +++++++++- .../receivers/KeepAliveReceiver.java | 64 ++++++++++++++----- app/src/main/res/values/strings.xml | 9 +++ app/src/main/res/xml/pref_others.xml | 16 +++++ 5 files changed, 108 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java index a857153c73..e464ec6418 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java @@ -51,6 +51,8 @@ public class Notification { public static final int TOAST_ALARM = 22; public static final int WRONGBASALSTEP = 23; public static final int BOLUS_DELIVERY_ERROR = 24; + public static final int PUMP_UNREACHABLE = 26; + public static final int BG_READINGS_MISSED = 27; public int id; public Date date; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java index 8c70d3eea6..58978eeead 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java @@ -1,6 +1,14 @@ package info.nightscout.androidaps.plugins.Overview; +import android.app.NotificationManager; +import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.AudioAttributes; +import android.media.RingtoneManager; +import android.net.Uri; +import android.support.v4.app.NotificationCompat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,14 +16,13 @@ import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.Date; import java.util.List; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.Services.AlarmSoundService; import info.nightscout.androidaps.plugins.Wear.WearPlugin; -//Added by Rumen for snooze time +//Added by Rumen for snooze time import info.nightscout.utils.SP; /** @@ -49,11 +56,16 @@ public class NotificationStore { return; } } - if (n.soundId != null) { + + if (SP.getBoolean(MainApp.sResources.getString(R.string.key_raise_urgent_alarms_as_android_notification), false) + && n.level == Notification.URGENT) { + raiseSystemNotification(n); + } else if (n.soundId != null) { Intent alarm = new Intent(MainApp.instance().getApplicationContext(), AlarmSoundService.class); alarm.putExtra("soundid", n.soundId); MainApp.instance().startService(alarm); } + store.add(n); WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class); @@ -64,6 +76,23 @@ public class NotificationStore { Collections.sort(store, new NotificationComparator()); } + private void raiseSystemNotification(Notification n) { + Context context = MainApp.instance().getApplicationContext(); + NotificationManager mgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), R.mipmap.blueowl); + Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); + NotificationCompat.Builder notificationBuilder = + new NotificationCompat.Builder(context) + .setSmallIcon(R.drawable.ic_notification) + .setLargeIcon(largeIcon) + .setContentTitle("Urgent alarm") + .setContentText(n.text) + .setPriority(NotificationCompat.PRIORITY_HIGH) + .setVibrate(new long[] { 1000, 1000, 1000, 1000}) + .setSound(sound, AudioAttributes.USAGE_ALARM); + mgr.notify(n.id, notificationBuilder.build()); + } + public boolean remove(int id) { for (int i = 0; i < store.size(); i++) { if (get(i).id == id) { diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index e3c77d0122..7e81b950c7 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -20,39 +20,76 @@ import java.util.Date; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.interfaces.PumpInterface; +import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.Profile; +import info.nightscout.androidaps.db.BgReading; +import info.nightscout.androidaps.db.DatabaseHelper; +import info.nightscout.androidaps.interfaces.PumpInterface; +import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; +import info.nightscout.utils.SP; public class KeepAliveReceiver extends BroadcastReceiver { + public static final long STATUS_UPDATE_FREQUENCY = 15 * 60 * 1000L; private static Logger log = LoggerFactory.getLogger(KeepAliveReceiver.class); + // TODO consider moving this into an Alarms plugin that works offline and can be configured + // (e.g. override silent mode at night only) + public static final int ALARM_FREQUENCY = 25 * 60 * 1000; + private static long nextPumpDisconnectedAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + private static long nextMissedReadingsAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + @Override public void onReceive(Context context, Intent rIntent) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); wl.acquire(); + checkBg(); + checkPump(); + log.debug("KeepAlive received"); + wl.release(); + } + + private void checkBg() { + BgReading bgReading = DatabaseHelper.lastBg(); + if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_missed_bg_readings_alert), false) + && bgReading != null && bgReading.date + ALARM_FREQUENCY < System.currentTimeMillis() + && nextMissedReadingsAlarm < System.currentTimeMillis()) { + Notification n = new Notification(Notification.BG_READINGS_MISSED, MainApp.sResources.getString(R.string.missed_bg_readings), Notification.URGENT); + n.soundId = R.raw.alarm; + nextMissedReadingsAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + MainApp.bus().post(new EventNewNotification(n)); + } + } + + private void checkPump() { final PumpInterface pump = MainApp.getConfigBuilder(); final Profile profile = MainApp.getConfigBuilder().getProfile(); if (pump != null && profile != null && profile.getBasal() != null) { - boolean isBasalOutdated = false; - boolean isStatusOutdated = false; - Date lastConnection = pump.lastDataTime(); - if (lastConnection.getTime() + 30 * 60 * 1000L < System.currentTimeMillis()) - isStatusOutdated = true; - if (Math.abs(profile.getBasal() - pump.getBaseBasalRate()) > pump.getPumpDescription().basalStep) - isBasalOutdated = true; + + boolean isStatusOutdated = lastConnection.getTime() + STATUS_UPDATE_FREQUENCY < System.currentTimeMillis(); + boolean isBasalOutdated = Math.abs(profile.getBasal() - pump.getBaseBasalRate()) > pump.getPumpDescription().basalStep; + + boolean alarmTimeoutExpired = lastConnection.getTime() + ALARM_FREQUENCY < System.currentTimeMillis(); + boolean nextAlarmOccurrenceReached = nextPumpDisconnectedAlarm < System.currentTimeMillis(); SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); - if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { + if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_pump_unreachable_alert), false) + && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached) { + Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.sResources.getString(R.string.pump_unreachable), Notification.URGENT); + n.soundId = R.raw.alarm; + nextPumpDisconnectedAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + MainApp.bus().post(new EventNewNotification(n)); + } else if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { Thread t = new Thread(new Runnable() { @Override public void run() { pump.setNewBasalProfile(profile); } - }); + }, "pump-update-basal-profile"); t.start(); } else if (isStatusOutdated && !pump.isBusy()) { Thread t = new Thread(new Runnable() { @@ -60,7 +97,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { public void run() { pump.refreshDataFromPump("KeepAlive. Status outdated."); } - }); + }, "pump-refresh"); t.start(); } else if (isBasalOutdated && !pump.isBusy()) { Thread t = new Thread(new Runnable() { @@ -68,13 +105,10 @@ public class KeepAliveReceiver extends BroadcastReceiver { public void run() { pump.refreshDataFromPump("KeepAlive. Basal outdated."); } - }); + }, "pump-refresh"); t.start(); } } - - log.debug("KeepAlive received"); - wl.release(); } public void setAlarm(Context context) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0c0e9060d4..e7661bfce2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -750,5 +750,14 @@ Waiting for estimated bolus end. Remaining %d sec. Processing event Starting bolus delivery + Pump unreachable + Missed BG readings + raise_urgent_alarms_as_android_notification + Use system notifications for alerts + enable_pump_unreachable_alert + enable_missed_bg_readings + Local alerts + Alert if no BGs received in 30 min + Alert if pump unreachable for 30 min diff --git a/app/src/main/res/xml/pref_others.xml b/app/src/main/res/xml/pref_others.xml index e0b5f02c5b..2053859b5e 100644 --- a/app/src/main/res/xml/pref_others.xml +++ b/app/src/main/res/xml/pref_others.xml @@ -72,4 +72,20 @@ android:key="short_tabtitles" android:title="@string/short_tabtitles"/> + + + + + From 87ea4125164036711079020b2b31f96ca979a8bf Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 12:58:44 +0100 Subject: [PATCH 02/17] local alert thresholds as settings --- .../receivers/KeepAliveReceiver.java | 22 +++++++++++++------ app/src/main/res/values/strings.xml | 7 ++++-- app/src/main/res/xml/pref_others.xml | 14 ++++++++++++ 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index 7e81b950c7..191077be6b 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -35,9 +35,17 @@ public class KeepAliveReceiver extends BroadcastReceiver { // TODO consider moving this into an Alarms plugin that works offline and can be configured // (e.g. override silent mode at night only) - public static final int ALARM_FREQUENCY = 25 * 60 * 1000; - private static long nextPumpDisconnectedAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; - private static long nextMissedReadingsAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + + private static int missedReadingsThreshold() { + return SP.getInt(MainApp.sResources.getString(R.string.key_missed_bg_readings_threshold), 30) * 60 * 1000; + } + + private static int pumpUnreachableThreshold() { + return SP.getInt(MainApp.sResources.getString(R.string.key_pump_unreachable_threshold), 30) * 60 * 1000; + } + + private static long nextPumpDisconnectedAlarm = System.currentTimeMillis() + pumpUnreachableThreshold(); + private static long nextMissedReadingsAlarm = System.currentTimeMillis() + missedReadingsThreshold(); @Override public void onReceive(Context context, Intent rIntent) { @@ -55,11 +63,11 @@ public class KeepAliveReceiver extends BroadcastReceiver { private void checkBg() { BgReading bgReading = DatabaseHelper.lastBg(); if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_missed_bg_readings_alert), false) - && bgReading != null && bgReading.date + ALARM_FREQUENCY < System.currentTimeMillis() + && bgReading != null && bgReading.date + missedReadingsThreshold() < System.currentTimeMillis() && nextMissedReadingsAlarm < System.currentTimeMillis()) { Notification n = new Notification(Notification.BG_READINGS_MISSED, MainApp.sResources.getString(R.string.missed_bg_readings), Notification.URGENT); n.soundId = R.raw.alarm; - nextMissedReadingsAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + nextMissedReadingsAlarm = System.currentTimeMillis() + missedReadingsThreshold(); MainApp.bus().post(new EventNewNotification(n)); } } @@ -73,7 +81,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { boolean isStatusOutdated = lastConnection.getTime() + STATUS_UPDATE_FREQUENCY < System.currentTimeMillis(); boolean isBasalOutdated = Math.abs(profile.getBasal() - pump.getBaseBasalRate()) > pump.getPumpDescription().basalStep; - boolean alarmTimeoutExpired = lastConnection.getTime() + ALARM_FREQUENCY < System.currentTimeMillis(); + boolean alarmTimeoutExpired = lastConnection.getTime() + pumpUnreachableThreshold() < System.currentTimeMillis(); boolean nextAlarmOccurrenceReached = nextPumpDisconnectedAlarm < System.currentTimeMillis(); SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); @@ -81,7 +89,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached) { Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.sResources.getString(R.string.pump_unreachable), Notification.URGENT); n.soundId = R.raw.alarm; - nextPumpDisconnectedAlarm = System.currentTimeMillis() + ALARM_FREQUENCY; + nextPumpDisconnectedAlarm = System.currentTimeMillis() + pumpUnreachableThreshold(); MainApp.bus().post(new EventNewNotification(n)); } else if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { Thread t = new Thread(new Runnable() { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2dcc1663df..4edee10b09 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -764,7 +764,10 @@ enable_pump_unreachable_alert enable_missed_bg_readings Local alerts - Alert if no BGs received in 30 min - Alert if pump unreachable for 30 min + Alert if no BG data is received + Alert if pump is unreachable + Pump unreachable threshold [min] + pump_unreachable_threshold + missed_bg_readings_threshold diff --git a/app/src/main/res/xml/pref_others.xml b/app/src/main/res/xml/pref_others.xml index 2053859b5e..8e4f0d1731 100644 --- a/app/src/main/res/xml/pref_others.xml +++ b/app/src/main/res/xml/pref_others.xml @@ -79,10 +79,24 @@ android:defaultValue="false" android:key="@string/key_enable_missed_bg_readings_alert" android:title="@string/enable_missed_bg_readings_alert"/> + + + + Date: Mon, 6 Nov 2017 14:09:03 +0100 Subject: [PATCH 03/17] Dismiss notification service --- .../Overview/DismissNotificationService.java | 33 +++++++++++++++++++ .../plugins/Overview/NotificationStore.java | 29 +++++++++------- 2 files changed, 51 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java new file mode 100644 index 0000000000..2e5e665425 --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java @@ -0,0 +1,33 @@ +package info.nightscout.androidaps.plugins.Overview; + +import android.app.IntentService; +import android.app.PendingIntent; +import android.content.Intent; +import android.support.annotation.Nullable; + +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; +import info.nightscout.utils.SafeParse; + +public class DismissNotificationService extends IntentService { + + /** + * Creates an IntentService. Invoked by your subclass's constructor. + * + * @param name Used to name the worker thread, important only for debugging. + */ + public DismissNotificationService(String name) { + super(name); + } + + @Override + protected void onHandleIntent(@Nullable Intent intent) { + MainApp.bus().post(new EventDismissNotification(intent.getIntExtra("alertID", -1))); + } + + public static PendingIntent deleteIntent(int id){ + Intent intent = new Intent(MainApp.instance(), DismissNotificationService.class); + intent.putExtra("alertID", id); + return PendingIntent.getService(MainApp.instance(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + } +} diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java index 58978eeead..3956f29365 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java @@ -1,6 +1,7 @@ package info.nightscout.androidaps.plugins.Overview; import android.app.NotificationManager; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; @@ -22,7 +23,6 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.Services.AlarmSoundService; import info.nightscout.androidaps.plugins.Wear.WearPlugin; -//Added by Rumen for snooze time import info.nightscout.utils.SP; /** @@ -57,20 +57,24 @@ public class NotificationStore { } } + store.add(n); + if (SP.getBoolean(MainApp.sResources.getString(R.string.key_raise_urgent_alarms_as_android_notification), false) && n.level == Notification.URGENT) { raiseSystemNotification(n); - } else if (n.soundId != null) { - Intent alarm = new Intent(MainApp.instance().getApplicationContext(), AlarmSoundService.class); - alarm.putExtra("soundid", n.soundId); - MainApp.instance().startService(alarm); - } + } else { + if (n.soundId != null) { + Intent alarm = new Intent(MainApp.instance().getApplicationContext(), AlarmSoundService.class); + alarm.putExtra("soundid", n.soundId); + MainApp.instance().startService(alarm); + } - store.add(n); + //Only pipe through to wear if no system notification is raised (should show on wear anyways) + WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class); + if(wearPlugin!= null && wearPlugin.isEnabled()) { + wearPlugin.overviewNotification(n.id, "OverviewNotification:\n" + n.text); + } - WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class); - if(wearPlugin!= null && wearPlugin.isEnabled()) { - wearPlugin.overviewNotification(n.id, "OverviewNotification:\n" + n.text); } Collections.sort(store, new NotificationComparator()); @@ -89,10 +93,12 @@ public class NotificationStore { .setContentText(n.text) .setPriority(NotificationCompat.PRIORITY_HIGH) .setVibrate(new long[] { 1000, 1000, 1000, 1000}) - .setSound(sound, AudioAttributes.USAGE_ALARM); + .setSound(sound, AudioAttributes.USAGE_ALARM) + .setDeleteIntent(DismissNotificationService.deleteIntent(n.id)); mgr.notify(n.id, notificationBuilder.build()); } + public boolean remove(int id) { for (int i = 0; i < store.size(); i++) { if (get(i).id == id) { @@ -131,3 +137,4 @@ public class NotificationStore { } } } + From 3ea4bfaf374ce207fcd52eddb661eb3638a757a7 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 14:16:50 +0100 Subject: [PATCH 04/17] initialized only when maxBasal >0 --- .../nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java index 115f612f6c..fe25c04cb7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java @@ -229,7 +229,7 @@ public class DanaRPlugin implements PluginBase, PumpInterface, DanaRInterface, C @Override public boolean isInitialized() { - return pump.lastConnection.getTime() > 0 && pump.isExtendedBolusEnabled; + return pump.lastConnection.getTime() > 0 && pump.isExtendedBolusEnabled && pump.maxBasal > 0; } @Override From 8c8674ed6333a240037700ee485fc231557dab5c Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 14:26:06 +0100 Subject: [PATCH 05/17] refactor notifications: subpackage --- .../nightscout/androidaps/Services/DataService.java | 2 +- .../java/info/nightscout/androidaps/data/Profile.java | 4 +--- .../plugins/Actions/dialogs/FillDialog.java | 2 +- .../Actions/dialogs/NewExtendedBolusDialog.java | 2 +- .../plugins/ConfigBuilder/ConfigBuilderPlugin.java | 2 +- .../plugins/Insulin/InsulinOrefBasePlugin.java | 2 +- .../NSClientInternal/services/NSClientService.java | 2 +- .../plugins/Overview/Dialogs/NewTreatmentDialog.java | 2 +- .../plugins/Overview/Dialogs/WizardDialog.java | 3 +-- .../androidaps/plugins/Overview/OverviewFragment.java | 11 ++--------- .../androidaps/plugins/Overview/OverviewPlugin.java | 1 + .../plugins/Overview/events/EventNewNotification.java | 2 +- .../DismissNotificationService.java | 3 +-- .../Overview/{ => notifications}/Notification.java | 2 +- .../{ => notifications}/NotificationStore.java | 3 +-- .../androidaps/plugins/PumpDanaR/DanaRPlugin.java | 2 +- .../PumpDanaR/comm/MsgInitConnStatusBolus.java | 2 +- .../plugins/PumpDanaR/comm/MsgSetBasalProfile.java | 2 +- .../PumpDanaR/comm/MsgSetSingleBasalProfile.java | 4 +--- .../plugins/PumpDanaR/comm/MsgSettingMeal.java | 2 +- .../PumpDanaR/services/DanaRExecutionService.java | 2 +- .../plugins/PumpDanaRKorean/DanaRKoreanPlugin.java | 2 +- .../comm/MsgInitConnStatusBasic_k.java | 2 +- .../comm/MsgInitConnStatusBolus_k.java | 2 +- .../services/DanaRKoreanExecutionService.java | 2 +- .../androidaps/plugins/PumpDanaRS/DanaRSPlugin.java | 2 +- .../comm/DanaRS_Packet_Basal_Get_Basal_Rate.java | 2 +- .../comm/DanaRS_Packet_Bolus_Get_Bolus_Option.java | 2 +- .../comm/DanaRS_Packet_General_Get_Pump_Check.java | 5 ----- .../plugins/PumpDanaRS/services/DanaRSService.java | 2 +- .../androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java | 2 +- .../PumpDanaRv2/services/DanaRv2ExecutionService.java | 2 +- .../SmsCommunicator/SmsCommunicatorPlugin.java | 2 +- .../androidaps/receivers/KeepAliveReceiver.java | 2 +- .../androidaps/receivers/NSAlarmReceiver.java | 2 +- .../main/java/info/nightscout/utils/ToastUtils.java | 2 +- 36 files changed, 36 insertions(+), 54 deletions(-) rename app/src/main/java/info/nightscout/androidaps/plugins/Overview/{ => notifications}/DismissNotificationService.java (92%) rename app/src/main/java/info/nightscout/androidaps/plugins/Overview/{ => notifications}/Notification.java (99%) rename app/src/main/java/info/nightscout/androidaps/plugins/Overview/{ => notifications}/NotificationStore.java (98%) diff --git a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java index 5c152e8060..0b475ddf4f 100644 --- a/app/src/main/java/info/nightscout/androidaps/Services/DataService.java +++ b/app/src/main/java/info/nightscout/androidaps/Services/DataService.java @@ -24,7 +24,7 @@ import info.nightscout.androidaps.plugins.NSClientInternal.data.NSMbg; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSgv; import info.nightscout.androidaps.data.ProfileStore; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSettingsStatus; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.OverviewPlugin; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; diff --git a/app/src/main/java/info/nightscout/androidaps/data/Profile.java b/app/src/main/java/info/nightscout/androidaps/data/Profile.java index 61c7397694..8234881b4e 100644 --- a/app/src/main/java/info/nightscout/androidaps/data/Profile.java +++ b/app/src/main/java/info/nightscout/androidaps/data/Profile.java @@ -12,17 +12,15 @@ import org.slf4j.LoggerFactory; import java.text.DecimalFormat; import java.util.Calendar; -import java.util.Date; import java.util.TimeZone; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.DecimalFormatter; -import info.nightscout.utils.SafeParse; import info.nightscout.utils.ToastUtils; public class Profile { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java index f6c9d4c3d6..7cdc16cc63 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/FillDialog.java @@ -30,7 +30,7 @@ import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.db.Source; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.NumberPicker; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewExtendedBolusDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewExtendedBolusDialog.java index 0b7445e9e7..cd5e2bb537 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewExtendedBolusDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Actions/dialogs/NewExtendedBolusDialog.java @@ -25,7 +25,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.interfaces.PumpInterface; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.NumberPicker; import info.nightscout.utils.SafeParse; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java index 12f1f46c1c..681a8066e6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/ConfigBuilder/ConfigBuilderPlugin.java @@ -47,7 +47,7 @@ import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.BolusProgressHelperActivity; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissBolusprogressIfRunning; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinOrefBasePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinOrefBasePlugin.java index b37e3b5c85..06670a1088 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinOrefBasePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Insulin/InsulinOrefBasePlugin.java @@ -7,7 +7,7 @@ import info.nightscout.androidaps.data.Iob; import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.interfaces.InsulinInterface; import info.nightscout.androidaps.interfaces.PluginBase; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; /** diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java index d3d17b510b..2bf2e4fb4f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/NSClientInternal/services/NSClientService.java @@ -58,7 +58,7 @@ import info.nightscout.androidaps.plugins.NSClientInternal.data.NSTreatment; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientNewLog; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientRestart; import info.nightscout.androidaps.plugins.NSClientInternal.events.EventNSClientStatus; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.DateUtil; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java index dec763beff..7e975088a9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java @@ -34,7 +34,7 @@ import info.nightscout.androidaps.data.PumpEnactResult; import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.Source; import info.nightscout.androidaps.interfaces.PumpInterface; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.NumberPicker; import info.nightscout.utils.SafeParse; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java index dbe16c0a9b..17f7a7fce8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java @@ -32,7 +32,6 @@ import com.squareup.otto.Subscribe; import org.json.JSONException; import org.json.JSONObject; -import org.mozilla.javascript.tools.debugger.Main; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,7 +58,7 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.plugins.OpenAPSAMA.OpenAPSAMAPlugin; import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.BolusWizard; import info.nightscout.utils.DateUtil; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 8b08d76dd2..db51c5b8c5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -6,7 +6,6 @@ import android.app.NotificationManager; import android.content.Context; import android.content.DialogInterface; import android.graphics.Color; -import android.graphics.DashPathEffect; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; @@ -37,11 +36,6 @@ import com.crashlytics.android.Crashlytics; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.CustomEvent; import com.jjoe64.graphview.GraphView; -import com.jjoe64.graphview.ValueDependentColor; -import com.jjoe64.graphview.series.BarGraphSeries; -import com.jjoe64.graphview.series.DataPoint; -import com.jjoe64.graphview.series.LineGraphSeries; -import com.jjoe64.graphview.series.Series; import com.squareup.otto.Subscribe; import org.json.JSONException; @@ -50,7 +44,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DecimalFormat; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -109,8 +102,8 @@ import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotificati import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventSetWakeLock; import info.nightscout.androidaps.plugins.Overview.graphData.GraphData; -import info.nightscout.androidaps.plugins.Overview.graphExtensions.FixedLineGraphSeries; -import info.nightscout.androidaps.plugins.Overview.graphExtensions.TimeAsXAxisLabelFormatter; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.NotificationStore; import info.nightscout.androidaps.plugins.SourceXdrip.SourceXdripPlugin; import info.nightscout.androidaps.plugins.Treatments.fragments.ProfileViewerDialog; import info.nightscout.utils.BolusWizard; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewPlugin.java index 7eecbada25..57aa5a8054 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewPlugin.java @@ -13,6 +13,7 @@ import info.nightscout.androidaps.events.EventRefreshOverview; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; +import info.nightscout.androidaps.plugins.Overview.notifications.NotificationStore; import info.nightscout.utils.SP; /** diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventNewNotification.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventNewNotification.java index 59ad1a335d..2a669d26d2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventNewNotification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventNewNotification.java @@ -1,7 +1,7 @@ package info.nightscout.androidaps.plugins.Overview.events; import info.nightscout.androidaps.events.Event; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; /** * Created by mike on 03.12.2016. diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java similarity index 92% rename from app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java rename to app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java index 2e5e665425..261ee5d72b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/DismissNotificationService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java @@ -1,4 +1,4 @@ -package info.nightscout.androidaps.plugins.Overview; +package info.nightscout.androidaps.plugins.Overview.notifications; import android.app.IntentService; import android.app.PendingIntent; @@ -7,7 +7,6 @@ import android.support.annotation.Nullable; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; -import info.nightscout.utils.SafeParse; public class DismissNotificationService extends IntentService { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java similarity index 99% rename from app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java rename to app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java index e464ec6418..79f80420c6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Notification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java @@ -1,5 +1,5 @@ -package info.nightscout.androidaps.plugins.Overview; +package info.nightscout.androidaps.plugins.Overview.notifications; import java.util.Date; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java similarity index 98% rename from app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java rename to app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java index 3956f29365..b640b90077 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java @@ -1,7 +1,6 @@ -package info.nightscout.androidaps.plugins.Overview; +package info.nightscout.androidaps.plugins.Overview.notifications; import android.app.NotificationManager; -import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java index fe25c04cb7..eb184c40a7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/DanaRPlugin.java @@ -38,7 +38,7 @@ import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.ProfileStore; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgInitConnStatusBolus.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgInitConnStatusBolus.java index b39929db5b..83bd9dc77d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgInitConnStatusBolus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgInitConnStatusBolus.java @@ -7,7 +7,7 @@ import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetBasalProfile.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetBasalProfile.java index dea2734a3e..01c80bc255 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetBasalProfile.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetBasalProfile.java @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; public class MsgSetBasalProfile extends MessageBase { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetSingleBasalProfile.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetSingleBasalProfile.java index 32cd3745d8..1c79080093 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetSingleBasalProfile.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSetSingleBasalProfile.java @@ -1,14 +1,12 @@ package info.nightscout.androidaps.plugins.PumpDanaR.comm; -import com.j256.ormlite.stmt.query.Not; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; public class MsgSetSingleBasalProfile extends MessageBase { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSettingMeal.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSettingMeal.java index 727b6cd7fb..2d54d4f4a2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSettingMeal.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/comm/MsgSettingMeal.java @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/services/DanaRExecutionService.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/services/DanaRExecutionService.java index 1ef5349f25..da38b760f2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/services/DanaRExecutionService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaR/services/DanaRExecutionService.java @@ -79,7 +79,7 @@ import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgStatusBolusExtended; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MsgStatusTempBasal; import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.NSUpload; import info.nightscout.utils.SP; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java index c0071ecfca..ee080384fb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/DanaRKoreanPlugin.java @@ -38,7 +38,7 @@ import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBasic_k.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBasic_k.java index 26462987d9..82beecc5e9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBasic_k.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBasic_k.java @@ -6,7 +6,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBolus_k.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBolus_k.java index 2e6d6234f0..bf105b8db0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBolus_k.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/comm/MsgInitConnStatusBolus_k.java @@ -8,7 +8,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; import info.nightscout.androidaps.plugins.PumpDanaR.comm.MessageBase; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/services/DanaRKoreanExecutionService.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/services/DanaRKoreanExecutionService.java index f77c03e337..3542ab13a7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/services/DanaRKoreanExecutionService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRKorean/services/DanaRKoreanExecutionService.java @@ -70,7 +70,7 @@ import info.nightscout.androidaps.plugins.PumpDanaR.comm.RecordTypes; import info.nightscout.androidaps.plugins.PumpDanaR.events.EventDanaRNewStatus; import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin; import info.nightscout.androidaps.plugins.PumpDanaRKorean.SerialIOThread; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaRKorean.comm.MsgCheckValue_k; import info.nightscout.androidaps.plugins.PumpDanaRKorean.comm.MsgSettingBasal_k; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java index 5f97999bfa..14c6e7898e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/DanaRSPlugin.java @@ -36,7 +36,7 @@ import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.DetailedBolusInfoStorage; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Basal_Get_Basal_Rate.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Basal_Get_Basal_Rate.java index efc87d3834..048912a23d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Basal_Get_Basal_Rate.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Basal_Get_Basal_Rate.java @@ -7,7 +7,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Bolus_Get_Bolus_Option.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Bolus_Get_Bolus_Option.java index 61296f42ed..eb4af6b25f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Bolus_Get_Bolus_Option.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_Bolus_Get_Bolus_Option.java @@ -8,7 +8,7 @@ import com.cozmo.danar.util.BleCommandUtil; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_General_Get_Pump_Check.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_General_Get_Pump_Check.java index c38439d7eb..4818f4481d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_General_Get_Pump_Check.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/comm/DanaRS_Packet_General_Get_Pump_Check.java @@ -6,11 +6,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; -import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.Overview.Notification; -import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; -import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; public class DanaRS_Packet_General_Get_Pump_Check extends DanaRS_Packet { diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java index 399254f84b..eb117fd98b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRS/services/DanaRSService.java @@ -24,7 +24,7 @@ import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventInitializationChanged; import info.nightscout.androidaps.events.EventPumpStatusChanged; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java index f9156bb430..473282fd62 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/DanaRv2Plugin.java @@ -38,7 +38,7 @@ import info.nightscout.androidaps.interfaces.PumpDescription; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.ConfigBuilder.DetailedBolusInfoStorage; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.ProfileNS.NSProfilePlugin; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/services/DanaRv2ExecutionService.java b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/services/DanaRv2ExecutionService.java index 6eabb668fb..8d8c4de2bc 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/services/DanaRv2ExecutionService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/PumpDanaRv2/services/DanaRv2ExecutionService.java @@ -34,7 +34,7 @@ import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPumpStatusChanged; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.data.Profile; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPump; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java index 9fdb0152d0..19a9934347 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/SmsCommunicator/SmsCommunicatorPlugin.java @@ -35,7 +35,7 @@ import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.PumpInterface; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.androidaps.plugins.PumpDanaR.DanaRPlugin; import info.nightscout.androidaps.plugins.PumpDanaRKorean.DanaRKoreanPlugin; diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index 191077be6b..0a89b35e34 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -25,7 +25,7 @@ import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.BgReading; import info.nightscout.androidaps.db.DatabaseHelper; import info.nightscout.androidaps.interfaces.PumpInterface; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.SP; diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/NSAlarmReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/NSAlarmReceiver.java index c4a9fa89b7..95bb5e17b3 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/NSAlarmReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/NSAlarmReceiver.java @@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSAlarm; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; diff --git a/app/src/main/java/info/nightscout/utils/ToastUtils.java b/app/src/main/java/info/nightscout/utils/ToastUtils.java index 4e1e4ac4ed..4ad07a4885 100644 --- a/app/src/main/java/info/nightscout/utils/ToastUtils.java +++ b/app/src/main/java/info/nightscout/utils/ToastUtils.java @@ -7,7 +7,7 @@ import android.os.Looper; import android.widget.Toast; import info.nightscout.androidaps.MainApp; -import info.nightscout.androidaps.plugins.Overview.Notification; +import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; From e4f15c0e0de327388b67e6cdbbf1a488a2393948 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 15:07:39 +0100 Subject: [PATCH 06/17] guard double clicks --- .../Overview/Dialogs/NewTreatmentDialog.java | 80 ++++++++------ .../Overview/Dialogs/WizardDialog.java | 104 ++++++++++-------- .../plugins/Overview/OverviewFragment.java | 65 ++++++----- 3 files changed, 146 insertions(+), 103 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java index 7e975088a9..850f5d40e4 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewTreatmentDialog.java @@ -51,6 +51,10 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene private Handler mHandler; + //one shot guards + private boolean accepted; + private boolean okClicked; + public NewTreatmentDialog() { HandlerThread mHandlerThread = new HandlerThread(NewTreatmentDialog.class.getSimpleName()); mHandlerThread.start(); @@ -109,10 +113,15 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene } @Override - public void onClick(View view) { + public synchronized void onClick(View view) { switch (view.getId()) { case R.id.ok: - + if (okClicked){ + log.debug("guarding: ok already clicked"); + dismiss(); + return; + } + okClicked = true; try { Double insulin = SafeParse.stringToDouble(editInsulin.getText()); final Integer carbs = SafeParse.stringToInt(editCarbs.getText()); @@ -132,43 +141,50 @@ public class NewTreatmentDialog extends DialogFragment implements OnClickListene final int finalCarbsAfterConstraints = carbsAfterConstraints; final Context context = getContext(); - AlertDialog.Builder builder = new AlertDialog.Builder(context); + final AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(this.getContext().getString(R.string.confirmation)); builder.setMessage(Html.fromHtml(confirmMessage)); builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - if (finalInsulinAfterConstraints > 0 || finalCarbsAfterConstraints > 0) { - final PumpInterface pump = MainApp.getConfigBuilder(); - mHandler.post(new Runnable() { - @Override - public void run() { - DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); - if (finalInsulinAfterConstraints == 0) - detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION; - if (finalCarbsAfterConstraints == 0) - detailedBolusInfo.eventType = CareportalEvent.CORRECTIONBOLUS; - detailedBolusInfo.insulin = finalInsulinAfterConstraints; - detailedBolusInfo.carbs = finalCarbsAfterConstraints; - detailedBolusInfo.context = context; - detailedBolusInfo.source = Source.USER; - PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo); - if (!result.success) { - try { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); - builder.setMessage(result.comment); - builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null); - builder.show(); - } catch (WindowManager.BadTokenException | NullPointerException e) { - // window has been destroyed - Notification notification = new Notification(Notification.BOLUS_DELIVERY_ERROR, MainApp.sResources.getString(R.string.treatmentdeliveryerror), Notification.URGENT); - MainApp.bus().post(new EventNewNotification(notification)); + synchronized (builder) { + if (accepted) { + log.debug("guarding: already accepted"); + return; + } + accepted = true; + if (finalInsulinAfterConstraints > 0 || finalCarbsAfterConstraints > 0) { + final PumpInterface pump = MainApp.getConfigBuilder(); + mHandler.post(new Runnable() { + @Override + public void run() { + DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); + if (finalInsulinAfterConstraints == 0) + detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION; + if (finalCarbsAfterConstraints == 0) + detailedBolusInfo.eventType = CareportalEvent.CORRECTIONBOLUS; + detailedBolusInfo.insulin = finalInsulinAfterConstraints; + detailedBolusInfo.carbs = finalCarbsAfterConstraints; + detailedBolusInfo.context = context; + detailedBolusInfo.source = Source.USER; + PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo); + if (!result.success) { + try { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); + builder.setMessage(result.comment); + builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null); + builder.show(); + } catch (WindowManager.BadTokenException | NullPointerException e) { + // window has been destroyed + Notification notification = new Notification(Notification.BOLUS_DELIVERY_ERROR, MainApp.sResources.getString(R.string.treatmentdeliveryerror), Notification.URGENT); + MainApp.bus().post(new EventNewNotification(notification)); + } } } - } - }); - Answers.getInstance().logCustom(new CustomEvent("Bolus")); + }); + Answers.getInstance().logCustom(new CustomEvent("Bolus")); + } } } }); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java index 17f7a7fce8..77962cc622 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/WizardDialog.java @@ -113,6 +113,11 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com Context context; + //one shot guards + private boolean accepted; + private boolean okClicked; + + public WizardDialog() { super(); mHandlerThread = new HandlerThread(WizardDialog.class.getSimpleName()); @@ -296,9 +301,15 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com } @Override - public void onClick(View view) { + public synchronized void onClick(View view) { switch (view.getId()) { case R.id.ok: + if (okClicked){ + log.debug("guarding: ok already clicked"); + dismiss(); + return; + } + okClicked = true; if (calculatedTotalInsulin > 0d || calculatedCarbs > 0d) { DecimalFormat formatNumber2decimalplaces = new DecimalFormat("0.00"); @@ -326,56 +337,63 @@ public class WizardDialog extends DialogFragment implements OnClickListener, Com final int carbTime = SafeParse.stringToInt(editCarbTime.getText()); final boolean useSuperBolus = superbolusCheckbox.isChecked(); - AlertDialog.Builder builder = new AlertDialog.Builder(context); + final AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(MainApp.sResources.getString(R.string.confirmation)); builder.setMessage(Html.fromHtml(confirmMessage)); builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - if (finalInsulinAfterConstraints > 0 || finalCarbsAfterConstraints > 0) { - final ConfigBuilderPlugin pump = MainApp.getConfigBuilder(); - mHandler.post(new Runnable() { - @Override - public void run() { - PumpEnactResult result; - if (useSuperBolus) { - final LoopPlugin activeloop = MainApp.getConfigBuilder().getActiveLoop(); - if (activeloop != null) { - activeloop.superBolusTo(System.currentTimeMillis() + 2 * 60L * 60 * 1000); - MainApp.bus().post(new EventRefreshOverview("WizardDialog")); + synchronized (builder) { + if (accepted) { + log.debug("guarding: already accepted"); + return; + } + accepted = true; + if (finalInsulinAfterConstraints > 0 || finalCarbsAfterConstraints > 0) { + final ConfigBuilderPlugin pump = MainApp.getConfigBuilder(); + mHandler.post(new Runnable() { + @Override + public void run() { + PumpEnactResult result; + if (useSuperBolus) { + final LoopPlugin activeloop = MainApp.getConfigBuilder().getActiveLoop(); + if (activeloop != null) { + activeloop.superBolusTo(System.currentTimeMillis() + 2 * 60L * 60 * 1000); + MainApp.bus().post(new EventRefreshOverview("WizardDialog")); + } + pump.cancelTempBasal(true); + result = pump.setTempBasalAbsolute(0d, 120, true); + if (!result.success) { + OKDialog.show(getActivity(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror), result.comment, null); + } } - pump.cancelTempBasal(true); - result = pump.setTempBasalAbsolute(0d, 120, true); + DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); + detailedBolusInfo.eventType = CareportalEvent.BOLUSWIZARD; + detailedBolusInfo.insulin = finalInsulinAfterConstraints; + detailedBolusInfo.carbs = finalCarbsAfterConstraints; + detailedBolusInfo.context = context; + detailedBolusInfo.glucose = bg; + detailedBolusInfo.glucoseType = "Manual"; + detailedBolusInfo.carbTime = carbTime; + detailedBolusInfo.boluscalc = boluscalcJSON; + detailedBolusInfo.source = Source.USER; + result = pump.deliverTreatment(detailedBolusInfo); if (!result.success) { - OKDialog.show(getActivity(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror), result.comment, null); + try { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); + builder.setMessage(result.comment); + builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null); + builder.show(); + } catch (WindowManager.BadTokenException | NullPointerException e) { + // window has been destroyed + Notification notification = new Notification(Notification.BOLUS_DELIVERY_ERROR, MainApp.sResources.getString(R.string.treatmentdeliveryerror), Notification.URGENT); + MainApp.bus().post(new EventNewNotification(notification)); + } } } - DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); - detailedBolusInfo.eventType = CareportalEvent.BOLUSWIZARD; - detailedBolusInfo.insulin = finalInsulinAfterConstraints; - detailedBolusInfo.carbs = finalCarbsAfterConstraints; - detailedBolusInfo.context = context; - detailedBolusInfo.glucose = bg; - detailedBolusInfo.glucoseType = "Manual"; - detailedBolusInfo.carbTime = carbTime; - detailedBolusInfo.boluscalc = boluscalcJSON; - detailedBolusInfo.source = Source.USER; - result = pump.deliverTreatment(detailedBolusInfo); - if (!result.success) { - try { - AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); - builder.setMessage(result.comment); - builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null); - builder.show(); - } catch (WindowManager.BadTokenException | NullPointerException e) { - // window has been destroyed - Notification notification = new Notification(Notification.BOLUS_DELIVERY_ERROR, MainApp.sResources.getString(R.string.treatmentdeliveryerror), Notification.URGENT); - MainApp.bus().post(new EventNewNotification(notification)); - } - } - } - }); - Answers.getInstance().logCustom(new CustomEvent("Wizard")); + }); + Answers.getInstance().logCustom(new CustomEvent("Wizard")); + } } } }); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index db51c5b8c5..96f36faf2a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -52,6 +52,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.Config; @@ -689,40 +690,48 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, final Double finalInsulinAfterConstraints = insulinAfterConstraints; final Integer finalCarbsAfterConstraints = carbsAfterConstraints; final Context context = getContext(); - AlertDialog.Builder builder = new AlertDialog.Builder(context); + final AlertDialog.Builder builder = new AlertDialog.Builder(context); + final AtomicBoolean accepted = new AtomicBoolean(false); builder.setTitle(MainApp.sResources.getString(R.string.confirmation)); builder.setMessage(confirmMessage); builder.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - if (finalInsulinAfterConstraints > 0 || finalCarbsAfterConstraints > 0) { - final ConfigBuilderPlugin pump = MainApp.getConfigBuilder(); - sHandler.post(new Runnable() { - @Override - public void run() { - DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); - detailedBolusInfo.eventType = CareportalEvent.BOLUSWIZARD; - detailedBolusInfo.insulin = finalInsulinAfterConstraints; - detailedBolusInfo.carbs = finalCarbsAfterConstraints; - detailedBolusInfo.context = context; - detailedBolusInfo.boluscalc = boluscalcJSON; - detailedBolusInfo.source = Source.USER; - PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo); - if (!result.success) { - try { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); - builder.setMessage(result.comment); - builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null); - builder.show(); - } catch (WindowManager.BadTokenException | NullPointerException e) { - // window has been destroyed - Notification notification = new Notification(Notification.BOLUS_DELIVERY_ERROR, MainApp.sResources.getString(R.string.treatmentdeliveryerror), Notification.URGENT); - MainApp.bus().post(new EventNewNotification(notification)); + synchronized (accepted) { + if(accepted.get()) { + log.debug("Guarding: already accepted!"); + return; + } + accepted.set(true); + if (finalInsulinAfterConstraints > 0 || finalCarbsAfterConstraints > 0) { + final ConfigBuilderPlugin pump = MainApp.getConfigBuilder(); + sHandler.post(new Runnable() { + @Override + public void run() { + DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); + detailedBolusInfo.eventType = CareportalEvent.BOLUSWIZARD; + detailedBolusInfo.insulin = finalInsulinAfterConstraints; + detailedBolusInfo.carbs = finalCarbsAfterConstraints; + detailedBolusInfo.context = context; + detailedBolusInfo.boluscalc = boluscalcJSON; + detailedBolusInfo.source = Source.USER; + PumpEnactResult result = pump.deliverTreatment(detailedBolusInfo); + if (!result.success) { + try { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle(MainApp.sResources.getString(R.string.treatmentdeliveryerror)); + builder.setMessage(result.comment); + builder.setPositiveButton(MainApp.sResources.getString(R.string.ok), null); + builder.show(); + } catch (WindowManager.BadTokenException | NullPointerException e) { + // window has been destroyed + Notification notification = new Notification(Notification.BOLUS_DELIVERY_ERROR, MainApp.sResources.getString(R.string.treatmentdeliveryerror), Notification.URGENT); + MainApp.bus().post(new EventNewNotification(notification)); + } } } - } - }); - Answers.getInstance().logCustom(new CustomEvent("QuickWizard")); + }); + Answers.getInstance().logCustom(new CustomEvent("QuickWizard")); + } } } }); From ef425563bfca9d63a70339ddc6ded5c62e92c53e Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 15:24:52 +0100 Subject: [PATCH 07/17] use ID as request code --- .../Overview/notifications/DismissNotificationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java index 261ee5d72b..1b832099dd 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/DismissNotificationService.java @@ -27,6 +27,6 @@ public class DismissNotificationService extends IntentService { public static PendingIntent deleteIntent(int id){ Intent intent = new Intent(MainApp.instance(), DismissNotificationService.class); intent.putExtra("alertID", id); - return PendingIntent.getService(MainApp.instance(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); + return PendingIntent.getService(MainApp.instance(), id, intent, PendingIntent.FLAG_UPDATE_CURRENT); } } From 2b06e9e63ece216cfe6c09511e1ed26ff2197280 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 17:12:33 +0100 Subject: [PATCH 08/17] Notification bugfixes --- app/src/main/AndroidManifest.xml | 4 +++ .../DismissNotificationService.java | 4 +++ .../receivers/KeepAliveReceiver.java | 26 +++++++++++++------ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be3c0e5d80..d57639a3fb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -140,6 +140,10 @@ android:name=".Services.AlarmSoundService" android:enabled="true" android:exported="true" /> + + pump.getPumpDescription().basalStep; boolean alarmTimeoutExpired = lastConnection.getTime() + pumpUnreachableThreshold() < System.currentTimeMillis(); - boolean nextAlarmOccurrenceReached = nextPumpDisconnectedAlarm < System.currentTimeMillis(); + boolean nextAlarmOccurrenceReached = SP.getLong("nextPumpDisconnectedAlarm", 0l) < System.currentTimeMillis(); - SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_pump_unreachable_alert), false) && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached) { Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.sResources.getString(R.string.pump_unreachable), Notification.URGENT); n.soundId = R.raw.alarm; - nextPumpDisconnectedAlarm = System.currentTimeMillis() + pumpUnreachableThreshold(); + SP.putLong("nextMissedReadingsAlarm", System.currentTimeMillis() + missedReadingsThreshold()); + SP.putLong("nextPumpDisconnectedAlarm", System.currentTimeMillis() + pumpUnreachableThreshold()); MainApp.bus().post(new EventNewNotification(n)); } else if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { Thread t = new Thread(new Runnable() { @@ -137,4 +135,16 @@ public class KeepAliveReceiver extends BroadcastReceiver { AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); alarmManager.cancel(sender); } + + static void initAlarmTimes() { + //shortens alarm times in case of setting changes or future data + long nextMissedReadingsAlarm = SP.getLong("nextMissedReadingsAlarm", 0l); + nextMissedReadingsAlarm = Math.min(System.currentTimeMillis() + missedReadingsThreshold(), nextMissedReadingsAlarm); + SP.putLong("nextMissedReadingsAlarm", nextMissedReadingsAlarm); + + long nextPumpDisconnectedAlarm = SP.getLong("nextPumpDisconnectedAlarm", 0l); + nextPumpDisconnectedAlarm = Math.min(System.currentTimeMillis() + missedReadingsThreshold(), nextPumpDisconnectedAlarm); + SP.putLong("nextPumpDisconnectedAlarm", nextPumpDisconnectedAlarm); + } + } \ No newline at end of file From 2f56687e82b7c98ee37258a790b828f5dba247fb Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 20:16:17 +0100 Subject: [PATCH 09/17] system notifications for non-urgent --- .../notifications/NotificationStore.java | 17 +++++++++-------- .../androidaps/receivers/KeepAliveReceiver.java | 3 +-- app/src/main/res/values/strings.xml | 4 ++-- app/src/main/res/xml/pref_others.xml | 15 +++++++-------- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java index b640b90077..a3bfb0d03b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java @@ -21,7 +21,6 @@ import java.util.List; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.Services.AlarmSoundService; -import info.nightscout.androidaps.plugins.Wear.WearPlugin; import info.nightscout.utils.SP; /** @@ -58,8 +57,7 @@ public class NotificationStore { store.add(n); - if (SP.getBoolean(MainApp.sResources.getString(R.string.key_raise_urgent_alarms_as_android_notification), false) - && n.level == Notification.URGENT) { + if (SP.getBoolean(MainApp.sResources.getString(R.string.key_raise_notifications_as_android_notifications), false)) { raiseSystemNotification(n); } else { if (n.soundId != null) { @@ -69,11 +67,10 @@ public class NotificationStore { } //Only pipe through to wear if no system notification is raised (should show on wear anyways) - WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class); + /*WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class); if(wearPlugin!= null && wearPlugin.isEnabled()) { wearPlugin.overviewNotification(n.id, "OverviewNotification:\n" + n.text); - } - + }*/ } Collections.sort(store, new NotificationComparator()); @@ -91,9 +88,13 @@ public class NotificationStore { .setContentTitle("Urgent alarm") .setContentText(n.text) .setPriority(NotificationCompat.PRIORITY_HIGH) - .setVibrate(new long[] { 1000, 1000, 1000, 1000}) - .setSound(sound, AudioAttributes.USAGE_ALARM) .setDeleteIntent(DismissNotificationService.deleteIntent(n.id)); + if (n.level == Notification.URGENT) { + notificationBuilder.setVibrate(new long[]{1000, 1000, 1000, 1000}) + .setSound(sound, AudioAttributes.USAGE_ALARM); + } else { + notificationBuilder.setVibrate(new long[]{0, 100, 50, 100, 50}); + } mgr.notify(n.id, notificationBuilder.build()); } diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index c38ff97949..809fc7e45e 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -82,11 +82,10 @@ public class KeepAliveReceiver extends BroadcastReceiver { boolean alarmTimeoutExpired = lastConnection.getTime() + pumpUnreachableThreshold() < System.currentTimeMillis(); boolean nextAlarmOccurrenceReached = SP.getLong("nextPumpDisconnectedAlarm", 0l) < System.currentTimeMillis(); - if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_pump_unreachable_alert), false) + if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_pump_unreachable_alert), true) && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached) { Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.sResources.getString(R.string.pump_unreachable), Notification.URGENT); n.soundId = R.raw.alarm; - SP.putLong("nextMissedReadingsAlarm", System.currentTimeMillis() + missedReadingsThreshold()); SP.putLong("nextPumpDisconnectedAlarm", System.currentTimeMillis() + pumpUnreachableThreshold()); MainApp.bus().post(new EventNewNotification(n)); } else if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4edee10b09..d05fbdb41e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -759,8 +759,8 @@ Starting bolus delivery Pump unreachable Missed BG readings - raise_urgent_alarms_as_android_notification - Use system notifications for alerts + raise_urgent_alarms_as_android_notification + Use system notifications for alerts and notifications enable_pump_unreachable_alert enable_missed_bg_readings Local alerts diff --git a/app/src/main/res/xml/pref_others.xml b/app/src/main/res/xml/pref_others.xml index 8e4f0d1731..00048e4b7a 100644 --- a/app/src/main/res/xml/pref_others.xml +++ b/app/src/main/res/xml/pref_others.xml @@ -72,8 +72,7 @@ android:key="short_tabtitles" android:title="@string/short_tabtitles"/> - - - + + From 2e6a136de69864356391361a0e46a68a2bc750c7 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 20:32:33 +0100 Subject: [PATCH 10/17] presnooze missed readings/pump on startup --- .../receivers/KeepAliveReceiver.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index 809fc7e45e..072cdd13f5 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -9,9 +9,7 @@ import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import android.content.SharedPreferences; import android.os.PowerManager; -import android.preference.PreferenceManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,7 +48,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); wl.acquire(); - initAlarmTimes(); + shortenSnoozeInterval(); checkBg(); checkPump(); @@ -117,6 +115,10 @@ public class KeepAliveReceiver extends BroadcastReceiver { } public void setAlarm(Context context) { + + shortenSnoozeInterval(); + presnoozeAlarms(); + AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, KeepAliveReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); @@ -128,6 +130,18 @@ public class KeepAliveReceiver extends BroadcastReceiver { am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), Constants.keepAliveMsecs, pi); } + /*Presnoozes the alarms with 5 minutes if no snooze exists. + * Call only at startup! + */ + public void presnoozeAlarms() { + if(SP.getLong("nextMissedReadingsAlarm", 0l) < System.currentTimeMillis()){ + SP.putLong("nextMissedReadingsAlarm", System.currentTimeMillis() + 5*60*1000); + } + if(SP.getLong("nextPumpDisconnectedAlarm", 0l) < System.currentTimeMillis()){ + SP.putLong("nextPumpDisconnectedAlarm", System.currentTimeMillis() + 5*60*1000); + } + } + public void cancelAlarm(Context context) { Intent intent = new Intent(context, KeepAliveReceiver.class); PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); @@ -135,7 +149,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { alarmManager.cancel(sender); } - static void initAlarmTimes() { + static void shortenSnoozeInterval() { //shortens alarm times in case of setting changes or future data long nextMissedReadingsAlarm = SP.getLong("nextMissedReadingsAlarm", 0l); nextMissedReadingsAlarm = Math.min(System.currentTimeMillis() + missedReadingsThreshold(), nextMissedReadingsAlarm); From f2e44e8ab98e54ceff1995008a35031177534e7d Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 21:38:42 +0100 Subject: [PATCH 11/17] no-urgent notification title --- .../plugins/Overview/notifications/NotificationStore.java | 8 +++++--- .../androidaps/receivers/KeepAliveReceiver.java | 1 + app/src/main/res/values/strings.xml | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java index a3bfb0d03b..984ec45cea 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java @@ -85,15 +85,17 @@ public class NotificationStore { new NotificationCompat.Builder(context) .setSmallIcon(R.drawable.ic_notification) .setLargeIcon(largeIcon) - .setContentTitle("Urgent alarm") .setContentText(n.text) - .setPriority(NotificationCompat.PRIORITY_HIGH) + .setPriority(NotificationCompat.PRIORITY_MAX) .setDeleteIntent(DismissNotificationService.deleteIntent(n.id)); if (n.level == Notification.URGENT) { notificationBuilder.setVibrate(new long[]{1000, 1000, 1000, 1000}) + .setContentTitle(MainApp.sResources.getString(R.string.urgent_alarm)) .setSound(sound, AudioAttributes.USAGE_ALARM); } else { - notificationBuilder.setVibrate(new long[]{0, 100, 50, 100, 50}); + notificationBuilder.setVibrate(new long[]{0, 100, 50, 100, 50}) + .setContentTitle(MainApp.sResources.getString(R.string.info)) + ; } mgr.notify(n.id, notificationBuilder.build()); } diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index 072cdd13f5..a140372eaa 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -114,6 +114,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { } } + //called by MainAPP at first app start public void setAlarm(Context context) { shortenSnoozeInterval(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d05fbdb41e..b3a28d4568 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -769,5 +769,7 @@ Pump unreachable threshold [min] pump_unreachable_threshold missed_bg_readings_threshold + Urgent Alarm + INFO From ccad0c18b1e7814fc3fc9d094463db5783e53e55 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 21:44:01 +0100 Subject: [PATCH 12/17] remove deprecated wear notification settings --- app/src/main/res/xml/pref_wear.xml | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/res/xml/pref_wear.xml b/app/src/main/res/xml/pref_wear.xml index 3ccde55678..1e155ace20 100644 --- a/app/src/main/res/xml/pref_wear.xml +++ b/app/src/main/res/xml/pref_wear.xml @@ -22,12 +22,6 @@ android:title="@string/wear_showbgi_title" android:summary="@string/wear_showbgi_summary"/> - - - + \ No newline at end of file From b9ad90a51b3789385d4f7b70e5b62c662e55a479 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 22:04:48 +0100 Subject: [PATCH 13/17] disconnect state --- .../androidaps/plugins/Loop/LoopPlugin.java | 32 +++++++++++++++++++ .../plugins/Overview/OverviewFragment.java | 8 ++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java index 1b6d05664e..11c761b7fc 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Loop/LoopPlugin.java @@ -63,6 +63,8 @@ public class LoopPlugin implements PluginBase { private long loopSuspendedTill = 0L; // end of manual loop suspend private boolean isSuperBolus = false; + private boolean isDisconnected = false; + public class LastRun { public APSResult request = null; @@ -85,6 +87,7 @@ public class LoopPlugin implements PluginBase { MainApp.bus().register(this); loopSuspendedTill = SP.getLong("loopSuspendedTill", 0L); isSuperBolus = SP.getBoolean("isSuperBolus", false); + isDisconnected = SP.getBoolean("isDisconnected", false); } @Override @@ -170,13 +173,28 @@ public class LoopPlugin implements PluginBase { public void suspendTo(long endTime) { loopSuspendedTill = endTime; isSuperBolus = false; + isDisconnected = false; SP.putLong("loopSuspendedTill", loopSuspendedTill); + SP.putBoolean("isSuperBolus", isSuperBolus); + SP.putBoolean("isDisconnected", isDisconnected); } public void superBolusTo(long endTime) { loopSuspendedTill = endTime; isSuperBolus = true; + isDisconnected = false; SP.putLong("loopSuspendedTill", loopSuspendedTill); + SP.putBoolean("isSuperBolus", isSuperBolus); + SP.putBoolean("isDisconnected", isDisconnected); + } + + public void disconnectTo(long endTime) { + loopSuspendedTill = endTime; + isSuperBolus = false; + isDisconnected = true; + SP.putLong("loopSuspendedTill", loopSuspendedTill); + SP.putBoolean("isSuperBolus", isSuperBolus); + SP.putBoolean("isDisconnected", isDisconnected); } public int minutesToEndOfSuspend() { @@ -222,6 +240,20 @@ public class LoopPlugin implements PluginBase { return isSuperBolus; } + public boolean isDisconnected() { + if (loopSuspendedTill == 0) + return false; + + long now = System.currentTimeMillis(); + + if (loopSuspendedTill <= now) { // time exceeded + suspendTo(0L); + return false; + } + + return isDisconnected; + } + public void invoke(String initiator, boolean allowNotification) { try { if (Config.logFunctionCalls) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 96f36faf2a..4f85163330 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -491,7 +491,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, NSUpload.uploadOpenAPSOffline(600); return true; } else if (item.getTitle().equals(MainApp.sResources.getString(R.string.disconnectpumpfor30m))) { - activeloop.suspendTo(System.currentTimeMillis() + 30L * 60 * 1000); + activeloop.disconnectTo(System.currentTimeMillis() + 30L * 60 * 1000); updateGUI("suspendmenu"); sHandler.post(new Runnable() { @Override @@ -505,7 +505,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, NSUpload.uploadOpenAPSOffline(30); return true; } else if (item.getTitle().equals(MainApp.sResources.getString(R.string.disconnectpumpfor1h))) { - activeloop.suspendTo(System.currentTimeMillis() + 1 * 60L * 60 * 1000); + activeloop.disconnectTo(System.currentTimeMillis() + 1 * 60L * 60 * 1000); updateGUI("suspendmenu"); sHandler.post(new Runnable() { @Override @@ -519,7 +519,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, NSUpload.uploadOpenAPSOffline(60); return true; } else if (item.getTitle().equals(MainApp.sResources.getString(R.string.disconnectpumpfor2h))) { - activeloop.suspendTo(System.currentTimeMillis() + 2 * 60L * 60 * 1000); + activeloop.disconnectTo(System.currentTimeMillis() + 2 * 60L * 60 * 1000); updateGUI("suspendmenu"); sHandler.post(new Runnable() { @Override @@ -533,7 +533,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, NSUpload.uploadOpenAPSOffline(120); return true; } else if (item.getTitle().equals(MainApp.sResources.getString(R.string.disconnectpumpfor3h))) { - activeloop.suspendTo(System.currentTimeMillis() + 3 * 60L * 60 * 1000); + activeloop.disconnectTo(System.currentTimeMillis() + 3 * 60L * 60 * 1000); updateGUI("suspendmenu"); sHandler.post(new Runnable() { @Override From a864703c76542b799f1f8f201e8fa31f0f21f847 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 22:24:25 +0100 Subject: [PATCH 14/17] Don't alarm while disconnected --- .../nightscout/androidaps/receivers/KeepAliveReceiver.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index a140372eaa..9069e8ca6b 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -23,6 +23,7 @@ import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.BgReading; import info.nightscout.androidaps.db.DatabaseHelper; import info.nightscout.androidaps.interfaces.PumpInterface; +import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.Overview.notifications.Notification; import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification; import info.nightscout.utils.SP; @@ -81,12 +82,14 @@ public class KeepAliveReceiver extends BroadcastReceiver { boolean nextAlarmOccurrenceReached = SP.getLong("nextPumpDisconnectedAlarm", 0l) < System.currentTimeMillis(); if (SP.getBoolean(MainApp.sResources.getString(R.string.key_enable_pump_unreachable_alert), true) - && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached) { + && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached && ! ConfigBuilderPlugin.getActiveLoop().isDisconnected()) { Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.sResources.getString(R.string.pump_unreachable), Notification.URGENT); n.soundId = R.raw.alarm; SP.putLong("nextPumpDisconnectedAlarm", System.currentTimeMillis() + pumpUnreachableThreshold()); MainApp.bus().post(new EventNewNotification(n)); - } else if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { + } + + if (SP.getBoolean("syncprofiletopump", false) && !pump.isThisProfileSet(profile)) { Thread t = new Thread(new Runnable() { @Override public void run() { From d6b534b3b687339db8da5f03bf55f26d1ee579f3 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 6 Nov 2017 23:47:39 +0100 Subject: [PATCH 15/17] use correct setting --- .../info/nightscout/androidaps/receivers/KeepAliveReceiver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index 9069e8ca6b..0988c564e6 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -160,7 +160,7 @@ public class KeepAliveReceiver extends BroadcastReceiver { SP.putLong("nextMissedReadingsAlarm", nextMissedReadingsAlarm); long nextPumpDisconnectedAlarm = SP.getLong("nextPumpDisconnectedAlarm", 0l); - nextPumpDisconnectedAlarm = Math.min(System.currentTimeMillis() + missedReadingsThreshold(), nextPumpDisconnectedAlarm); + nextPumpDisconnectedAlarm = Math.min(System.currentTimeMillis() + pumpUnreachableThreshold(), nextPumpDisconnectedAlarm); SP.putLong("nextPumpDisconnectedAlarm", nextPumpDisconnectedAlarm); } From 4e53b4b1a4c6dee1d578d01e990952cf2b93965b Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Tue, 7 Nov 2017 00:00:38 +0100 Subject: [PATCH 16/17] upper case literals --- .../nightscout/androidaps/receivers/KeepAliveReceiver.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java index 0988c564e6..f993993d97 100644 --- a/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java +++ b/app/src/main/java/info/nightscout/androidaps/receivers/KeepAliveReceiver.java @@ -155,11 +155,11 @@ public class KeepAliveReceiver extends BroadcastReceiver { static void shortenSnoozeInterval() { //shortens alarm times in case of setting changes or future data - long nextMissedReadingsAlarm = SP.getLong("nextMissedReadingsAlarm", 0l); + long nextMissedReadingsAlarm = SP.getLong("nextMissedReadingsAlarm", 0L); nextMissedReadingsAlarm = Math.min(System.currentTimeMillis() + missedReadingsThreshold(), nextMissedReadingsAlarm); SP.putLong("nextMissedReadingsAlarm", nextMissedReadingsAlarm); - long nextPumpDisconnectedAlarm = SP.getLong("nextPumpDisconnectedAlarm", 0l); + long nextPumpDisconnectedAlarm = SP.getLong("nextPumpDisconnectedAlarm", 0L); nextPumpDisconnectedAlarm = Math.min(System.currentTimeMillis() + pumpUnreachableThreshold(), nextPumpDisconnectedAlarm); SP.putLong("nextPumpDisconnectedAlarm", nextPumpDisconnectedAlarm); } From ec81f124e9de9286efce2a93db9bc977e0f56e1c Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 8 Nov 2017 18:53:33 +0100 Subject: [PATCH 17/17] remove already commented out code --- .../plugins/Overview/notifications/NotificationStore.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java index 984ec45cea..18c97bc409 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/NotificationStore.java @@ -65,12 +65,6 @@ public class NotificationStore { alarm.putExtra("soundid", n.soundId); MainApp.instance().startService(alarm); } - - //Only pipe through to wear if no system notification is raised (should show on wear anyways) - /*WearPlugin wearPlugin = MainApp.getSpecificPlugin(WearPlugin.class); - if(wearPlugin!= null && wearPlugin.isEnabled()) { - wearPlugin.overviewNotification(n.id, "OverviewNotification:\n" + n.text); - }*/ } Collections.sort(store, new NotificationComparator());