LoopPlugin injection

This commit is contained in:
Milos Kozak 2020-01-03 01:45:26 +01:00
parent 4fff1f42c1
commit c16131bfc8
11 changed files with 63 additions and 56 deletions

View file

@ -78,7 +78,7 @@ class LoopFragment : DaggerFragment() {
@Synchronized @Synchronized
fun updateGUI() { fun updateGUI() {
if (loop_request == null) return if (loop_request == null) return
LoopPlugin.lastRun?.let { loopPlugin.lastRun?.let {
loop_request.text = it.request?.toSpanned() ?: "" loop_request.text = it.request?.toSpanned() ?: ""
loop_constraintsprocessed.text = it.constraintsProcessed?.toSpanned() ?: "" loop_constraintsprocessed.text = it.constraintsProcessed?.toSpanned() ?: ""
loop_source.text = it.source ?: "" loop_source.text = it.source ?: ""

View file

@ -11,7 +11,6 @@ import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.SystemClock; import android.os.SystemClock;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationCompat;
import java.util.Date; import java.util.Date;
@ -19,6 +18,7 @@ import java.util.Date;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Singleton; import javax.inject.Singleton;
import dagger.Lazy;
import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainActivity; import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
@ -78,7 +78,7 @@ public class LoopPlugin extends PluginBase {
private final ConfigBuilderPlugin configBuilderPlugin; private final ConfigBuilderPlugin configBuilderPlugin;
private final TreatmentsPlugin treatmentsPlugin; private final TreatmentsPlugin treatmentsPlugin;
private final VirtualPumpPlugin virtualPumpPlugin; private final VirtualPumpPlugin virtualPumpPlugin;
private final ActionStringHandler actionStringHandler; private final Lazy<ActionStringHandler> actionStringHandler;
private CompositeDisposable disposable = new CompositeDisposable(); private CompositeDisposable disposable = new CompositeDisposable();
@ -86,17 +86,6 @@ public class LoopPlugin extends PluginBase {
private long lastBgTriggeredRun = 0; private long lastBgTriggeredRun = 0;
private static LoopPlugin loopPlugin;
@NonNull
@Deprecated
public static LoopPlugin getPlugin() {
if (loopPlugin == null) {
throw new IllegalStateException("Accessing LoopPlugin before first instantiation");
}
return loopPlugin;
}
private long loopSuspendedTill; // end of manual loop suspend private long loopSuspendedTill; // end of manual loop suspend
private boolean isSuperBolus; private boolean isSuperBolus;
private boolean isDisconnected; private boolean isDisconnected;
@ -112,8 +101,7 @@ public class LoopPlugin extends PluginBase {
public Date lastOpenModeAccept; public Date lastOpenModeAccept;
} }
@Deprecated public LastRun lastRun = null;
static public LastRun lastRun = null;
@Inject @Inject
public LoopPlugin( public LoopPlugin(
@ -127,7 +115,7 @@ public class LoopPlugin extends PluginBase {
ConfigBuilderPlugin configBuilderPlugin, ConfigBuilderPlugin configBuilderPlugin,
TreatmentsPlugin treatmentsPlugin, TreatmentsPlugin treatmentsPlugin,
VirtualPumpPlugin virtualPumpPlugin, VirtualPumpPlugin virtualPumpPlugin,
ActionStringHandler actionStringHandler Lazy<ActionStringHandler> actionStringHandler // TODO Adrian use RxBus instead of Lazy
) { ) {
super(new PluginDescription() super(new PluginDescription()
.mainType(PluginType.LOOP) .mainType(PluginType.LOOP)
@ -137,7 +125,6 @@ public class LoopPlugin extends PluginBase {
.preferencesId(R.xml.pref_loop) .preferencesId(R.xml.pref_loop)
.description(R.string.description_loop) .description(R.string.description_loop)
); );
this.loopPlugin = this; //TODO remove
this.aapsLogger = aapsLogger; this.aapsLogger = aapsLogger;
this.rxBus = rxBus; this.rxBus = rxBus;
this.sp = sp; this.sp = sp;
@ -475,13 +462,13 @@ public class LoopPlugin extends PluginBase {
rxBus.send(new EventNewOpenLoopNotification()); rxBus.send(new EventNewOpenLoopNotification());
// Send to Wear // Send to Wear
actionStringHandler.handleInitiate("changeRequest"); actionStringHandler.get().handleInitiate("changeRequest");
} else if (allowNotification) { } else if (allowNotification) {
// dismiss notifications // dismiss notifications
NotificationManager notificationManager = NotificationManager notificationManager =
(NotificationManager) mainApp.getSystemService(Context.NOTIFICATION_SERVICE); (NotificationManager) mainApp.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(Constants.notificationID); notificationManager.cancel(Constants.notificationID);
actionStringHandler.handleInitiate("cancelChangeRequest"); actionStringHandler.get().handleInitiate("cancelChangeRequest");
} }
} }

View file

@ -27,6 +27,7 @@ import io.reactivex.disposables.CompositeDisposable
import kotlinx.android.synthetic.main.food_fragment.* import kotlinx.android.synthetic.main.food_fragment.*
import java.util.* import java.util.*
import javax.inject.Inject import javax.inject.Inject
import kotlin.collections.ArrayList
class FoodFragment : DaggerFragment() { class FoodFragment : DaggerFragment() {
@ -47,7 +48,7 @@ class FoodFragment : DaggerFragment() {
food_recyclerview.setHasFixedSize(true) food_recyclerview.setHasFixedSize(true)
food_recyclerview.setLayoutManager(LinearLayoutManager(view.context)) food_recyclerview.setLayoutManager(LinearLayoutManager(view.context))
food_recyclerview.adapter = RecyclerViewAdapter(foodPlugin.service.foodData) food_recyclerview.adapter = RecyclerViewAdapter(foodPlugin.service?.foodData ?: ArrayList())
food_clearfilter.setOnClickListener { food_clearfilter.setOnClickListener {
food_filter.setText("") food_filter.setText("")
@ -105,7 +106,7 @@ class FoodFragment : DaggerFragment() {
} }
private fun loadData() { private fun loadData() {
unfiltered = foodPlugin.service.foodData unfiltered = foodPlugin.service?.foodData ?: ArrayList()
} }
private fun fillCategories() { private fun fillCategories() {
@ -200,7 +201,7 @@ class FoodFragment : DaggerFragment() {
if (food._id != null && food._id != "") { if (food._id != null && food._id != "") {
NSUpload.removeFoodFromNS(food._id) NSUpload.removeFoodFromNS(food._id)
} }
foodPlugin.service.delete(food) foodPlugin.service?.delete(food)
}, null) }, null)
} }
} }

View file

@ -16,5 +16,10 @@ class FoodPlugin @Inject constructor() : PluginBase(PluginDescription()
.description(R.string.description_food) .description(R.string.description_food)
) { ) {
val service: FoodService = FoodService() var service: FoodService? = null
override fun onStart() {
super.onStart()
service = FoodService()
}
} }

View file

@ -38,7 +38,7 @@ class MaintenanceFragment : DaggerFragment() {
MainApp.getDbHelper().resetDatabases() MainApp.getDbHelper().resetDatabases()
// should be handled by Plugin-Interface and // should be handled by Plugin-Interface and
// additional service interface and plugin registry // additional service interface and plugin registry
foodPlugin.service.resetFood() foodPlugin.service?.resetFood()
treatmentsPlugin.service.resetTreatments() treatmentsPlugin.service.resetTreatments()
}) })
} }

View file

@ -21,6 +21,9 @@ import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import javax.inject.Inject;
import javax.inject.Singleton;
import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R; import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.DetailedBolusInfo; import info.nightscout.androidaps.data.DetailedBolusInfo;
@ -47,10 +50,16 @@ import info.nightscout.androidaps.utils.SP;
/** /**
* Created by mike on 26.05.2017. * Created by mike on 26.05.2017.
*/ */
@Singleton
public class NSUpload { public class NSUpload {
private static Logger log = LoggerFactory.getLogger(L.NSCLIENT); private static Logger log = LoggerFactory.getLogger(L.NSCLIENT);
private static LoopPlugin loopPlugin; // Ugly but temporary
@Inject
public NSUpload(LoopPlugin loopPlugin) {
this.loopPlugin = loopPlugin;
}
public static void uploadTempBasalStartAbsolute(TemporaryBasal temporaryBasal, Double originalExtendedAmount) { public static void uploadTempBasalStartAbsolute(TemporaryBasal temporaryBasal, Double originalExtendedAmount) {
try { try {
JSONObject data = new JSONObject(); JSONObject data = new JSONObject();
@ -169,7 +178,8 @@ public class NSUpload {
DeviceStatus deviceStatus = new DeviceStatus(); DeviceStatus deviceStatus = new DeviceStatus();
try { try {
LoopPlugin.LastRun lastRun = LoopPlugin.lastRun; if (loopPlugin == null) return; // TODO ugly - not initialized yet
LoopPlugin.LastRun lastRun = loopPlugin.lastRun;
if (lastRun != null && lastRun.lastAPSRun.getTime() > System.currentTimeMillis() - 300 * 1000L) { if (lastRun != null && lastRun.lastAPSRun.getTime() > System.currentTimeMillis() - 300 * 1000L) {
// do not send if result is older than 1 min // do not send if result is older than 1 min
APSResult apsResult = lastRun.request; APSResult apsResult = lastRun.request;

View file

@ -477,10 +477,9 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
private void setupChartMenu(View view) { private void setupChartMenu(View view) {
chartButton = (ImageButton) view.findViewById(R.id.overview_chartMenuButton); chartButton = (ImageButton) view.findViewById(R.id.overview_chartMenuButton);
chartButton.setOnClickListener(v -> { chartButton.setOnClickListener(v -> {
final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun;
boolean predictionsAvailable; boolean predictionsAvailable;
if (Config.APS) if (Config.APS)
predictionsAvailable = finalLastRun != null && finalLastRun.request.hasPredictions; predictionsAvailable = loopPlugin.lastRun != null && loopPlugin.lastRun.request.hasPredictions;
else if (Config.NSCLIENT) else if (Config.NSCLIENT)
predictionsAvailable = true; predictionsAvailable = true;
else else
@ -923,9 +922,8 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
if (loopPlugin.isEnabled(PluginType.LOOP) && profile != null) { if (loopPlugin.isEnabled(PluginType.LOOP) && profile != null) {
loopPlugin.invoke("Accept temp button", false); loopPlugin.invoke("Accept temp button", false);
final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun; if (loopPlugin.lastRun != null && loopPlugin.lastRun.lastAPSRun != null && loopPlugin.lastRun.constraintsProcessed.isChangeRequested()) {
if (finalLastRun != null && finalLastRun.lastAPSRun != null && finalLastRun.constraintsProcessed.isChangeRequested()) { OKDialog.showConfirmation(context, resourceHelper.gs(R.string.pump_tempbasal_label), loopPlugin.lastRun.constraintsProcessed.toSpanned(), () -> {
OKDialog.showConfirmation(context, resourceHelper.gs(R.string.pump_tempbasal_label), finalLastRun.constraintsProcessed.toSpanned(), () -> {
hideTempRecommendation(); hideTempRecommendation();
clearNotification(); clearNotification();
loopPlugin.acceptChangeRequest(); loopPlugin.acceptChangeRequest();
@ -1078,7 +1076,6 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
Constraint<Boolean> closedLoopEnabled = constraintChecker.isClosedLoopAllowed(); Constraint<Boolean> closedLoopEnabled = constraintChecker.isClosedLoopAllowed();
// open loop mode // open loop mode
final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun;
if (Config.APS && pump.getPumpDescription().isTempBasalCapable) { if (Config.APS && pump.getPumpDescription().isTempBasalCapable) {
apsModeView.setVisibility(View.VISIBLE); apsModeView.setVisibility(View.VISIBLE);
apsModeView.setBackgroundColor(resourceHelper.gc(R.color.ribbonDefault)); apsModeView.setBackgroundColor(resourceHelper.gc(R.color.ribbonDefault));
@ -1131,13 +1128,13 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
// **** Temp button **** // **** Temp button ****
if (acceptTempLayout != null) { if (acceptTempLayout != null) {
boolean showAcceptButton = !closedLoopEnabled.value(); // Open mode needed boolean showAcceptButton = !closedLoopEnabled.value(); // Open mode needed
showAcceptButton = showAcceptButton && finalLastRun != null && finalLastRun.lastAPSRun != null; // aps result must exist showAcceptButton = showAcceptButton && loopPlugin.lastRun != null && loopPlugin.lastRun.lastAPSRun != null; // aps result must exist
showAcceptButton = showAcceptButton && (finalLastRun.lastOpenModeAccept == null || finalLastRun.lastOpenModeAccept.getTime() < finalLastRun.lastAPSRun.getTime()); // never accepted or before last result showAcceptButton = showAcceptButton && (loopPlugin.lastRun.lastOpenModeAccept == null || loopPlugin.lastRun.lastOpenModeAccept.getTime() < loopPlugin.lastRun.lastAPSRun.getTime()); // never accepted or before last result
showAcceptButton = showAcceptButton && finalLastRun.constraintsProcessed.isChangeRequested(); // change is requested showAcceptButton = showAcceptButton && loopPlugin.lastRun.constraintsProcessed.isChangeRequested(); // change is requested
if (showAcceptButton && pump.isInitialized() && !pump.isSuspended() && loopPlugin.isEnabled(PluginType.LOOP)) { if (showAcceptButton && pump.isInitialized() && !pump.isSuspended() && loopPlugin.isEnabled(PluginType.LOOP)) {
acceptTempLayout.setVisibility(View.VISIBLE); acceptTempLayout.setVisibility(View.VISIBLE);
acceptTempButton.setText(resourceHelper.gs(R.string.setbasalquestion) + "\n" + finalLastRun.constraintsProcessed); acceptTempButton.setText(resourceHelper.gs(R.string.setbasalquestion) + "\n" + loopPlugin.lastRun.constraintsProcessed);
} else { } else {
acceptTempLayout.setVisibility(View.GONE); acceptTempLayout.setVisibility(View.GONE);
} }
@ -1349,7 +1346,7 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
boolean predictionsAvailable; boolean predictionsAvailable;
if (Config.APS) if (Config.APS)
predictionsAvailable = finalLastRun != null && finalLastRun.request.hasPredictions; predictionsAvailable = loopPlugin.lastRun != null && loopPlugin.lastRun.request.hasPredictions;
else if (Config.NSCLIENT) else if (Config.NSCLIENT)
predictionsAvailable = true; predictionsAvailable = true;
else else
@ -1403,7 +1400,7 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
if (finalPredictionsAvailable && sp.getBoolean("showprediction", false)) { if (finalPredictionsAvailable && sp.getBoolean("showprediction", false)) {
if (Config.APS) if (Config.APS)
apsResult = finalLastRun.constraintsProcessed; apsResult = loopPlugin.lastRun.constraintsProcessed;
else else
apsResult = NSDeviceStatus.getAPSResult(); apsResult = NSDeviceStatus.getAPSResult();
int predHours = (int) (Math.ceil(apsResult.getLatestPredictionsTime() - System.currentTimeMillis()) / (60 * 60 * 1000)); int predHours = (int) (Math.ceil(apsResult.getLatestPredictionsTime() - System.currentTimeMillis()) / (60 * 60 * 1000));
@ -1454,7 +1451,7 @@ public class OverviewFragment extends DaggerFragment implements View.OnClickList
} }
// add target line // add target line
graphData.addTargetLine(fromTime, toTime, profile); graphData.addTargetLine(fromTime, toTime, profile, loopPlugin.lastRun);
// **** NOW line **** // **** NOW line ****
graphData.addNowLine(now); graphData.addNowLine(now);

View file

@ -243,7 +243,7 @@ public class GraphData {
addSeries(absoluteBasalsLineSeries); addSeries(absoluteBasalsLineSeries);
} }
public void addTargetLine(long fromTime, long toTime, Profile profile) { public void addTargetLine(long fromTime, long toTime, Profile profile, LoopPlugin.LastRun lastRun) {
LineGraphSeries<DataPoint> targetsSeries; LineGraphSeries<DataPoint> targetsSeries;
Scale targetsScale = new Scale(); Scale targetsScale = new Scale();
@ -252,8 +252,8 @@ public class GraphData {
List<DataPoint> targetsSeriesArray = new ArrayList<>(); List<DataPoint> targetsSeriesArray = new ArrayList<>();
double lastTarget = -1; double lastTarget = -1;
if (LoopPlugin.lastRun != null && LoopPlugin.lastRun.constraintsProcessed != null) { if (lastRun != null && lastRun.constraintsProcessed != null) {
APSResult apsResult = LoopPlugin.lastRun.constraintsProcessed; APSResult apsResult = lastRun.constraintsProcessed;
long latestPredictionsTime = apsResult.getLatestPredictionsTime(); long latestPredictionsTime = apsResult.getLatestPredictionsTime();
if (latestPredictionsTime > toTime) { if (latestPredictionsTime > toTime) {
toTime = latestPredictionsTime; toTime = latestPredictionsTime;

View file

@ -2,7 +2,6 @@ package info.nightscout.androidaps.plugins.general.wear
import android.app.NotificationManager import android.app.NotificationManager
import android.content.Context import android.content.Context
import dagger.Lazy
import info.nightscout.androidaps.Config import info.nightscout.androidaps.Config
import info.nightscout.androidaps.Constants import info.nightscout.androidaps.Constants
import info.nightscout.androidaps.MainApp import info.nightscout.androidaps.MainApp
@ -33,7 +32,11 @@ import info.nightscout.androidaps.plugins.pump.insight.LocalInsightPlugin
import info.nightscout.androidaps.plugins.treatments.CarbsGenerator import info.nightscout.androidaps.plugins.treatments.CarbsGenerator
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.queue.Callback import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.utils.* import info.nightscout.androidaps.utils.DateUtil
import info.nightscout.androidaps.utils.DecimalFormatter
import info.nightscout.androidaps.utils.HardLimits
import info.nightscout.androidaps.utils.SafeParse
import info.nightscout.androidaps.utils.ToastUtils
import info.nightscout.androidaps.utils.resources.ResourceHelper import info.nightscout.androidaps.utils.resources.ResourceHelper
import info.nightscout.androidaps.utils.sharedPreferences.SP import info.nightscout.androidaps.utils.sharedPreferences.SP
import info.nightscout.androidaps.utils.wizard.BolusWizard import info.nightscout.androidaps.utils.wizard.BolusWizard
@ -52,7 +55,7 @@ class ActionStringHandler @Inject constructor(
private val constraintChecker: ConstraintChecker, private val constraintChecker: ConstraintChecker,
private val profileFunction: ProfileFunction, private val profileFunction: ProfileFunction,
private val mainApp: MainApp, private val mainApp: MainApp,
private val loopPlugin: Lazy<LoopPlugin>, private val loopPlugin: LoopPlugin,
private val wearPlugin: WearPlugin, private val wearPlugin: WearPlugin,
private val treatmentsPlugin: TreatmentsPlugin, private val treatmentsPlugin: TreatmentsPlugin,
private val configBuilderPlugin: ConfigBuilderPlugin, private val configBuilderPlugin: ConfigBuilderPlugin,
@ -67,6 +70,8 @@ class ActionStringHandler @Inject constructor(
private var lastSentTimestamp: Long = 0 private var lastSentTimestamp: Long = 0
private var lastConfirmActionString: String? = null private var lastConfirmActionString: String? = null
private var lastBolusWizard: BolusWizard? = null private var lastBolusWizard: BolusWizard? = null
// TODO Adrian use RxBus instead of Lazy + cross dependency
@Synchronized @Synchronized
fun handleInitiate(actionString: String) { fun handleInitiate(actionString: String) {
if (!sp.getBoolean("wearcontrol", false)) return if (!sp.getBoolean("wearcontrol", false)) return
@ -284,7 +289,7 @@ class ActionStringHandler @Inject constructor(
} else if ("changeRequest" == act[0]) { ////////////////////////////////////////////// CHANGE REQUEST } else if ("changeRequest" == act[0]) { ////////////////////////////////////////////// CHANGE REQUEST
rTitle = resourceHelper.gs(R.string.openloop_newsuggestion) rTitle = resourceHelper.gs(R.string.openloop_newsuggestion)
rAction = "changeRequest" rAction = "changeRequest"
val finalLastRun = LoopPlugin.lastRun val finalLastRun = loopPlugin.lastRun
rMessage += finalLastRun.constraintsProcessed rMessage += finalLastRun.constraintsProcessed
wearPlugin.requestChangeConfirmation(rTitle, rMessage, rAction) wearPlugin.requestChangeConfirmation(rTitle, rMessage, rAction)
lastSentTimestamp = System.currentTimeMillis() lastSentTimestamp = System.currentTimeMillis()
@ -392,7 +397,7 @@ class ActionStringHandler @Inject constructor(
get() { get() {
var ret = "" var ret = ""
// decide if enabled/disabled closed/open; what Plugin as APS? // decide if enabled/disabled closed/open; what Plugin as APS?
if (loopPlugin.get().isEnabled(loopPlugin.get().getType())) { if (loopPlugin.isEnabled(loopPlugin.getType())) {
ret += if (constraintChecker.isClosedLoopAllowed().value()) { ret += if (constraintChecker.isClosedLoopAllowed().value()) {
"CLOSED LOOP\n" "CLOSED LOOP\n"
} else { } else {
@ -400,9 +405,9 @@ class ActionStringHandler @Inject constructor(
} }
val aps = configBuilderPlugin.activeAPS val aps = configBuilderPlugin.activeAPS
ret += "APS: " + if (aps == null) "NO APS SELECTED!" else (aps as PluginBase).name ret += "APS: " + if (aps == null) "NO APS SELECTED!" else (aps as PluginBase).name
if (LoopPlugin.lastRun != null) { if (loopPlugin.lastRun != null) {
if (LoopPlugin.lastRun.lastAPSRun != null) ret += "\nLast Run: " + DateUtil.timeString(LoopPlugin.lastRun.lastAPSRun) if (loopPlugin.lastRun.lastAPSRun != null) ret += "\nLast Run: " + DateUtil.timeString(loopPlugin.lastRun.lastAPSRun)
if (LoopPlugin.lastRun.lastEnact != null) ret += "\nLast Enact: " + DateUtil.timeString(LoopPlugin.lastRun.lastEnact) if (loopPlugin.lastRun.lastEnact != null) ret += "\nLast Enact: " + DateUtil.timeString(loopPlugin.lastRun.lastEnact)
} }
} else { } else {
ret += "LOOP DISABLED\n" ret += "LOOP DISABLED\n"
@ -452,7 +457,7 @@ class ActionStringHandler @Inject constructor(
return ret return ret
} }
@Synchronized @Synchronized
fun handleConfirmation(actionString: String) { fun handleConfirmation(actionString: String) {
if (!sp.getBoolean("wearcontrol", false)) return if (!sp.getBoolean("wearcontrol", false)) return
//Guard from old or duplicate confirmations //Guard from old or duplicate confirmations
@ -502,7 +507,7 @@ class ActionStringHandler @Inject constructor(
} else if ("dismissoverviewnotification" == act[0]) { } else if ("dismissoverviewnotification" == act[0]) {
rxBus.send(EventDismissNotification(SafeParse.stringToInt(act[1]))) rxBus.send(EventDismissNotification(SafeParse.stringToInt(act[1])))
} else if ("changeRequest" == act[0]) { } else if ("changeRequest" == act[0]) {
loopPlugin.get().acceptChangeRequest() loopPlugin.acceptChangeRequest()
val notificationManager = mainApp.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationManager = mainApp.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.cancel(Constants.notificationID) notificationManager.cancel(Constants.notificationID)
} }

View file

@ -11,6 +11,7 @@ import dagger.android.DaggerBroadcastReceiver
import info.nightscout.androidaps.events.EventProfileNeedsUpdate import info.nightscout.androidaps.events.EventProfileNeedsUpdate
import info.nightscout.androidaps.logging.AAPSLogger import info.nightscout.androidaps.logging.AAPSLogger
import info.nightscout.androidaps.logging.L import info.nightscout.androidaps.logging.L
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
import info.nightscout.androidaps.plugins.bus.RxBusWrapper import info.nightscout.androidaps.plugins.bus.RxBusWrapper
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction import info.nightscout.androidaps.plugins.configBuilder.ProfileFunction
@ -29,6 +30,7 @@ class KeepAliveReceiver : DaggerBroadcastReceiver() {
@Inject lateinit var rxBus: RxBusWrapper @Inject lateinit var rxBus: RxBusWrapper
@Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin @Inject lateinit var configBuilderPlugin: ConfigBuilderPlugin
@Inject lateinit var profileFunction: ProfileFunction @Inject lateinit var profileFunction: ProfileFunction
@Inject lateinit var loopPlugin: LoopPlugin
private var lastReadStatus: Long = 0 private var lastReadStatus: Long = 0
private var lastRun: Long = 0 private var lastRun: Long = 0
@ -107,7 +109,7 @@ class KeepAliveReceiver : DaggerBroadcastReceiver() {
// sometimes keep alive broadcast stops // sometimes keep alive broadcast stops
// as as workaround test if readStatus was requested before an alarm is generated // as as workaround test if readStatus was requested before an alarm is generated
if (lastReadStatus != 0L && lastReadStatus > System.currentTimeMillis() - T.mins(5).msecs()) { if (lastReadStatus != 0L && lastReadStatus > System.currentTimeMillis() - T.mins(5).msecs()) {
LocalAlertUtils.checkPumpUnreachableAlarm(lastConnection, isStatusOutdated) LocalAlertUtils.checkPumpUnreachableAlarm(lastConnection, isStatusOutdated, loopPlugin.isDisconnected)
} }
if (!pump.isThisProfileSet(profile) && !configBuilderPlugin.commandQueue.isRunning(Command.CommandType.BASALPROFILE)) { if (!pump.isThisProfileSet(profile) && !configBuilderPlugin.commandQueue.isRunning(Command.CommandType.BASALPROFILE)) {
rxBus.send(EventProfileNeedsUpdate()) rxBus.send(EventProfileNeedsUpdate())

View file

@ -34,12 +34,12 @@ public class LocalAlertUtils {
return T.mins(SP.getInt(MainApp.gs(R.string.key_pump_unreachable_threshold), 30)).msecs(); return T.mins(SP.getInt(MainApp.gs(R.string.key_pump_unreachable_threshold), 30)).msecs();
} }
public static void checkPumpUnreachableAlarm(long lastConnection, boolean isStatusOutdated) { public static void checkPumpUnreachableAlarm(long lastConnection, boolean isStatusOutdated, boolean isDisconnected) {
boolean alarmTimeoutExpired = lastConnection + pumpUnreachableThreshold() < System.currentTimeMillis(); boolean alarmTimeoutExpired = lastConnection + pumpUnreachableThreshold() < System.currentTimeMillis();
boolean nextAlarmOccurrenceReached = SP.getLong("nextPumpDisconnectedAlarm", 0L) < System.currentTimeMillis(); boolean nextAlarmOccurrenceReached = SP.getLong("nextPumpDisconnectedAlarm", 0L) < System.currentTimeMillis();
if (Config.APS && SP.getBoolean(MainApp.gs(R.string.key_enable_pump_unreachable_alert), true) if (Config.APS && SP.getBoolean(MainApp.gs(R.string.key_enable_pump_unreachable_alert), true)
&& isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached && !LoopPlugin.getPlugin().isDisconnected()) { && isStatusOutdated && alarmTimeoutExpired && nextAlarmOccurrenceReached && !isDisconnected) {
log.debug("Generating pump unreachable alarm. lastConnection: " + DateUtil.dateAndTimeString(lastConnection) + " isStatusOutdated: " + isStatusOutdated); log.debug("Generating pump unreachable alarm. lastConnection: " + DateUtil.dateAndTimeString(lastConnection) + " isStatusOutdated: " + isStatusOutdated);
Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.gs(R.string.pump_unreachable), Notification.URGENT); Notification n = new Notification(Notification.PUMP_UNREACHABLE, MainApp.gs(R.string.pump_unreachable), Notification.URGENT);
n.soundId = R.raw.alarm; n.soundId = R.raw.alarm;