commit
2770e93ed4
5 changed files with 90 additions and 8 deletions
|
@ -188,6 +188,10 @@ public class NSSettingsStatus {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (settingsO.has("alarmTimeagoWarnMins") && what == "alarmTimeagoWarnMins"){
|
||||||
|
Double result = settingsO.getDouble(what);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -271,7 +275,6 @@ public class NSSettingsStatus {
|
||||||
, warnBattP: sbx.extendedSettings.warnBattP || 30
|
, warnBattP: sbx.extendedSettings.warnBattP || 30
|
||||||
, urgentBattP: sbx.extendedSettings.urgentBattP || 20
|
, urgentBattP: sbx.extendedSettings.urgentBattP || 20
|
||||||
, enableAlerts: sbx.extendedSettings.enableAlerts || false
|
, enableAlerts: sbx.extendedSettings.enableAlerts || false
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public double extendedPumpSettings(String setting) {
|
public double extendedPumpSettings(String setting) {
|
||||||
|
@ -301,6 +304,7 @@ public class NSSettingsStatus {
|
||||||
return 0d;
|
return 0d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public JSONObject extentendedPumpSettings() {
|
public JSONObject extentendedPumpSettings() {
|
||||||
try {
|
try {
|
||||||
|
@ -339,5 +343,16 @@ public class NSSettingsStatus {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean openAPSEnabledAlerts() {
|
||||||
|
try {
|
||||||
|
JSONObject pump = extentendedPumpSettings();
|
||||||
|
if (pump != null && pump.has("openaps")) {
|
||||||
|
return pump.getBoolean("enableAlerts");
|
||||||
|
}
|
||||||
|
} catch (JSONException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
package info.nightscout.androidaps.plugins.Overview;
|
package info.nightscout.androidaps.plugins.Overview;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -9,11 +10,16 @@ import info.nightscout.androidaps.plugins.NSClientInternal.data.NSAlarm;
|
||||||
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSettingsStatus;
|
import info.nightscout.androidaps.plugins.NSClientInternal.data.NSSettingsStatus;
|
||||||
import info.nightscout.utils.SP;
|
import info.nightscout.utils.SP;
|
||||||
|
|
||||||
|
// Added by Rumen for debugging
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
/**
|
/**
|
||||||
* Created by mike on 03.12.2016.
|
* Created by mike on 03.12.2016.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class Notification {
|
public class Notification {
|
||||||
|
private static Logger log = LoggerFactory.getLogger(Notification.class);
|
||||||
|
|
||||||
public static final int URGENT = 0;
|
public static final int URGENT = 0;
|
||||||
public static final int NORMAL = 1;
|
public static final int NORMAL = 1;
|
||||||
public static final int LOW = 2;
|
public static final int LOW = 2;
|
||||||
|
@ -93,7 +99,7 @@ public class Notification {
|
||||||
this.id = NSALARM;
|
this.id = NSALARM;
|
||||||
this.level = NORMAL;
|
this.level = NORMAL;
|
||||||
this.text = nsAlarm.getTile();
|
this.text = nsAlarm.getTile();
|
||||||
if (isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false))
|
if (isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false) || isAlarmForStaleData() && SP.getBoolean(R.string.key_nsalarm_staledata,false))
|
||||||
this.soundId = R.raw.alarm;
|
this.soundId = R.raw.alarm;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -111,9 +117,11 @@ public class Notification {
|
||||||
return true;
|
return true;
|
||||||
if (level == ANNOUNCEMENT)
|
if (level == ANNOUNCEMENT)
|
||||||
return true;
|
return true;
|
||||||
if (level == NORMAL && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false))
|
if (level == NORMAL && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_high, false) || isAlarmForStaleData() && SP.getBoolean(R.string.key_nsalarm_staledata, false))
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
if (level == URGENT && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_urgent_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_urgent_high, false))
|
}
|
||||||
|
if (level == URGENT && isAlarmForLow() && SP.getBoolean(R.string.key_nsalarm_urgent_low, false) || isAlarmForHigh() && SP.getBoolean(R.string.key_nsalarm_urgent_high, false) || isAlarmForStaleData() && SP.getBoolean(R.string.key_nsalarm_urgent_staledata, false))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -141,4 +149,35 @@ public class Notification {
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean isAlarmForStaleData(){
|
||||||
|
if(SP.getLong("snoozedTo", 0L) != 0L){
|
||||||
|
if(System.currentTimeMillis() < SP.getLong("snoozedTo", 0L)) {
|
||||||
|
//log.debug("Alarm is snoozed for next "+(SP.getLong("snoozedTo", 0L)-System.currentTimeMillis())/1000+" seconds");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
BgReading bgReading = MainApp.getDbHelper().lastBg();
|
||||||
|
if (bgReading == null)
|
||||||
|
return false;
|
||||||
|
long bgReadingAgo = System.currentTimeMillis() - bgReading.date;
|
||||||
|
int bgReadingAgoMin = (int) (bgReadingAgo / (1000 * 60));
|
||||||
|
// Added for testing
|
||||||
|
//bgReadingAgoMin = 20;
|
||||||
|
log.debug("bgReadingAgoMin value is:"+bgReadingAgoMin);
|
||||||
|
Double threshold = NSSettingsStatus.getInstance().getThreshold("alarmTimeagoWarnMins");
|
||||||
|
boolean openAPSEnabledAlerts = NSSettingsStatus.getInstance().openAPSEnabledAlerts();
|
||||||
|
log.debug("OpenAPS Alerts enabled: "+openAPSEnabledAlerts);
|
||||||
|
// if no thresshold from Ns get it loccally
|
||||||
|
if(threshold == null) threshold = SP.getDouble(R.string.key_nsalarm_staledatavalue,15D);
|
||||||
|
// No threshold of OpenAPS Alarm so using the one for BG
|
||||||
|
// Added OpenAPSEnabledAlerts to alarm check
|
||||||
|
if((bgReadingAgoMin > threshold && SP.getBoolean(R.string.key_nsalarm_staledata, false))||(bgReadingAgoMin > threshold && openAPSEnabledAlerts)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//snoozing for threshold
|
||||||
|
SP.putLong("snoozedTo", (long) (bgReading.date+(threshold*1000*60L)));
|
||||||
|
//log.debug("New bg data is available Alarm is snoozed for next "+threshold*1000*60+" seconds");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,8 @@ import info.nightscout.androidaps.MainApp;
|
||||||
import info.nightscout.androidaps.R;
|
import info.nightscout.androidaps.R;
|
||||||
import info.nightscout.androidaps.Services.AlarmSoundService;
|
import info.nightscout.androidaps.Services.AlarmSoundService;
|
||||||
import info.nightscout.androidaps.plugins.Wear.WearPlugin;
|
import info.nightscout.androidaps.plugins.Wear.WearPlugin;
|
||||||
|
//Added by Rumen for snooze time
|
||||||
|
import info.nightscout.utils.SP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by mike on 03.12.2016.
|
* Created by mike on 03.12.2016.
|
||||||
|
@ -24,7 +25,7 @@ import info.nightscout.androidaps.plugins.Wear.WearPlugin;
|
||||||
public class NotificationStore {
|
public class NotificationStore {
|
||||||
private static Logger log = LoggerFactory.getLogger(NotificationStore.class);
|
private static Logger log = LoggerFactory.getLogger(NotificationStore.class);
|
||||||
public List<Notification> store = new ArrayList<Notification>();
|
public List<Notification> store = new ArrayList<Notification>();
|
||||||
|
public long snoozedUntil = 0L;
|
||||||
public NotificationStore() {
|
public NotificationStore() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,4 +87,18 @@ public class NotificationStore {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void snoozeTo(long timeToSnooze){
|
||||||
|
log.debug("Snoozing alarm until: "+timeToSnooze);
|
||||||
|
SP.putLong("snoozedTo", timeToSnooze);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unSnooze(){
|
||||||
|
if(Notification.isAlarmForStaleData()){
|
||||||
|
Notification notification = new Notification(Notification.NSALARM, MainApp.sResources.getString(R.string.nsalarm_staledata), Notification.URGENT);
|
||||||
|
SP.putLong("snoozedTo", System.currentTimeMillis());
|
||||||
|
add(notification);
|
||||||
|
log.debug("Snoozed to current time and added back notification!");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,9 @@ import info.nightscout.utils.Profiler;
|
||||||
import info.nightscout.utils.Round;
|
import info.nightscout.utils.Round;
|
||||||
import info.nightscout.utils.SP;
|
import info.nightscout.utils.SP;
|
||||||
import info.nightscout.utils.ToastUtils;
|
import info.nightscout.utils.ToastUtils;
|
||||||
|
//Added By Rumen for staledata alarm
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.Notification;
|
||||||
|
import info.nightscout.androidaps.plugins.Overview.events.EventNewNotification;
|
||||||
|
|
||||||
public class OverviewFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
public class OverviewFragment extends Fragment implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
|
||||||
private static Logger log = LoggerFactory.getLogger(OverviewFragment.class);
|
private static Logger log = LoggerFactory.getLogger(OverviewFragment.class);
|
||||||
|
@ -1748,6 +1750,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
|
||||||
public void onBindViewHolder(NotificationsViewHolder holder, int position) {
|
public void onBindViewHolder(NotificationsViewHolder holder, int position) {
|
||||||
Notification notification = notificationsList.get(position);
|
Notification notification = notificationsList.get(position);
|
||||||
holder.dismiss.setTag(notification);
|
holder.dismiss.setTag(notification);
|
||||||
|
if(notification.text == MainApp.sResources.getString(R.string.nsalarm_staledata))
|
||||||
|
holder.dismiss.setText("snooze");
|
||||||
holder.text.setText(notification.text);
|
holder.text.setText(notification.text);
|
||||||
holder.time.setText(DateUtil.timeString(notification.date));
|
holder.time.setText(DateUtil.timeString(notification.date));
|
||||||
if (notification.level == Notification.URGENT)
|
if (notification.level == Notification.URGENT)
|
||||||
|
@ -1796,6 +1800,14 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
|
||||||
if (notification.nsAlarm != null) {
|
if (notification.nsAlarm != null) {
|
||||||
BroadcastAckAlarm.handleClearAlarm(notification.nsAlarm, MainApp.instance().getApplicationContext(), 60 * 60 * 1000L);
|
BroadcastAckAlarm.handleClearAlarm(notification.nsAlarm, MainApp.instance().getApplicationContext(), 60 * 60 * 1000L);
|
||||||
}
|
}
|
||||||
|
// Adding current time to snooze if we got staleData
|
||||||
|
log.debug("Notification text is: "+notification.text);
|
||||||
|
if(notification.text.equals(MainApp.sResources.getString(R.string.nsalarm_staledata))){
|
||||||
|
NotificationStore nstore = getPlugin().notificationStore;
|
||||||
|
long msToSnooze = SP.getInt("nsalarm_staledatavalue",15)*60*1000L;
|
||||||
|
log.debug("snooze nsalarm_staledatavalue in minutes is "+SP.getInt("nsalarm_staledatavalue",15)+"\n in ms is: "+msToSnooze+" currentTimeMillis is: "+System.currentTimeMillis());
|
||||||
|
nstore.snoozeTo(System.currentTimeMillis()+(SP.getInt("nsalarm_staledatavalue",15)*60*1000L));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1810,6 +1822,7 @@ public class OverviewFragment extends Fragment implements View.OnClickListener,
|
||||||
public void run() {
|
public void run() {
|
||||||
NotificationStore nstore = getPlugin().notificationStore;
|
NotificationStore nstore = getPlugin().notificationStore;
|
||||||
nstore.removeExpired();
|
nstore.removeExpired();
|
||||||
|
nstore.unSnooze();
|
||||||
if (nstore.store.size() > 0) {
|
if (nstore.store.size() > 0) {
|
||||||
RecyclerViewAdapter adapter = new RecyclerViewAdapter(nstore.store);
|
RecyclerViewAdapter adapter = new RecyclerViewAdapter(nstore.store);
|
||||||
notificationsView.setAdapter(adapter);
|
notificationsView.setAdapter(adapter);
|
||||||
|
|
Loading…
Reference in a new issue