LoopPlugin injection
This commit is contained in:
parent
4fff1f42c1
commit
c16131bfc8
11 changed files with 63 additions and 56 deletions
|
@ -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 ?: ""
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -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()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue