()
var textLog: Spanned = HtmlHelper.fromHtml("")
- operator fun CompositeDisposable.plusAssign(disposable: Disposable) {
- add(disposable)
- }
-
override fun onStart() {
super.onStart()
disposable += RxBus
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java
index addc6517ec..1f1dd90463 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/ActionStringHandler.java
@@ -69,12 +69,6 @@ public class ActionStringHandler {
private static String lastConfirmActionString = null;
private static BolusWizard lastBolusWizard = null;
- private static HandlerThread handlerThread = new HandlerThread(FillDialog.class.getSimpleName());
-
- static {
- handlerThread.start();
- }
-
public synchronized static void handleInitiate(String actionstring) {
if (!SP.getBoolean("wearcontrol", false)) return;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/WearPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/WearPlugin.java
index 69e327a21b..53b421ace3 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/WearPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/wear/WearPlugin.java
@@ -91,6 +91,7 @@ public class WearPlugin extends PluginBase {
protected void onStop() {
MainApp.bus().unregister(this);
disposable.clear();
+ super.onStop();
}
private void sendDataToWatch(boolean status, boolean basals, boolean bgValue) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobThread.java b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobThread.java
index 943637fd4e..4694685ea6 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobThread.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/IobCobThread.java
@@ -22,6 +22,7 @@ import info.nightscout.androidaps.events.Event;
import info.nightscout.androidaps.interfaces.PluginType;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.aps.openAPSSMB.SMBDefaults;
+import info.nightscout.androidaps.plugins.bus.RxBus;
import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin;
import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions;
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
@@ -312,6 +313,7 @@ public class IobCobThread extends Thread {
new Thread(() -> {
SystemClock.sleep(1000);
MainApp.bus().post(new EventAutosensCalculationFinished(cause));
+ RxBus.INSTANCE.send(new EventAutosensCalculationFinished(cause));
}).start();
} finally {
if (mWakeLock != null)
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/events/EventAutosensCalculationFinished.java b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/events/EventAutosensCalculationFinished.java
deleted file mode 100644
index 25622843e7..0000000000
--- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/events/EventAutosensCalculationFinished.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package info.nightscout.androidaps.plugins.iob.iobCobCalculator.events;
-
-import info.nightscout.androidaps.events.Event;
-import info.nightscout.androidaps.events.EventLoop;
-
-/**
- * Created by mike on 30.04.2017.
- */
-
-public class EventAutosensCalculationFinished extends EventLoop {
- public Event cause;
-
- public EventAutosensCalculationFinished(Event cause) {
- this.cause = cause;
- }
-}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/events/EventAutosensCalculationFinished.kt b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/events/EventAutosensCalculationFinished.kt
new file mode 100644
index 0000000000..aa96aaf0b0
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/events/EventAutosensCalculationFinished.kt
@@ -0,0 +1,6 @@
+package info.nightscout.androidaps.plugins.iob.iobCobCalculator.events
+
+import info.nightscout.androidaps.events.Event
+import info.nightscout.androidaps.events.EventLoop
+
+class EventAutosensCalculationFinished(var cause: Event) : EventLoop()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt
index 56abf0008c..7a76283074 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfileFragment.kt
@@ -90,9 +90,9 @@ class NSProfileFragment : Fragment() {
}
}
}
- updateGUI()
}
+ @Synchronized
override fun onResume() {
super.onResume()
disposable.add(RxBus
@@ -104,14 +104,18 @@ class NSProfileFragment : Fragment() {
FabricPrivacy.logException(it)
})
)
+ updateGUI()
}
+ @Synchronized
override fun onPause() {
super.onPause()
disposable.clear()
}
+ @Synchronized
fun updateGUI() {
+ if (profileview_noprofile == null) return
profileview_noprofile.visibility = View.VISIBLE
NSProfilePlugin.getPlugin().profile?.let { profileStore ->
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfilePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfilePlugin.java
index 88faee377a..a6088f5515 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfilePlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/profile/ns/NSProfilePlugin.java
@@ -65,6 +65,7 @@ public class NSProfilePlugin extends PluginBase implements ProfileInterface {
@Override
protected void onStop() {
MainApp.bus().unregister(this);
+ super.onStop();
}
public void handleNewData(Intent intent) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.java
index 3deda538be..fa68e55616 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/PumpPluginAbstract.java
@@ -100,6 +100,7 @@ public abstract class PumpPluginAbstract extends PluginBase implements PumpInter
serviceRunning = false;
MainApp.bus().unregister(this);
+ super.onStop();
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/DoseStepSize.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/DoseStepSize.java
index c22f73ab3d..86a67ffc3d 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/DoseStepSize.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/DoseStepSize.java
@@ -4,8 +4,7 @@ package info.nightscout.androidaps.plugins.pump.common.defs;
* Created by andy on 02/05/2018.
*/
-public enum DoseStepSize
-{
+public enum DoseStepSize {
ComboBasal( //
new DoseStepSizeEntry(0f, 1f, 0.01f), //
@@ -26,28 +25,25 @@ public enum DoseStepSize
new DoseStepSizeEntry(0f, 1f, 0.025f), //
new DoseStepSizeEntry(1f, 10f, 0.05f), //
new DoseStepSizeEntry(10f, Double.MAX_VALUE, 0.1f)), //
-
;
DoseStepSizeEntry[] entries;
- DoseStepSize(DoseStepSizeEntry...entries)
- {
+ DoseStepSize(DoseStepSizeEntry... entries) {
this.entries = entries;
}
- public double getStepSizeForAmount(double amount)
- {
+ public double getStepSizeForAmount(double amount) {
for (DoseStepSizeEntry entry : entries) {
if (entry.from <= amount && entry.to > amount)
return entry.value;
}
// should never come to this
- return entries[entries.length-1].value;
+ return entries[entries.length - 1].value;
}
@@ -61,12 +57,9 @@ public enum DoseStepSize
sb.append(entry.from);
sb.append("-");
- if (entry.to == Double.MAX_VALUE)
- {
+ if (entry.to == Double.MAX_VALUE) {
sb.append("~}");
- }
- else
- {
+ } else {
sb.append(entry.to);
sb.append("}, ");
}
@@ -76,15 +69,13 @@ public enum DoseStepSize
}
- static class DoseStepSizeEntry
- {
+ static class DoseStepSizeEntry {
double from;
double to;
double value;
// to = this value is not included, but would actually mean <, so for rates between 0.025-0.975 u/h, we would have [from=0, to=10]
- DoseStepSizeEntry(double from, double to, double value)
- {
+ DoseStepSizeEntry(double from, double to, double value) {
this.from = from;
this.to = to;
this.value = value;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.java
index e031cdde9e..9e47bf71dd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/defs/PumpType.java
@@ -13,7 +13,7 @@ import info.nightscout.androidaps.utils.Round;
/**
* Created by andy on 02/05/2018.
- *
+ *
* Most of this defintions is intended for VirtualPump only, but they can be used by other plugins.
*/
@@ -60,7 +60,7 @@ public enum PumpType {
0.02d, 0.01d, DoseStepSize.InsightBolus, PumpCapability.InsightCapabilities), //
// Animas
- AnimasVibe("Animas Vibe",ManufacturerType.Animas, "Vibe", 0.05d, null, // AnimasBolus?
+ AnimasVibe("Animas Vibe", ManufacturerType.Animas, "Vibe", 0.05d, null, // AnimasBolus?
new DoseSettings(0.05d, 30, 12 * 60, 0.05d), //
PumpTempBasalType.Percent, //
new DoseSettings(10, 30, 24 * 60, 0d, 300d), PumpCapability.BasalRate_Duration30minAllowed, //
@@ -101,7 +101,7 @@ public enum PumpType {
Medtronic_512_712("Medtronic 512/712", ManufacturerType.Medtronic, "512/712", 0.1d, null, //
new DoseSettings(0.05d, 30, 8 * 60, 0.05d), //
PumpTempBasalType.Absolute, //
- new DoseSettings(0.05d, 30, 24*60, 0d, 35d), PumpCapability.BasalRate_Duration30minAllowed, //
+ new DoseSettings(0.05d, 30, 24 * 60, 0d, 35d), PumpCapability.BasalRate_Duration30minAllowed, //
0.05d, 0.05d, null, PumpCapability.MedtronicCapabilities), //
Medtronic_515_715("Medtronic 515/715", "515/715", Medtronic_512_712),
@@ -110,7 +110,7 @@ public enum PumpType {
Medtronic_523_723_Revel("Medtronic 523/723 (Revel)", ManufacturerType.Medtronic, "523/723 (Revel)", 0.05d, null, //
new DoseSettings(0.05d, 30, 8 * 60, 0.05d), //
PumpTempBasalType.Absolute, //
- new DoseSettings(0.05d, 30, 24*60, 0d, 35d), PumpCapability.BasalRate_Duration30minAllowed, //
+ new DoseSettings(0.05d, 30, 24 * 60, 0d, 35d), PumpCapability.BasalRate_Duration30minAllowed, //
0.025d, 0.025d, DoseStepSize.MedtronicVeoBasal, PumpCapability.MedtronicCapabilities), //
Medtronic_554_754_Veo("Medtronic 554/754 (Veo)", "554/754 (Veo)", Medtronic_523_723_Revel), // TODO
@@ -133,8 +133,7 @@ public enum PumpType {
TandemTSlimX2("Tandem t:slim X2", "t:slim X2", TandemTSlim), //
// MDI
- MDI("MDI", ManufacturerType.AndroidAPS, "MDI")
- ;
+ MDI("MDI", ManufacturerType.AndroidAPS, "MDI");
private String description;
@@ -164,24 +163,21 @@ public enum PumpType {
}
- PumpType(String description, String model, PumpType parent)
- {
+ PumpType(String description, String model, PumpType parent) {
this.description = description;
this.parent = parent;
this.model = model;
}
- PumpType(String description, ManufacturerType manufacturer, String model)
- {
+ PumpType(String description, ManufacturerType manufacturer, String model) {
this.description = description;
this.manufacturer = manufacturer;
this.model = model;
}
- PumpType(String description, String model, PumpType parent, PumpCapability pumpCapability)
- {
+ PumpType(String description, String model, PumpType parent, PumpCapability pumpCapability) {
this.description = description;
this.parent = parent;
this.pumpCapability = pumpCapability;
@@ -190,9 +186,8 @@ public enum PumpType {
PumpType(String description, ManufacturerType manufacturer, String model, double bolusSize, DoseStepSize specialBolusSize, //
DoseSettings extendedBolusSettings, //
- PumpTempBasalType pumpTempBasalType, DoseSettings tbrSettings, PumpCapability specialBasalDurations, //
- double baseBasalMinValue, double baseBasalStep, DoseStepSize baseBasalSpecialSteps, PumpCapability pumpCapability)
- {
+ PumpTempBasalType pumpTempBasalType, DoseSettings tbrSettings, PumpCapability specialBasalDurations, //
+ double baseBasalMinValue, double baseBasalStep, DoseStepSize baseBasalSpecialSteps, PumpCapability pumpCapability) {
this(description, manufacturer, model, bolusSize, specialBolusSize, extendedBolusSettings, pumpTempBasalType, tbrSettings, specialBasalDurations, baseBasalMinValue, null, baseBasalStep, baseBasalSpecialSteps, pumpCapability);
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkConst.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkConst.java
index 1f6f9c7541..bff2a39240 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkConst.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/RileyLinkConst.java
@@ -31,7 +31,7 @@ public class RileyLinkConst {
//public static final String PrefPrefix = "pref_rileylink_";
//public static final String RileyLinkAddress = PrefPrefix + "mac_address"; // pref_rileylink_mac_address
- public static final int RileyLinkAddress = R.string.pref_key_rileylink_mac_address;
+ public static final int RileyLinkAddress = R.string.key_rileylink_mac_address;
public static final String LastGoodDeviceCommunicationTime = Prefix + "lastGoodDeviceCommunicationTime";
public static final String LastGoodDeviceFrequency = Prefix + "LastGoodDeviceFrequency";
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java
index 2911d97d67..1fb24821e1 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/RFSpy.java
@@ -367,7 +367,7 @@ public class RFSpy {
RileyLinkEncodingType encoding = RileyLinkEncodingType.FourByteSixByteLocal;
if (RileyLinkFirmwareVersion.isSameVersion(this.firmwareVersion, RileyLinkFirmwareVersion.Version2AndHigher)) {
- if (SP.getString(MedtronicConst.Prefs.Encoding, "None").equals(MainApp.gs(R.string.medtronic_pump_encoding_4b6b_rileylink))) {
+ if (SP.getString(MedtronicConst.Prefs.Encoding, "None").equals(MainApp.gs(R.string.key_medtronic_pump_encoding_4b6b_rileylink))) {
encoding = RileyLinkEncodingType.FourByteSixByteRileyLink;
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java
index 64691c924f..5482e224e3 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/common/hw/rileylink/ble/defs/RileyLinkEncodingType.java
@@ -10,8 +10,8 @@ public enum RileyLinkEncodingType {
None(0x00, null), // No encoding on RL
Manchester(0x01, null), // Manchester encoding on RL (for Omnipod)
- FourByteSixByteRileyLink(0x02, R.string.medtronic_pump_encoding_4b6b_rileylink), // 4b6b encoding on RL (for Medtronic)
- FourByteSixByteLocal(0x00, R.string.medtronic_pump_encoding_4b6b_local), // No encoding on RL, but 4b6b encoding in code
+ FourByteSixByteRileyLink(0x02, R.string.key_medtronic_pump_encoding_4b6b_rileylink), // 4b6b encoding on RL (for Medtronic)
+ FourByteSixByteLocal(0x00, R.string.key_medtronic_pump_encoding_4b6b_local), // No encoding on RL, but 4b6b encoding in code
;
public byte value;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRFragment.kt
index 377e417274..b01bb22104 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRFragment.kt
@@ -27,13 +27,9 @@ import info.nightscout.androidaps.plugins.pump.danaRKorean.DanaRKoreanPlugin
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.plugins.treatments.fragments.ProfileViewerDialog
import info.nightscout.androidaps.queue.events.EventQueueChanged
-import info.nightscout.androidaps.utils.DateUtil
-import info.nightscout.androidaps.utils.FabricPrivacy
-import info.nightscout.androidaps.utils.SetWarnColor
-import info.nightscout.androidaps.utils.T
+import info.nightscout.androidaps.utils.*
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
-import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.danar_fragment.*
import org.slf4j.LoggerFactory
@@ -41,10 +37,6 @@ class DanaRFragment : Fragment() {
private val log = LoggerFactory.getLogger(L.PUMP)
private var disposable: CompositeDisposable = CompositeDisposable()
- operator fun CompositeDisposable.plusAssign(disposable: Disposable) {
- add(disposable)
- }
-
private val loopHandler = Handler()
private lateinit var refreshLoop: Runnable
@@ -84,9 +76,9 @@ class DanaRFragment : Fragment() {
DanaRPump.getInstance().lastConnection = 0
ConfigBuilderPlugin.getPlugin().commandQueue.readStatus("Clicked connect to pump", null)
}
- updateGUI()
}
+ @Synchronized
override fun onResume() {
super.onResume()
MainApp.bus().register(this)
@@ -95,8 +87,10 @@ class DanaRFragment : Fragment() {
.toObservable(EventDanaRNewStatus::class.java)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ updateGUI() }, { FabricPrivacy.logException(it) })
+ updateGUI()
}
+ @Synchronized
override fun onPause() {
super.onPause()
disposable.clear()
@@ -105,38 +99,40 @@ class DanaRFragment : Fragment() {
}
@Subscribe
- public fun onStatusEvent(c: EventPumpStatusChanged) {
+ fun onStatusEvent(c: EventPumpStatusChanged) {
activity?.runOnUiThread {
when {
- c.sStatus == EventPumpStatusChanged.CONNECTING -> danar_btconnection.text = "{fa-bluetooth-b spin} " + c.sSecondsElapsed + "s"
- c.sStatus == EventPumpStatusChanged.CONNECTED -> danar_btconnection.text = "{fa-bluetooth}"
- c.sStatus == EventPumpStatusChanged.DISCONNECTED -> danar_btconnection.text = "{fa-bluetooth-b}"
+ c.sStatus == EventPumpStatusChanged.CONNECTING -> danar_btconnection?.text = "{fa-bluetooth-b spin} " + c.sSecondsElapsed + "s"
+ c.sStatus == EventPumpStatusChanged.CONNECTED -> danar_btconnection?.text = "{fa-bluetooth}"
+ c.sStatus == EventPumpStatusChanged.DISCONNECTED -> danar_btconnection?.text = "{fa-bluetooth-b}"
}
if (c.textStatus() != "") {
- dana_pumpstatus.text = c.textStatus()
- dana_pumpstatuslayout.visibility = View.VISIBLE
+ dana_pumpstatus?.text = c.textStatus()
+ dana_pumpstatuslayout?.visibility = View.VISIBLE
} else {
- dana_pumpstatuslayout.visibility = View.GONE
+ dana_pumpstatuslayout?.visibility = View.GONE
}
}
}
@Subscribe
- public fun onStatusEvent(s: EventTempBasalChange) =
+ fun onStatusEvent(s: EventTempBasalChange) =
activity?.runOnUiThread { updateGUI() }
@Subscribe
- public fun onStatusEvent(s: EventExtendedBolusChange) =
+ fun onStatusEvent(s: EventExtendedBolusChange) =
activity?.runOnUiThread { updateGUI() }
@Subscribe
- public fun onStatusEvent(s: EventQueueChanged) =
+ fun onStatusEvent(s: EventQueueChanged) =
activity?.runOnUiThread { updateGUI() }
// GUI functions
+ @Synchronized
internal fun updateGUI() {
+ if (danar_dailyunits == null) return
val pump = DanaRPump.getInstance()
val plugin: PumpInterface = ConfigBuilderPlugin.getPlugin().activePump ?: return
if (pump.lastConnection != 0L) {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRPlugin.java
index 80d0390390..6a01c5fed8 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/DanaRPlugin.java
@@ -65,6 +65,7 @@ public class DanaRPlugin extends AbstractDanaRPlugin {
context.unbindService(mConnection);
MainApp.bus().unregister(this);
+ super.onStop();
}
private ServiceConnection mConnection = new ServiceConnection() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java
index dd28c632a7..2d31510e71 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java
@@ -1,12 +1,6 @@
package info.nightscout.androidaps.plugins.pump.danaR.activities;
-import android.app.Activity;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
-import androidx.cardview.widget.CardView;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -16,6 +10,11 @@ import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.cardview.widget.CardView;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
@@ -47,14 +46,11 @@ import info.nightscout.androidaps.utils.ToastUtils;
public class DanaRHistoryActivity extends NoSplashActivity {
private static Logger log = LoggerFactory.getLogger(L.PUMP);
- private Handler mHandler;
-
static Profile profile = null;
Spinner historyTypeSpinner;
TextView statusView;
Button reloadButton;
- Button syncButton;
RecyclerView recyclerView;
LinearLayoutManager llm;
@@ -70,6 +66,7 @@ public class DanaRHistoryActivity extends NoSplashActivity {
this.name = name;
}
+ @NonNull
@Override
public String toString() {
return name;
@@ -78,9 +75,6 @@ public class DanaRHistoryActivity extends NoSplashActivity {
public DanaRHistoryActivity() {
super();
- HandlerThread mHandlerThread = new HandlerThread(DanaRHistoryActivity.class.getSimpleName());
- mHandlerThread.start();
- this.mHandler = new Handler(mHandlerThread.getLooper());
}
@@ -101,11 +95,10 @@ public class DanaRHistoryActivity extends NoSplashActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.danar_historyactivity);
- historyTypeSpinner = (Spinner) findViewById(R.id.danar_historytype);
- statusView = (TextView) findViewById(R.id.danar_historystatus);
- reloadButton = (Button) findViewById(R.id.danar_historyreload);
- syncButton = (Button) findViewById(R.id.danar_historysync);
- recyclerView = (RecyclerView) findViewById(R.id.danar_history_recyclerview);
+ historyTypeSpinner = findViewById(R.id.danar_historytype);
+ statusView = findViewById(R.id.danar_historystatus);
+ reloadButton = findViewById(R.id.danar_historyreload);
+ recyclerView = findViewById(R.id.danar_history_recyclerview);
recyclerView.setHasFixedSize(true);
llm = new LinearLayoutManager(this);
@@ -145,7 +138,6 @@ public class DanaRHistoryActivity extends NoSplashActivity {
final TypeList selected = (TypeList) historyTypeSpinner.getSelectedItem();
runOnUiThread(() -> {
reloadButton.setVisibility(View.GONE);
- syncButton.setVisibility(View.GONE);
statusView.setVisibility(View.VISIBLE);
});
clearCardView();
@@ -155,37 +147,12 @@ public class DanaRHistoryActivity extends NoSplashActivity {
loadDataFromDB(selected.type);
runOnUiThread(() -> {
reloadButton.setVisibility(View.VISIBLE);
- syncButton.setVisibility(View.VISIBLE);
statusView.setVisibility(View.GONE);
});
}
});
});
- syncButton.setOnClickListener(v -> mHandler.post(new Runnable() {
- @Override
- public void run() {
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- reloadButton.setVisibility(View.GONE);
- syncButton.setVisibility(View.GONE);
- statusView.setVisibility(View.VISIBLE);
- }
- });
- DanaRNSHistorySync sync = new DanaRNSHistorySync(historyList);
- sync.sync(DanaRNSHistorySync.SYNC_ALL);
- runOnUiThread(new Runnable() {
- @Override
- public void run() {
- reloadButton.setVisibility(View.VISIBLE);
- syncButton.setVisibility(View.VISIBLE);
- statusView.setVisibility(View.GONE);
- }
- });
- }
- }));
-
historyTypeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView> parent, View view, int position, long id) {
@@ -214,14 +181,15 @@ public class DanaRHistoryActivity extends NoSplashActivity {
this.historyList = historyList;
}
+ @NonNull
@Override
- public HistoryViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
+ public HistoryViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.danar_history_item, viewGroup, false);
return new HistoryViewHolder(v);
}
@Override
- public void onBindViewHolder(HistoryViewHolder holder, int position) {
+ public void onBindViewHolder(@NonNull HistoryViewHolder holder, int position) {
DanaRHistoryRecord record = historyList.get(position);
holder.time.setText(DateUtil.dateAndTimeString(record.recordDate));
holder.value.setText(DecimalFormatter.to2Decimal(record.recordValue));
@@ -306,7 +274,7 @@ public class DanaRHistoryActivity extends NoSplashActivity {
}
@Override
- public void onAttachedToRecyclerView(RecyclerView recyclerView) {
+ public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
@@ -324,16 +292,16 @@ public class DanaRHistoryActivity extends NoSplashActivity {
HistoryViewHolder(View itemView) {
super(itemView);
- cv = (CardView) itemView.findViewById(R.id.danar_history_cardview);
- time = (TextView) itemView.findViewById(R.id.danar_history_time);
- value = (TextView) itemView.findViewById(R.id.danar_history_value);
- bolustype = (TextView) itemView.findViewById(R.id.danar_history_bolustype);
- stringvalue = (TextView) itemView.findViewById(R.id.danar_history_stringvalue);
- duration = (TextView) itemView.findViewById(R.id.danar_history_duration);
- dailybasal = (TextView) itemView.findViewById(R.id.danar_history_dailybasal);
- dailybolus = (TextView) itemView.findViewById(R.id.danar_history_dailybolus);
- dailytotal = (TextView) itemView.findViewById(R.id.danar_history_dailytotal);
- alarm = (TextView) itemView.findViewById(R.id.danar_history_alarm);
+ cv = itemView.findViewById(R.id.danar_history_cardview);
+ time = itemView.findViewById(R.id.danar_history_time);
+ value = itemView.findViewById(R.id.danar_history_value);
+ bolustype = itemView.findViewById(R.id.danar_history_bolustype);
+ stringvalue = itemView.findViewById(R.id.danar_history_stringvalue);
+ duration = itemView.findViewById(R.id.danar_history_duration);
+ dailybasal = itemView.findViewById(R.id.danar_history_dailybasal);
+ dailybolus = itemView.findViewById(R.id.danar_history_dailybolus);
+ dailytotal = itemView.findViewById(R.id.danar_history_dailytotal);
+ alarm = itemView.findViewById(R.id.danar_history_alarm);
}
}
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRKorean/DanaRKoreanPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRKorean/DanaRKoreanPlugin.java
index 07df7fb29f..64eccf05f1 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRKorean/DanaRKoreanPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRKorean/DanaRKoreanPlugin.java
@@ -68,6 +68,7 @@ public class DanaRKoreanPlugin extends AbstractDanaRPlugin {
context.unbindService(mConnection);
MainApp.bus().unregister(this);
+ super.onStop();
}
private ServiceConnection mConnection = new ServiceConnection() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRS/DanaRSPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRS/DanaRSPlugin.java
index 1e38ccc312..19005509cb 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRS/DanaRSPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRS/DanaRSPlugin.java
@@ -123,6 +123,7 @@ public class DanaRSPlugin extends PluginBase implements PumpInterface, DanaRInte
context.unbindService(mConnection);
MainApp.bus().unregister(this);
+ super.onStop();
}
@Override
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRv2/DanaRv2Plugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRv2/DanaRv2Plugin.java
index 65fb602ff4..607f7346b6 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRv2/DanaRv2Plugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaRv2/DanaRv2Plugin.java
@@ -71,6 +71,7 @@ public class DanaRv2Plugin extends AbstractDanaRPlugin {
context.unbindService(mConnection);
MainApp.bus().unregister(this);
+ super.onStop();
}
private ServiceConnection mConnection = new ServiceConnection() {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt
index 2efafde16c..d60a639106 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicFragment.kt
@@ -35,13 +35,9 @@ import info.nightscout.androidaps.plugins.pump.medtronic.util.MedtronicUtil
import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin
import info.nightscout.androidaps.queue.Callback
import info.nightscout.androidaps.queue.events.EventQueueChanged
-import info.nightscout.androidaps.utils.DateUtil
-import info.nightscout.androidaps.utils.FabricPrivacy
-import info.nightscout.androidaps.utils.SetWarnColor
-import info.nightscout.androidaps.utils.T
+import info.nightscout.androidaps.utils.*
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
-import io.reactivex.disposables.Disposable
import kotlinx.android.synthetic.main.medtronic_fragment.*
import org.slf4j.LoggerFactory
@@ -50,10 +46,6 @@ class MedtronicFragment : Fragment() {
private val log = LoggerFactory.getLogger(L.PUMP)
private var disposable: CompositeDisposable = CompositeDisposable()
- operator fun CompositeDisposable.plusAssign(disposable: Disposable) {
- add(disposable)
- }
-
private val loopHandler = Handler()
private lateinit var refreshLoop: Runnable
@@ -94,7 +86,7 @@ class MedtronicFragment : Fragment() {
MedtronicPumpPlugin.getPlugin().resetStatusState()
ConfigBuilderPlugin.getPlugin().commandQueue.readStatus("Clicked refresh", object : Callback() {
override fun run() {
- activity?.runOnUiThread { medtronic_refresh.isEnabled = true }
+ activity?.runOnUiThread { medtronic_refresh?.isEnabled = true }
}
})
}
@@ -107,10 +99,9 @@ class MedtronicFragment : Fragment() {
MedtronicUtil.displayNotConfiguredDialog(context)
}
}
-
- updateGUI()
}
+ @Synchronized
override fun onResume() {
super.onResume()
MainApp.bus().register(this)
@@ -140,8 +131,11 @@ class MedtronicFragment : Fragment() {
MedtronicUtil.getPumpStatus().verifyConfiguration()
updateGUI()
}, { FabricPrivacy.logException(it) })
+
+ updateGUI()
}
+ @Synchronized
override fun onPause() {
super.onPause()
disposable.clear()
@@ -249,7 +243,9 @@ class MedtronicFragment : Fragment() {
}
// GUI functions
+ @Synchronized
fun updateGUI() {
+ if (medtronic_rl_status == null) return
val plugin = MedtronicPumpPlugin.getPlugin()
val pumpStatus = MedtronicUtil.getPumpStatus()
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java
index 064ad3b1e0..f8568299d5 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/MedtronicPumpPlugin.java
@@ -212,17 +212,17 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
private void migrateSettings() {
if ("US (916 MHz)".equals(SP.getString(MedtronicConst.Prefs.PumpFrequency, null))) {
- SP.putString(MedtronicConst.Prefs.PumpFrequency, MainApp.gs(R.string.medtronic_pump_frequency_us_ca));
+ SP.putString(MedtronicConst.Prefs.PumpFrequency, MainApp.gs(R.string.key_medtronic_pump_frequency_us_ca));
}
String encoding = SP.getString(MedtronicConst.Prefs.Encoding, null);
if ("RileyLink 4b6b Encoding".equals(encoding)) {
- SP.putString(MedtronicConst.Prefs.Encoding, MainApp.gs(R.string.medtronic_pump_encoding_4b6b_rileylink));
+ SP.putString(MedtronicConst.Prefs.Encoding, MainApp.gs(R.string.key_medtronic_pump_encoding_4b6b_rileylink));
}
if ("Local 4b6b Encoding".equals(encoding)) {
- SP.putString(MedtronicConst.Prefs.Encoding, MainApp.gs(R.string.medtronic_pump_encoding_4b6b_local));
+ SP.putString(MedtronicConst.Prefs.Encoding, MainApp.gs(R.string.key_medtronic_pump_encoding_4b6b_local));
}
}
@@ -791,6 +791,17 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
setRefreshButtonEnabled(false);
+ MedtronicPumpStatus mdtPumpStatus = getMDTPumpStatus();
+
+ if (detailedBolusInfo.insulin > mdtPumpStatus.reservoirRemainingUnits) {
+ return new PumpEnactResult() //
+ .success(false) //
+ .enacted(false) //
+ .comment(MainApp.gs(R.string.medtronic_cmd_bolus_could_not_be_delivered_no_insulin,
+ mdtPumpStatus.reservoirRemainingUnits,
+ detailedBolusInfo.insulin));
+ }
+
bolusDeliveryType = BolusDeliveryType.DeliveryPrepared;
if (isPumpNotReachable()) {
@@ -1051,6 +1062,21 @@ public class MedtronicPumpPlugin extends PumpPluginAbstract implements PumpInter
}
+ @Override
+ public PumpEnactResult setTempBasalPercent(Integer percent, Integer durationInMinutes, Profile profile,
+ boolean enforceNew) {
+ if (percent==0) {
+ return setTempBasalAbsolute(0.0d, durationInMinutes, profile, enforceNew);
+ } else {
+ double absoluteValue = profile.getBasal() * (percent /100.0d);
+ getMDTPumpStatus();
+ absoluteValue = pumpStatusLocal.pumpType.determineCorrectBasalSize(absoluteValue);
+ LOG.warn("setTempBasalPercent [MedtronicPumpPlugin] - You are trying to use setTempBasalPercent with percent other then 0% (%d). This will start setTempBasalAbsolute, with calculated value (%.3f). Result might not be 100% correct.", percent, absoluteValue);
+ return setTempBasalAbsolute(absoluteValue, durationInMinutes, profile, enforceNew);
+ }
+ }
+
+
private void finishAction(String overviewKey) {
if (overviewKey != null)
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/defs/BatteryType.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/defs/BatteryType.java
index ba6e656acc..0d228d43ec 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/defs/BatteryType.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/defs/BatteryType.java
@@ -12,9 +12,9 @@ import info.nightscout.androidaps.R;
public enum BatteryType {
- None(R.string.medtronic_pump_battery_no, 0, 0),
- Alkaline(R.string.medtronic_pump_battery_alkaline, 1.20d, 1.47d), //
- Lithium(R.string.medtronic_pump_battery_lithium, 1.22d, 1.64d);
+ None(R.string.key_medtronic_pump_battery_no, 0, 0),
+ Alkaline(R.string.key_medtronic_pump_battery_alkaline, 1.20d, 1.47d), //
+ Lithium(R.string.key_medtronic_pump_battery_lithium, 1.22d, 1.64d);
private final String description;
public double lowVoltage;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java
index e5cf10f765..9f148ac02e 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java
@@ -1,18 +1,7 @@
package info.nightscout.androidaps.plugins.pump.medtronic.dialog;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import android.app.Activity;
import android.os.Bundle;
-import android.os.Handler;
-import android.os.HandlerThread;
import android.os.SystemClock;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -21,6 +10,15 @@ import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.activities.NoSplashActivity;
@@ -33,10 +31,6 @@ public class MedtronicHistoryActivity extends NoSplashActivity {
private static Logger LOG = LoggerFactory.getLogger(L.PUMP);
- private Handler mHandler;
-
- // static Profile profile = null;
-
Spinner historyTypeSpinner;
TextView statusView;
RecyclerView recyclerView;
@@ -54,10 +48,6 @@ public class MedtronicHistoryActivity extends NoSplashActivity {
public MedtronicHistoryActivity() {
super();
- HandlerThread mHandlerThread = new HandlerThread(MedtronicHistoryActivity.class.getSimpleName());
- mHandlerThread.start();
- filterHistory(PumpHistoryEntryGroup.All);
- this.mHandler = new Handler(mHandlerThread.getLooper());
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/driver/MedtronicPumpStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/driver/MedtronicPumpStatus.java
index 46647e832e..29387b0724 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/driver/MedtronicPumpStatus.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/driver/MedtronicPumpStatus.java
@@ -134,8 +134,8 @@ public class MedtronicPumpStatus extends PumpStatus {
medtronicPumpMap.put("754", PumpType.Medtronic_554_754_Veo);
frequencies = new String[2];
- frequencies[0] = MainApp.gs(R.string.medtronic_pump_frequency_us_ca);
- frequencies[1] = MainApp.gs(R.string.medtronic_pump_frequency_worldwide);
+ frequencies[0] = MainApp.gs(R.string.key_medtronic_pump_frequency_us_ca);
+ frequencies[1] = MainApp.gs(R.string.key_medtronic_pump_frequency_worldwide);
}
@@ -182,6 +182,7 @@ public class MedtronicPumpStatus extends PumpStatus {
} else {
this.pumpType = medtronicPumpMap.get(pumpTypePart);
this.medtronicDeviceType = medtronicDeviceTypeMap.get(pumpTypePart);
+ this.pumpDescription.setPumpDescription(this.pumpType);
if (pumpTypePart.startsWith("7"))
this.reservoirFullUnits = 300;
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicConst.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicConst.java
index d867ec2d31..b5bd2f1f64 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicConst.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/util/MedtronicConst.java
@@ -22,14 +22,14 @@ public class MedtronicConst {
// public static final String Encoding = PrefPrefix + "encoding";
// public static final String BatteryType = PrefPrefix + "battery_type";
- public static final int PumpSerial = R.string.pref_key_medtronic_serial;
- public static final int PumpType = R.string.pref_key_medtronic_pump_type;
- public static final int PumpFrequency = R.string.pref_key_medtronic_frequency;
- public static final int MaxBolus = R.string.pref_key_medtronic_max_bolus;
- public static final int MaxBasal = R.string.pref_key_medtronic_max_basal;
- public static final int BolusDelay = R.string.pref_key_medtronic_bolus_delay;
- public static final int Encoding = R.string.pref_key_medtronic_encoding;
- public static final int BatteryType = R.string.pref_key_medtronic_battery_type;
+ public static final int PumpSerial = R.string.key_medtronic_serial;
+ public static final int PumpType = R.string.key_medtronic_pump_type;
+ public static final int PumpFrequency = R.string.key_medtronic_frequency;
+ public static final int MaxBolus = R.string.key_medtronic_max_bolus;
+ public static final int MaxBasal = R.string.key_medtronic_max_basal;
+ public static final int BolusDelay = R.string.key_medtronic_bolus_delay;
+ public static final int Encoding = R.string.key_medtronic_encoding;
+ public static final int BatteryType = R.string.key_medtronic_battery_type;
}
public class Statistics {
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.java
index 1c2cf1f954..6b561bc41d 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/virtual/VirtualPumpPlugin.java
@@ -128,6 +128,7 @@ public class VirtualPumpPlugin extends PluginBase implements PumpInterface {
@Override
protected void onStop() {
MainApp.bus().unregister(this);
+ super.onStop();
}
@Subscribe
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java
index a9284dd366..c1a26adcbd 100644
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/TreatmentsPlugin.java
@@ -110,6 +110,7 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
@Override
protected void onStop() {
MainApp.bus().register(this);
+ super.onStop();
}
public TreatmentService getService() {
@@ -294,14 +295,19 @@ public class TreatmentsPlugin extends PluginBase implements TreatmentsInterface
}
+ /**
+ * Returns all Treatments after specified timestamp. Also returns invalid entries (required to
+ * map "Fill Canulla" entries to history (and not to add double bolus for it)
+ *
+ * @param fromTimestamp
+ * @return
+ */
@Override
public List getTreatmentsFromHistoryAfterTimestamp(long fromTimestamp) {
List in5minback = new ArrayList<>();
long time = System.currentTimeMillis();
synchronized (treatments) {
for (Treatment t : treatments) {
- if (!t.isValid)
- continue;
if (t.date <= time && t.date >= fromTimestamp)
in5minback.add(t);
}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/dialogs/WizardInfoDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/dialogs/WizardInfoDialog.java
deleted file mode 100644
index e068e094f1..0000000000
--- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/dialogs/WizardInfoDialog.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package info.nightscout.androidaps.plugins.treatments.dialogs;
-
-import android.os.Bundle;
-import androidx.fragment.app.DialogFragment;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.CheckBox;
-import android.widget.TextView;
-
-import org.json.JSONObject;
-
-import info.nightscout.androidaps.R;
-import info.nightscout.androidaps.utils.DecimalFormatter;
-import info.nightscout.androidaps.utils.JsonHelper;
-
-public class WizardInfoDialog extends DialogFragment implements OnClickListener {
- JSONObject json;
-
- public WizardInfoDialog() {
- super();
- }
-
- public void setData(JSONObject json) {
- this.json = json;
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.treatments_wizardinfo_dialog, container, false);
-
- getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
-
- view.findViewById(R.id.ok).setOnClickListener(this);
-
- // BG
- ((TextView) view.findViewById(R.id.treatments_wizard_bg)).setText(DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "bg")) + " ISF: " + DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "isf")));
- ((TextView) view.findViewById(R.id.treatments_wizard_bginsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulinbg")) + "U");
- ((CheckBox) view.findViewById(R.id.treatments_wizard_bgcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "insulinbgused"));
- ((CheckBox) view.findViewById(R.id.treatments_wizard_ttcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "ttused"));
- // Trend
- ((TextView) view.findViewById(R.id.treatments_wizard_bgtrend)).setText(JsonHelper.safeGetString(json, "trend"));
- ((TextView) view.findViewById(R.id.treatments_wizard_bgtrendinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulintrend")) + "U");
- ((CheckBox) view.findViewById(R.id.treatments_wizard_bgtrendcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "trendused"));
- // COB
- ((TextView) view.findViewById(R.id.treatments_wizard_cob)).setText(DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "cob")) + "g IC: " + DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "ic")));
- ((TextView) view.findViewById(R.id.treatments_wizard_cobinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulincob")) + "U");
- ((CheckBox) view.findViewById(R.id.treatments_wizard_cobcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "cobused"));
- // Bolus IOB
- ((TextView) view.findViewById(R.id.treatments_wizard_bolusiobinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "bolusiob")) + "U");
- ((CheckBox) view.findViewById(R.id.treatments_wizard_bolusiobcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "bolusiobused"));
- // Basal IOB
- ((TextView) view.findViewById(R.id.treatments_wizard_basaliobinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "basaliob")) + "U");
- ((CheckBox) view.findViewById(R.id.treatments_wizard_basaliobcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "basaliobused"));
- // Superbolus
- ((TextView) view.findViewById(R.id.treatments_wizard_sbinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulinsuperbolus")) + "U");
- ((CheckBox) view.findViewById(R.id.treatments_wizard_sbcheckbox)).setChecked(JsonHelper.safeGetBoolean(json, "superbolusused"));
- // Carbs
- ((TextView) view.findViewById(R.id.treatments_wizard_carbs)).setText(DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "carbs")) + "g IC: " + DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "ic")));
- ((TextView) view.findViewById(R.id.treatments_wizard_carbsinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulincarbs")) + "U");
- // Correction
- ((TextView) view.findViewById(R.id.treatments_wizard_correctioninsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "othercorrection")) + "U");
- // Profile
- ((TextView) view.findViewById(R.id.treatments_wizard_profile)).setText(JsonHelper.safeGetString(json, "profile"));
- // Notes
- ((TextView) view.findViewById(R.id.treatments_wizard_notes)).setText(JsonHelper.safeGetString(json, "notes"));
- // Total
- ((TextView) view.findViewById(R.id.treatments_wizard_totalinsulin)).setText(DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulin")) + "U");
-
- setCancelable(true);
- return view;
- }
-
- @Override
- public synchronized void onClick(View view) {
- switch (view.getId()) {
- case R.id.ok:
- dismiss();
- break;
- }
- }
-
-}
diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/dialogs/WizardInfoDialog.kt b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/dialogs/WizardInfoDialog.kt
new file mode 100644
index 0000000000..4e77a8f758
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/dialogs/WizardInfoDialog.kt
@@ -0,0 +1,70 @@
+package info.nightscout.androidaps.plugins.treatments.dialogs
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.view.WindowManager
+import androidx.fragment.app.DialogFragment
+import info.nightscout.androidaps.R
+import info.nightscout.androidaps.utils.DecimalFormatter
+import info.nightscout.androidaps.utils.JsonHelper
+import kotlinx.android.synthetic.main.treatments_wizardinfo_dialog.*
+import org.json.JSONObject
+
+class WizardInfoDialog : DialogFragment() {
+ private var json: JSONObject? = null
+
+ fun setData(json: JSONObject) {
+ this.json = json
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?): View? {
+ dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
+ isCancelable = true
+ return inflater.inflate(R.layout.treatments_wizardinfo_dialog, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ close.setOnClickListener { dismiss() }
+
+ // BG
+ treatments_wizard_bg.text = DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "bg")) + " ISF: " + DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "isf"))
+ treatments_wizard_bginsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulinbg")) + "U"
+ treatments_wizard_bgcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "insulinbgused")
+ treatments_wizard_ttcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "ttused")
+ // Trend
+ treatments_wizard_bgtrend.text = JsonHelper.safeGetString(json, "trend")
+ treatments_wizard_bgtrendinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulintrend")) + "U"
+ treatments_wizard_bgtrendcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "trendused")
+ // COB
+ treatments_wizard_cob.text = DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "cob")) + "g IC: " + DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "ic"))
+ treatments_wizard_cobinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulincob")) + "U"
+ treatments_wizard_cobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "cobused")
+ // Bolus IOB
+ treatments_wizard_bolusiobinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "bolusiob")) + "U"
+ treatments_wizard_bolusiobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "bolusiobused")
+ // Basal IOB
+ treatments_wizard_basaliobinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "basaliob")) + "U"
+ treatments_wizard_basaliobcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "basaliobused")
+ // Superbolus
+ treatments_wizard_sbinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulinsuperbolus")) + "U"
+ treatments_wizard_sbcheckbox.isChecked = JsonHelper.safeGetBoolean(json, "superbolusused")
+ // Carbs
+ treatments_wizard_carbs.text = DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "carbs")) + "g IC: " + DecimalFormatter.to1Decimal(JsonHelper.safeGetDouble(json, "ic"))
+ treatments_wizard_carbsinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulincarbs")) + "U"
+ // Correction
+ treatments_wizard_correctioninsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "othercorrection")) + "U"
+ // Profile
+ treatments_wizard_profile.text = JsonHelper.safeGetString(json, "profile")
+ // Notes
+ treatments_wizard_notes.text = JsonHelper.safeGetString(json, "notes")
+ // Percentage
+ treatments_wizard_percent_used.text = DecimalFormatter.to0Decimal(JsonHelper.safeGetDouble(json, "percentageCorrection", 100.0)) + "%"
+ // Total
+ treatments_wizard_totalinsulin.text = DecimalFormatter.to2Decimal(JsonHelper.safeGetDouble(json, "insulin")) + "U"
+ }
+}
diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/ChargingStateReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/ChargingStateReceiver.java
index c6df43e002..d325ee9506 100644
--- a/app/src/main/java/info/nightscout/androidaps/receivers/ChargingStateReceiver.java
+++ b/app/src/main/java/info/nightscout/androidaps/receivers/ChargingStateReceiver.java
@@ -36,7 +36,7 @@ public class ChargingStateReceiver extends BroadcastReceiver {
}
static public boolean isCharging() {
- return lastEvent != null && lastEvent.isCharging;
+ return lastEvent != null && lastEvent.isCharging();
}
static public EventChargingState getLastEvent() {
diff --git a/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.java b/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.java
index 95fd6bfb09..6c2e7c6920 100644
--- a/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.java
+++ b/app/src/main/java/info/nightscout/androidaps/receivers/DataReceiver.java
@@ -1,9 +1,8 @@
package info.nightscout.androidaps.receivers;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import androidx.legacy.content.WakefulBroadcastReceiver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -11,16 +10,15 @@ import org.slf4j.LoggerFactory;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.services.DataService;
-public class DataReceiver extends BroadcastReceiver {
+public class DataReceiver extends WakefulBroadcastReceiver {
private static Logger log = LoggerFactory.getLogger(L.DATASERVICE);
@Override
public void onReceive(Context context, Intent intent) {
if (L.isEnabled(L.DATASERVICE))
log.debug("onReceive " + intent);
- // Explicitly specify that GcmIntentService will handle the intent.
- ComponentName comp = new ComponentName(context.getPackageName(),
- DataService.class.getName());
- DataService.enqueueWork(context, intent.setComponent(comp));
+ startWakefulService(context, new Intent(context, DataService.class)
+ .setAction(intent.getAction())
+ .putExtras(intent));
}
}
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 24a7698e9a..6b8ac46f11 100644
--- a/app/src/main/java/info/nightscout/androidaps/services/DataService.java
+++ b/app/src/main/java/info/nightscout/androidaps/services/DataService.java
@@ -1,13 +1,10 @@
package info.nightscout.androidaps.services;
-import android.content.Context;
+import android.app.IntentService;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Telephony;
-import androidx.annotation.NonNull;
-import androidx.core.app.JobIntentService;
-
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -19,16 +16,15 @@ import info.nightscout.androidaps.R;
import info.nightscout.androidaps.db.CareportalEvent;
import info.nightscout.androidaps.events.EventNsFood;
import info.nightscout.androidaps.events.EventNsTreatment;
-import info.nightscout.androidaps.logging.BundleLogger;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.general.nsclient.data.NSDeviceStatus;
import info.nightscout.androidaps.plugins.general.nsclient.data.NSMbg;
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus;
import info.nightscout.androidaps.plugins.general.overview.events.EventNewNotification;
import info.nightscout.androidaps.plugins.general.overview.notifications.Notification;
-import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin;
import info.nightscout.androidaps.plugins.profile.ns.NSProfilePlugin;
import info.nightscout.androidaps.plugins.pump.danaR.activities.DanaRNSHistorySync;
+import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin;
import info.nightscout.androidaps.plugins.source.SourceDexcomPlugin;
import info.nightscout.androidaps.plugins.source.SourceEversensePlugin;
import info.nightscout.androidaps.plugins.source.SourceGlimpPlugin;
@@ -38,30 +34,21 @@ import info.nightscout.androidaps.plugins.source.SourcePoctechPlugin;
import info.nightscout.androidaps.plugins.source.SourceTomatoPlugin;
import info.nightscout.androidaps.plugins.source.SourceXdripPlugin;
import info.nightscout.androidaps.receivers.DataReceiver;
+import info.nightscout.androidaps.logging.BundleLogger;
import info.nightscout.androidaps.utils.JsonHelper;
import info.nightscout.androidaps.utils.SP;
-public class DataService extends JobIntentService {
+public class DataService extends IntentService {
private Logger log = LoggerFactory.getLogger(L.DATASERVICE);
- // Service unique ID
- static final int SERVICE_JOB_ID = 4378;
-
- // Enqueuing work in to this service.
- public static void enqueueWork(Context context, Intent work) {
- enqueueWork(context, DataService.class, SERVICE_JOB_ID, work);
+ public DataService() {
+ super("DataService");
+ registerBus();
}
@Override
- public void onDestroy() {
- super.onDestroy();
- if (L.isEnabled(L.DATASERVICE))
- log.debug("All work complete");
- }
-
- @Override
- protected void onHandleWork(@NonNull Intent intent) {
+ protected void onHandleIntent(final Intent intent) {
if (L.isEnabled(L.DATASERVICE)) {
log.debug("onHandleIntent " + intent);
log.debug("onHandleIntent " + BundleLogger.log(intent.getExtras()));
@@ -113,7 +100,7 @@ public class DataService extends JobIntentService {
Intents.ACTION_REMOVED_TREATMENT.equals(action) ||
Intents.ACTION_NEW_CAL.equals(action) ||
Intents.ACTION_NEW_MBG.equals(action))
- ) {
+ ) {
handleNewDataFromNSClient(intent);
} else if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(action)) {
SmsCommunicatorPlugin.getPlugin().handleNewData(intent);
@@ -121,6 +108,22 @@ public class DataService extends JobIntentService {
if (L.isEnabled(L.DATASERVICE))
log.debug("onHandleIntent exit " + intent);
+ DataReceiver.completeWakefulIntent(intent);
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ MainApp.bus().unregister(this);
+ }
+
+ private void registerBus() {
+ try {
+ MainApp.bus().unregister(this);
+ } catch (RuntimeException x) {
+ // Ignore
+ }
+ MainApp.bus().register(this);
}
private void handleNewDataFromNSClient(Intent intent) {
diff --git a/app/src/main/java/info/nightscout/androidaps/services/LocationService.java b/app/src/main/java/info/nightscout/androidaps/services/LocationService.java
index feec4dcab8..33f92d770a 100644
--- a/app/src/main/java/info/nightscout/androidaps/services/LocationService.java
+++ b/app/src/main/java/info/nightscout/androidaps/services/LocationService.java
@@ -11,10 +11,14 @@ import android.os.IBinder;
import androidx.core.app.ActivityCompat;
+import com.squareup.otto.Subscribe;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
+import info.nightscout.androidaps.events.EventAppExit;
import info.nightscout.androidaps.events.EventLocationChange;
import info.nightscout.androidaps.logging.L;
import info.nightscout.androidaps.plugins.bus.RxBus;
@@ -80,12 +84,14 @@ public class LocationService extends Service {
super.onStartCommand(intent, flags, startId);
if (L.isEnabled(L.LOCATION))
log.debug("onStartCommand");
- startForeground(PersistentNotificationPlugin.ONGOING_NOTIFICATION_ID, PersistentNotificationPlugin.getPlugin().updateNotification());
+ startForeground(PersistentNotificationPlugin.ONGOING_NOTIFICATION_ID, PersistentNotificationPlugin.getPlugin().getLastNotification());
return START_STICKY;
}
@Override
public void onCreate() {
+ super.onCreate();
+ startForeground(PersistentNotificationPlugin.ONGOING_NOTIFICATION_ID, PersistentNotificationPlugin.getPlugin().getLastNotification());
if (L.isEnabled(L.LOCATION))
log.debug("onCreate");
@@ -119,6 +125,7 @@ public class LocationService extends Service {
} catch (IllegalArgumentException ex) {
log.error("network provider does not exist, " + ex.getMessage());
}
+ MainApp.bus().register(this);
}
@Override
@@ -136,6 +143,15 @@ public class LocationService extends Service {
log.error("fail to remove location listener, ignore", ex);
}
}
+ MainApp.bus().unregister(this);
+ }
+
+ @Subscribe
+ public void onStatusEvent(EventAppExit event) {
+ if (L.isEnabled(L.CORE))
+ log.debug("EventAppExit received");
+
+ stopSelf();
}
private void initializeLocationManager() {
diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java
index 46f7fcf185..cbc0af6491 100644
--- a/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java
+++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/SWDefinition.java
@@ -202,8 +202,6 @@ public class SWDefinition {
private SWScreen screenAge = new SWScreen(R.string.patientage)
.skippable(false)
- .add(new SWInfotext()
- .label(R.string.patientage_summary))
.add(new SWBreak())
.add(new SWRadioButton()
.option(R.array.ageArray, R.array.ageValues)
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/AndroidPermission.java b/app/src/main/java/info/nightscout/androidaps/utils/AndroidPermission.java
index 7963ae0545..021885ca6c 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/AndroidPermission.java
+++ b/app/src/main/java/info/nightscout/androidaps/utils/AndroidPermission.java
@@ -3,6 +3,7 @@ package info.nightscout.androidaps.utils;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -29,6 +30,8 @@ public class AndroidPermission {
public static final int CASE_BATTERY = 0x4;
public static final int CASE_PHONE_STATE = 0x5;
+ private static boolean permission_battery_optimization_failed = false;
+
@SuppressLint("BatteryLife")
private static void askForPermission(Activity activity, String[] permission, Integer requestCode) {
boolean test = false;
@@ -45,10 +48,15 @@ public class AndroidPermission {
ActivityCompat.requestPermissions(activity, permission, requestCode);
}
if (testBattery) {
- Intent i = new Intent();
- i.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
- i.setData(Uri.parse("package:" + activity.getPackageName()));
- activity.startActivityForResult(i, CASE_BATTERY);
+ try {
+ Intent i = new Intent();
+ i.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
+ i.setData(Uri.parse("package:" + activity.getPackageName()));
+ activity.startActivityForResult(i, CASE_BATTERY);
+ } catch (ActivityNotFoundException e) {
+ permission_battery_optimization_failed = true;
+ OKDialog.show(activity, MainApp.gs(R.string.permission), MainApp.gs(R.string.alert_dialog_permission_battery_optimization_failed), activity::recreate);
+ }
}
}
@@ -60,9 +68,11 @@ public class AndroidPermission {
public static boolean permissionNotGranted(Context context, String permission) {
boolean selfCheck = ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED;
if (permission.equals(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)) {
- PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- String packageName = context.getPackageName();
- selfCheck = selfCheck && powerManager.isIgnoringBatteryOptimizations(packageName);
+ if (!permission_battery_optimization_failed) {
+ PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
+ String packageName = context.getPackageName();
+ selfCheck = selfCheck && powerManager.isIgnoringBatteryOptimizations(packageName);
+ }
}
return !selfCheck;
}
@@ -71,7 +81,7 @@ public class AndroidPermission {
if (SP.getBoolean(R.string.key_smscommunicator_remotecommandsallowed, false)) {
if (permissionNotGranted(activity, Manifest.permission.RECEIVE_SMS)) {
NotificationWithAction notification = new NotificationWithAction(Notification.PERMISSION_SMS, MainApp.gs(R.string.smscommunicator_missingsmspermission), Notification.URGENT);
- notification.action(MainApp.gs(R.string.request), () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.RECEIVE_SMS,
+ notification.action(R.string.request, () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.RECEIVE_SMS,
Manifest.permission.SEND_SMS,
Manifest.permission.RECEIVE_MMS}, AndroidPermission.CASE_SMS));
MainApp.bus().post(new EventNewNotification(notification));
@@ -81,7 +91,7 @@ public class AndroidPermission {
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) {
if (permissionNotGranted(activity, Manifest.permission.READ_PHONE_STATE)) {
NotificationWithAction notification = new NotificationWithAction(Notification.PERMISSION_PHONESTATE, MainApp.gs(R.string.smscommunicator_missingphonestatepermission), Notification.URGENT);
- notification.action(MainApp.gs(R.string.request), () ->
+ notification.action(R.string.request, () ->
AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.READ_PHONE_STATE}, AndroidPermission.CASE_PHONE_STATE));
MainApp.bus().post(new EventNewNotification(notification));
} else
@@ -93,7 +103,7 @@ public class AndroidPermission {
public static synchronized void notifyForBatteryOptimizationPermission(Activity activity) {
if (permissionNotGranted(activity, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)) {
NotificationWithAction notification = new NotificationWithAction(Notification.PERMISSION_BATTERY, String.format(MainApp.gs(R.string.needwhitelisting), MainApp.gs(R.string.app_name)), Notification.URGENT);
- notification.action(MainApp.gs(R.string.request), () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}, AndroidPermission.CASE_BATTERY));
+ notification.action(R.string.request, () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS}, AndroidPermission.CASE_BATTERY));
MainApp.bus().post(new EventNewNotification(notification));
} else
MainApp.bus().post(new EventDismissNotification(Notification.PERMISSION_BATTERY));
@@ -102,7 +112,7 @@ public class AndroidPermission {
public static synchronized void notifyForStoragePermission(Activity activity) {
if (permissionNotGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
NotificationWithAction notification = new NotificationWithAction(Notification.PERMISSION_STORAGE, MainApp.gs(R.string.needstoragepermission), Notification.URGENT);
- notification.action(MainApp.gs(R.string.request), () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
+ notification.action(R.string.request, () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE}, AndroidPermission.CASE_STORAGE));
MainApp.bus().post(new EventNewNotification(notification));
} else
@@ -112,7 +122,7 @@ public class AndroidPermission {
public static synchronized void notifyForLocationPermissions(Activity activity) {
if (permissionNotGranted(activity, Manifest.permission.ACCESS_FINE_LOCATION)) {
NotificationWithAction notification = new NotificationWithAction(Notification.PERMISSION_LOCATION, MainApp.gs(R.string.needlocationpermission), Notification.URGENT);
- notification.action(MainApp.gs(R.string.request), () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, AndroidPermission.CASE_LOCATION));
+ notification.action(R.string.request, () -> AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, AndroidPermission.CASE_LOCATION));
MainApp.bus().post(new EventNewNotification(notification));
} else
MainApp.bus().post(new EventDismissNotification(Notification.PERMISSION_LOCATION));
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/BolusWizard.kt b/app/src/main/java/info/nightscout/androidaps/utils/BolusWizard.kt
index b741e4656c..598616f1bf 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/BolusWizard.kt
+++ b/app/src/main/java/info/nightscout/androidaps/utils/BolusWizard.kt
@@ -231,6 +231,7 @@ class BolusWizard @JvmOverloads constructor(val profile: Profile,
boluscalcJSON.put("insulintrend", insulinFromTrend)
boluscalcJSON.put("trend", trend)
boluscalcJSON.put("ttused", useTT)
+ boluscalcJSON.put("percentageCorrection", percentageCorrection)
} catch (e: JSONException) {
log.error("Unhandled exception", e)
}
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/CompositeDisposablePlusAssign.kt b/app/src/main/java/info/nightscout/androidaps/utils/CompositeDisposablePlusAssign.kt
new file mode 100644
index 0000000000..1f2fb892e5
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/utils/CompositeDisposablePlusAssign.kt
@@ -0,0 +1,9 @@
+package info.nightscout.androidaps.utils
+
+import io.reactivex.disposables.CompositeDisposable
+import io.reactivex.disposables.Disposable
+
+operator fun CompositeDisposable.plusAssign(disposable: Disposable) {
+ add(disposable)
+}
+
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/DigitsKeyListenerWithComma.java b/app/src/main/java/info/nightscout/androidaps/utils/DigitsKeyListenerWithComma.java
new file mode 100644
index 0000000000..a84ccd61a2
--- /dev/null
+++ b/app/src/main/java/info/nightscout/androidaps/utils/DigitsKeyListenerWithComma.java
@@ -0,0 +1,199 @@
+package info.nightscout.androidaps.utils;
+
+import android.text.InputType;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.method.NumberKeyListener;
+import android.view.KeyEvent;
+
+class DigitsKeyListenerWithComma extends NumberKeyListener {
+
+ /**
+ * The characters that are used.
+ *
+ * @see KeyEvent#getMatch
+ * @see #getAcceptedChars
+ */
+ private static final char[][] CHARACTERS = new char[][]{
+ new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'},
+ new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-'},
+ new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ','},
+ new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '.', ','},
+ };
+
+ private char[] mAccepted;
+ private boolean mSign;
+ private boolean mDecimal;
+
+ private static final int SIGN = 1;
+ private static final int DECIMAL = 2;
+
+ private static DigitsKeyListenerWithComma[] sInstance = new DigitsKeyListenerWithComma[4];
+
+ @Override
+ protected char[] getAcceptedChars() {
+ return mAccepted;
+ }
+
+ /**
+ * Allocates a DigitsKeyListener that accepts the digits 0 through 9.
+ */
+ public DigitsKeyListenerWithComma() {
+ this(false, false);
+ }
+
+ /**
+ * Allocates a DigitsKeyListener that accepts the digits 0 through 9,
+ * plus the minus sign (only at the beginning) and/or decimal point
+ * (only one per field) if specified.
+ */
+ public DigitsKeyListenerWithComma(boolean sign, boolean decimal) {
+ mSign = sign;
+ mDecimal = decimal;
+
+ int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0);
+ mAccepted = CHARACTERS[kind];
+ }
+
+ /**
+ * Returns a DigitsKeyListener that accepts the digits 0 through 9.
+ */
+ public static DigitsKeyListenerWithComma getInstance() {
+ return getInstance(false, false);
+ }
+
+ /**
+ * Returns a DigitsKeyListener that accepts the digits 0 through 9,
+ * plus the minus sign (only at the beginning) and/or decimal point
+ * (only one per field) if specified.
+ */
+ public static DigitsKeyListenerWithComma getInstance(boolean sign, boolean decimal) {
+ int kind = (sign ? SIGN : 0) | (decimal ? DECIMAL : 0);
+
+ if (sInstance[kind] != null)
+ return sInstance[kind];
+
+ sInstance[kind] = new DigitsKeyListenerWithComma(sign, decimal);
+ return sInstance[kind];
+ }
+
+ /**
+ * Returns a DigitsKeyListener that accepts only the characters
+ * that appear in the specified String. Note that not all characters
+ * may be available on every keyboard.
+ */
+ public static DigitsKeyListenerWithComma getInstance(String accepted) {
+ // TODO: do we need a cache of these to avoid allocating?
+
+ DigitsKeyListenerWithComma dim = new DigitsKeyListenerWithComma();
+
+ dim.mAccepted = new char[accepted.length()];
+ accepted.getChars(0, accepted.length(), dim.mAccepted, 0);
+
+ return dim;
+ }
+
+ public int getInputType() {
+ int contentType = InputType.TYPE_CLASS_NUMBER;
+ if (mSign) {
+ contentType |= InputType.TYPE_NUMBER_FLAG_SIGNED;
+ }
+ if (mDecimal) {
+ contentType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
+ }
+ return contentType;
+ }
+
+ @Override
+ public CharSequence filter(CharSequence source, int start, int end,
+ Spanned dest, int dstart, int dend) {
+ CharSequence out = super.filter(source, start, end, dest, dstart, dend);
+
+ if (mSign == false && mDecimal == false) {
+ return out;
+ }
+
+ if (out != null) {
+ source = out;
+ start = 0;
+ end = out.length();
+ }
+
+ int sign = -1;
+ int decimal = -1;
+ int dlen = dest.length();
+
+ /*
+ * Find out if the existing text has '-' or '.' characters.
+ */
+
+ for (int i = 0; i < dstart; i++) {
+ char c = dest.charAt(i);
+
+ if (c == '-') {
+ sign = i;
+ } else if (c == '.' || c == ',') {
+ decimal = i;
+ }
+ }
+ for (int i = dend; i < dlen; i++) {
+ char c = dest.charAt(i);
+
+ if (c == '-') {
+ return ""; // Nothing can be inserted in front of a '-'.
+ } else if (c == '.' || c == ',') {
+ decimal = i;
+ }
+ }
+
+ /*
+ * If it does, we must strip them out from the source.
+ * In addition, '-' must be the very first character,
+ * and nothing can be inserted before an existing '-'.
+ * Go in reverse order so the offsets are stable.
+ */
+
+ SpannableStringBuilder stripped = null;
+
+ for (int i = end - 1; i >= start; i--) {
+ char c = source.charAt(i);
+ boolean strip = false;
+
+ if (c == '-') {
+ if (i != start || dstart != 0) {
+ strip = true;
+ } else if (sign >= 0) {
+ strip = true;
+ } else {
+ sign = i;
+ }
+ } else if (c == '.' || c == ',') {
+ if (decimal >= 0) {
+ strip = true;
+ } else {
+ decimal = i;
+ }
+ }
+
+ if (strip) {
+ if (end == start + 1) {
+ return ""; // Only one character, and it was stripped.
+ }
+
+ if (stripped == null) {
+ stripped = new SpannableStringBuilder(source, start, end);
+ }
+
+ stripped.delete(i - start, i + 1 - start);
+ }
+ }
+
+ if (stripped != null) {
+ return stripped;
+ } else if (out != null) {
+ return out;
+ } else {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/JsonHelper.java b/app/src/main/java/info/nightscout/androidaps/utils/JsonHelper.java
index 8f715a0448..5308c62420 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/JsonHelper.java
+++ b/app/src/main/java/info/nightscout/androidaps/utils/JsonHelper.java
@@ -72,6 +72,19 @@ public class JsonHelper {
return result;
}
+ public static double safeGetDouble(JSONObject json, String fieldName, double defaultValue) {
+ double result = defaultValue;
+
+ if (json != null && json.has(fieldName)) {
+ try {
+ result = json.getDouble(fieldName);
+ } catch (JSONException ignored) {
+ }
+ }
+
+ return result;
+ }
+
public static int safeGetInt(JSONObject json, String fieldName) {
int result = 0;
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/NumberPicker.java b/app/src/main/java/info/nightscout/androidaps/utils/NumberPicker.java
index b125d0b2a3..e2a7489fc2 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/NumberPicker.java
+++ b/app/src/main/java/info/nightscout/androidaps/utils/NumberPicker.java
@@ -183,7 +183,8 @@ public class NumberPicker extends LinearLayout implements View.OnKeyListener,
}
setParams(initValue, minValue, maxValue, step, formater, allowZero, okButton);
this.textWatcher = textWatcher;
- editText.addTextChangedListener(textWatcher);
+ if (textWatcher != null)
+ editText.addTextChangedListener(textWatcher);
}
public void setParams(Double initValue, Double minValue, Double maxValue, Double step, NumberFormat formater, boolean allowZero, Button okButton) {
@@ -196,7 +197,7 @@ public class NumberPicker extends LinearLayout implements View.OnKeyListener,
callValueChangedListener();
this.okButton = okButton;
- editText.setKeyListener(DigitsKeyListener.getInstance(minValue < 0, step != Math.rint(step)));
+ editText.setKeyListener(DigitsKeyListenerWithComma.getInstance(minValue < 0, step != Math.rint(step)));
if (textWatcher != null)
editText.removeTextChangedListener(textWatcher);
diff --git a/app/src/main/java/info/nightscout/androidaps/utils/TimeListEdit.java b/app/src/main/java/info/nightscout/androidaps/utils/TimeListEdit.java
index 6271ee95fa..be8b89dff4 100644
--- a/app/src/main/java/info/nightscout/androidaps/utils/TimeListEdit.java
+++ b/app/src/main/java/info/nightscout/androidaps/utils/TimeListEdit.java
@@ -1,9 +1,6 @@
package info.nightscout.androidaps.utils;
import android.content.Context;
-import android.os.Handler;
-import androidx.core.content.ContextCompat;
-import androidx.core.widget.TextViewCompat;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
@@ -15,6 +12,10 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.core.widget.TextViewCompat;
+
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@@ -24,6 +25,7 @@ import org.slf4j.LoggerFactory;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
+import java.util.List;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
@@ -77,8 +79,8 @@ public class TimeListEdit {
}
private void buildView() {
- layout = (LinearLayout) view.findViewById(resLayoutId);
- layout.removeAllViews();
+ layout = view.findViewById(resLayoutId);
+ layout.removeAllViewsInLayout();
textlabel = new TextView(context);
textlabel.setText(label);
@@ -96,72 +98,63 @@ public class TimeListEdit {
}
// last "plus" to append new interval
+ float factor = layout.getContext().getResources().getDisplayMetrics().density;
finalAdd = new ImageView(context);
finalAdd.setImageResource(R.drawable.add);
- LinearLayout.LayoutParams illp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
+ LinearLayout.LayoutParams illp = new LinearLayout.LayoutParams((int) (35d * factor), (int) (35 * factor));
illp.setMargins(0, 25, 0, 25); // llp.setMargins(left, top, right, bottom);
illp.gravity = Gravity.CENTER;
layout.addView(finalAdd);
finalAdd.setLayoutParams(illp);
- finalAdd.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- addItem(itemsCount(), itemsCount() > 0 ? secondFromMidnight(itemsCount() - 1) + ONEHOURINSECONDS : 0, 0, 0);
- callSave();
- log();
- fillView();
- }
+ finalAdd.setOnClickListener(view -> {
+ addItem(itemsCount(), itemsCount() > 0 ? secondFromMidnight(itemsCount() - 1) + ONEHOURINSECONDS : 0, 0, 0);
+ callSave();
+ log();
+ fillView();
});
fillView();
}
- private void inflateRow(int i) {
+ private void inflateRow(final int position) {
LayoutInflater inflater = LayoutInflater.from(context);
- View childview = intervals[i] = inflater.inflate(R.layout.timelistedit_element, layout, false);
- spinners[i] = new SpinnerHelper(childview.findViewById(R.id.timelistedit_time));
- numberPickers1[i] = (NumberPicker) childview.findViewById(R.id.timelistedit_edit1);
- numberPickers2[i] = (NumberPicker) childview.findViewById(R.id.timelistedit_edit2);
- addButtons[i] = (ImageView) childview.findViewById(R.id.timelistedit_add);
- removeButtons[i] = (ImageView) childview.findViewById(R.id.timelistedit_remove);
+ View childView = intervals[position] = inflater.inflate(R.layout.timelistedit_element, layout, false);
+ spinners[position] = new SpinnerHelper(childView.findViewById(R.id.timelistedit_time));
+ numberPickers1[position] = childView.findViewById(R.id.timelistedit_edit1);
+ numberPickers2[position] = childView.findViewById(R.id.timelistedit_edit2);
+ addButtons[position] = childView.findViewById(R.id.timelistedit_add);
+ removeButtons[position] = childView.findViewById(R.id.timelistedit_remove);
- final int fixedPos = i;
- addButtons[i].setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- int seconds = secondFromMidnight(fixedPos);
- addItem(fixedPos, seconds, 0, 0);
- // for here for the rest of values
- for (int i = fixedPos + 1; i < itemsCount(); i++) {
- if (secondFromMidnight(i - 1) >= secondFromMidnight(i)) {
- editItem(i, secondFromMidnight(i - 1) + ONEHOURINSECONDS, value1(i), value2(i));
- }
+ addButtons[position].setOnClickListener(view -> {
+ int seconds = secondFromMidnight(position);
+ addItem(position, seconds, 0, 0);
+ // for here for the rest of values
+ for (int i = position + 1; i < itemsCount(); i++) {
+ if (secondFromMidnight(i - 1) >= secondFromMidnight(i)) {
+ editItem(i, secondFromMidnight(i - 1) + ONEHOURINSECONDS, value1(i), value2(i));
}
- while (itemsCount() > 24 || secondFromMidnight(itemsCount() - 1) > 23 * ONEHOURINSECONDS)
- removeItem(itemsCount() - 1);
- callSave();
- log();
- fillView();
}
+ while (itemsCount() > 24 || secondFromMidnight(itemsCount() - 1) > 23 * ONEHOURINSECONDS)
+ removeItem(itemsCount() - 1);
+ callSave();
+ log();
+ fillView();
});
- removeButtons[i].setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- removeItem(fixedPos);
- callSave();
- log();
- fillView();
- }
+ removeButtons[position].setOnClickListener(view -> {
+ removeItem(position);
+ callSave();
+ log();
+ fillView();
});
- spinners[i].setOnItemSelectedListener(
+ spinners[position].setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
- public void onItemSelected(AdapterView> parent, View view, int position, long id) {
- int seconds = DateUtil.toSeconds(spinners[fixedPos].getSelectedItem().toString());
- editItem(fixedPos, seconds, value1(fixedPos), value2(fixedPos));
+ public void onItemSelected(AdapterView> parent, View view, int selected, long id) {
+ int seconds = ((SpinnerAdapter) spinners[position].getAdapter()).valueForPosition(selected);
+ editItem(position, seconds, value1(position), value2(position));
log();
callSave();
fillView();
@@ -173,30 +166,10 @@ public class TimeListEdit {
}
);
- numberPickers1[i].setTextWatcher(new TextWatcher() {
- @Override
- public void afterTextChanged(Editable s) {
- editItem(fixedPos, secondFromMidnight(fixedPos), SafeParse.stringToDouble(numberPickers1[fixedPos].getText()), value2(fixedPos));
- callSave();
- log();
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start,
- int count, int after) {
- }
-
- @Override
- public void onTextChanged(CharSequence s, int start,
- int before, int count) {
- }
- });
-
-
- numberPickers2[i].setTextWatcher(new TextWatcher() {
+ numberPickers1[position].setTextWatcher(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
- editItem(fixedPos, secondFromMidnight(fixedPos), value1(fixedPos), SafeParse.stringToDouble(numberPickers2[fixedPos].getText()));
+ editItem(position, secondFromMidnight(position), SafeParse.stringToDouble(numberPickers1[position].getText()), value2(position));
callSave();
log();
}
@@ -212,7 +185,27 @@ public class TimeListEdit {
}
});
- layout.addView(childview);
+
+ numberPickers2[position].setTextWatcher(new TextWatcher() {
+ @Override
+ public void afterTextChanged(Editable s) {
+ editItem(position, secondFromMidnight(position), value1(position), SafeParse.stringToDouble(numberPickers2[position].getText()));
+ callSave();
+ log();
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start,
+ int count, int after) {
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start,
+ int before, int count) {
+ }
+ });
+
+ layout.addView(childView);
}
private void fillView() {
@@ -220,7 +213,7 @@ public class TimeListEdit {
if (i < itemsCount()) {
intervals[i].setVisibility(View.VISIBLE);
buildInterval(i);
- } else if (i <= inflatedUntil){
+ } else if (i <= inflatedUntil) {
intervals[i].setVisibility(View.GONE);
}
}
@@ -232,9 +225,8 @@ public class TimeListEdit {
}
}
- private View buildInterval(int i) {
+ private void buildInterval(int i) {
SpinnerHelper timeSpinner = spinners[i];
- View childview = intervals[i];
final NumberPicker editText1 = numberPickers1[i];
final NumberPicker editText2 = numberPickers2[i];
@@ -244,8 +236,8 @@ public class TimeListEdit {
if (i == 0) next = ONEHOURINSECONDS;
fillSpinner(timeSpinner, secondFromMidnight(i), previous, next);
- editText1.setParams(value1(i), min, max, step, formatter, false, view.findViewById(R.id.localprofile_save));
- editText2.setParams(value2(i), min, max, step, formatter, false, view.findViewById(R.id.localprofile_save));
+ editText1.setParams(value1(i), min, max, step, formatter, false,null);
+ editText2.setParams(value2(i), min, max, step, formatter, false, null);
if (data2 == null) {
editText2.setVisibility(View.GONE);
@@ -263,29 +255,38 @@ public class TimeListEdit {
addButtons[i].setVisibility(View.VISIBLE);
}
- return childview;
+ }
+
+ class SpinnerAdapter extends ArrayAdapter {
+ List values;
+
+ SpinnerAdapter(@NonNull Context context, int resource, final @NonNull List objects, final @NonNull List values) {
+ super(context, resource, objects);
+ this.values = values;
+ }
+
+ int valueForPosition(int position) {
+ return values.get(position);
+ }
}
private void fillSpinner(final SpinnerHelper spinner, int secondsFromMidnight, int previous, int next) {
int posInList = 0;
ArrayList timeList = new ArrayList<>();
+ ArrayList timeListValues = new ArrayList<>();
int pos = 0;
for (int t = previous + ONEHOURINSECONDS; t < next; t += ONEHOURINSECONDS) {
timeList.add(DateUtil.timeStringFromSeconds(t));
+ timeListValues.add(t);
if (secondsFromMidnight == t) posInList = pos;
pos++;
}
- final ArrayAdapter adapter = new ArrayAdapter<>(context,
- R.layout.spinner_centered, timeList);
+ final SpinnerAdapter adapter = new SpinnerAdapter(context,
+ R.layout.spinner_centered, timeList, timeListValues);
spinner.setAdapter(adapter);
- final int finalPosInList = posInList;
- new Handler().postDelayed(new Runnable() {
- public void run() {
- spinner.setSelection(finalPosInList, false);
- adapter.notifyDataSetChanged();
- }
- }, 100);
+ spinner.setSelection(posInList, false);
+ adapter.notifyDataSetChanged();
}
private int itemsCount() {
@@ -350,7 +351,7 @@ public class TimeListEdit {
data1.put(index, newObject1);
if (data2 != null) {
JSONObject newObject2 = new JSONObject();
- newObject1.put("time", time);
+ newObject2.put("time", time);
newObject2.put("timeAsSeconds", timeAsSeconds);
newObject2.put("value", value2);
data2.put(index, newObject2);
@@ -362,7 +363,7 @@ public class TimeListEdit {
}
private void addItem(int index, int timeAsSeconds, double value1, double value2) {
- if(itemsCount()>inflatedUntil) {
+ if (itemsCount() > inflatedUntil) {
layout.removeView(finalAdd);
inflateRow(++inflatedUntil);
layout.addView(finalAdd);
@@ -389,10 +390,8 @@ public class TimeListEdit {
}
private void log() {
- if (log.isDebugEnabled()) {
- for (int i = 0; i < data1.length(); i++) {
- log.debug(i + ": @" + DateUtil.timeStringFromSeconds(secondFromMidnight(i)) + " " + value1(i) + (data2 != null ? " " + value2(i) : ""));
- }
+ for (int i = 0; i < data1.length(); i++) {
+ log.debug(i + ": @" + DateUtil.timeStringFromSeconds(secondFromMidnight(i)) + " " + value1(i) + (data2 != null ? " " + value2(i) : ""));
}
}
@@ -400,9 +399,9 @@ public class TimeListEdit {
if (save != null) save.run();
}
- public void updateLabel(String txt){
+ public void updateLabel(String txt) {
this.label = txt;
- if(textlabel!=null)
+ if (textlabel != null)
textlabel.setText(txt);
}
}
diff --git a/app/src/main/res/layout/activity_agreement.xml b/app/src/main/res/layout/activity_agreement.xml
index 9a17432930..5c98f937ed 100644
--- a/app/src/main/res/layout/activity_agreement.xml
+++ b/app/src/main/res/layout/activity_agreement.xml
@@ -8,8 +8,7 @@ tools:context="info.nightscout.androidaps.activities.AgreementActivity">
+ android:layout_height="fill_parent">
diff --git a/app/src/main/res/layout/activity_setupwizard.xml b/app/src/main/res/layout/activity_setupwizard.xml
index 8510abd33f..4bcc5b1221 100644
--- a/app/src/main/res/layout/activity_setupwizard.xml
+++ b/app/src/main/res/layout/activity_setupwizard.xml
@@ -23,7 +23,6 @@
app:srcCompat="@drawable/ic_exit_to_app" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/automation_event_item.xml b/app/src/main/res/layout/automation_event_item.xml
index ce377a6aa0..6cbc138278 100644
--- a/app/src/main/res/layout/automation_event_item.xml
+++ b/app/src/main/res/layout/automation_event_item.xml
@@ -11,6 +11,27 @@
android:background="@color/ribbonDefault"
android:padding="8dp">
+
+
+
+
+ android:layout_below="@id/automation_enabled"
+ android:orientation="horizontal" />
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/bgsource_item.xml b/app/src/main/res/layout/bgsource_item.xml
index 4cb3be97b8..5d1842b8c6 100644
--- a/app/src/main/res/layout/bgsource_item.xml
+++ b/app/src/main/res/layout/bgsource_item.xml
@@ -1,7 +1,6 @@
diff --git a/app/src/main/res/layout/combopump_fragment.xml b/app/src/main/res/layout/combopump_fragment.xml
index 87650081a5..af76a31a9d 100644
--- a/app/src/main/res/layout/combopump_fragment.xml
+++ b/app/src/main/res/layout/combopump_fragment.xml
@@ -476,7 +476,6 @@
diff --git a/app/src/main/res/layout/danar_history_item.xml b/app/src/main/res/layout/danar_history_item.xml
index b03a26f55a..f2c73ffbf2 100644
--- a/app/src/main/res/layout/danar_history_item.xml
+++ b/app/src/main/res/layout/danar_history_item.xml
@@ -12,7 +12,6 @@
-
diff --git a/app/src/main/res/layout/danar_statsactivity.xml b/app/src/main/res/layout/danar_statsactivity.xml
index be28106f4f..d4320c05f2 100644
--- a/app/src/main/res/layout/danar_statsactivity.xml
+++ b/app/src/main/res/layout/danar_statsactivity.xml
@@ -8,7 +8,6 @@
tools:context=".plugins.pump.danaR.activities.DanaRHistoryActivity">
@@ -144,7 +142,6 @@
android:labelFor="@+id/danar_stats_editTotalBaseBasal2"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:id="@+id/danar_stats_editTotalBaseBasal2_label"
android:gravity="left"
android:layout_weight="1" />
diff --git a/app/src/main/res/layout/danar_user_options.xml b/app/src/main/res/layout/danar_user_options.xml
index 7ea4116327..517e921f10 100644
--- a/app/src/main/res/layout/danar_user_options.xml
+++ b/app/src/main/res/layout/danar_user_options.xml
@@ -12,14 +12,12 @@
android:layout_height="match_parent">
diff --git a/app/src/main/res/layout/food_fragment.xml b/app/src/main/res/layout/food_fragment.xml
index b07ec58ae0..38e319ad7f 100644
--- a/app/src/main/res/layout/food_fragment.xml
+++ b/app/src/main/res/layout/food_fragment.xml
@@ -16,7 +16,6 @@
android:orientation="horizontal">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/insightpump_statuselements.xml b/app/src/main/res/layout/insightpump_statuselements.xml
deleted file mode 100644
index 347815e854..0000000000
--- a/app/src/main/res/layout/insightpump_statuselements.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/localprofile_fragment.xml b/app/src/main/res/layout/localprofile_fragment.xml
index be5f994302..1edeeb0b31 100644
--- a/app/src/main/res/layout/localprofile_fragment.xml
+++ b/app/src/main/res/layout/localprofile_fragment.xml
@@ -1,197 +1,194 @@
-
-
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ android:text="@string/reset" />
-
-
-
-
-
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="3dp"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="3dp"
+ android:layout_weight="1"
+ android:drawableStart="@drawable/icon_local_save"
+ android:paddingLeft="10dp"
+ android:paddingRight="10dp"
+ android:text="@string/save" />
-
+
+
+
+
-
diff --git a/app/src/main/res/layout/medtronic_history_item.xml b/app/src/main/res/layout/medtronic_history_item.xml
index 07bb72eb6a..55881f0553 100644
--- a/app/src/main/res/layout/medtronic_history_item.xml
+++ b/app/src/main/res/layout/medtronic_history_item.xml
@@ -3,7 +3,6 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="40dp"
- android:id="@+id/medtronic_history_item"
android:paddingLeft="20dp">
diff --git a/app/src/main/res/layout/objectives_item.xml b/app/src/main/res/layout/objectives_item.xml
index 3be6c780de..7a7f461433 100644
--- a/app/src/main/res/layout/objectives_item.xml
+++ b/app/src/main/res/layout/objectives_item.xml
@@ -2,7 +2,6 @@
-
+ android:layout_height="match_parent">
-
+
+
+ android:layout_marginStart="5dp"
+ android:layout_marginTop="2dp"
+ android:layout_marginBottom="2dp"
+ android:maxLines="4"
+ android:text="Notification text. Notification text. Notification text. Notification text. Notification text. Notification text. "
+ card_view:layout_constraintEnd_toStartOf="@+id/notification_dismiss"
+ card_view:layout_constraintStart_toStartOf="parent"
+ card_view:layout_constraintTop_toTopOf="parent" />
-
-
-
-
-
-
-
-
+
diff --git a/app/src/main/res/layout/overview_quickwizardlist_activity.xml b/app/src/main/res/layout/overview_quickwizardlist_activity.xml
index 3ef067d044..dc8d3ac8b3 100644
--- a/app/src/main/res/layout/overview_quickwizardlist_activity.xml
+++ b/app/src/main/res/layout/overview_quickwizardlist_activity.xml
@@ -1,7 +1,6 @@
@@ -148,7 +147,6 @@
+
+
-
+
+ tools:context="com.gxwtech.roundtrip2.RileyLinkScan">
diff --git a/app/src/main/res/layout/rileylink_scan_item.xml b/app/src/main/res/layout/rileylink_scan_item.xml
index 168b80c1d3..61e6db6d23 100644
--- a/app/src/main/res/layout/rileylink_scan_item.xml
+++ b/app/src/main/res/layout/rileylink_scan_item.xml
@@ -3,7 +3,6 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:id="@+id/device_list_id"
android:paddingLeft="32dp">
diff --git a/app/src/main/res/layout/rileylink_status_device_item.xml b/app/src/main/res/layout/rileylink_status_device_item.xml
index 946a925a06..baab82ef7f 100644
--- a/app/src/main/res/layout/rileylink_status_device_item.xml
+++ b/app/src/main/res/layout/rileylink_status_device_item.xml
@@ -3,7 +3,6 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="40dp"
- android:id="@+id/device_command_item"
android:paddingLeft="15dp">
@@ -21,7 +20,6 @@
android:orientation="horizontal">
diff --git a/app/src/main/res/layout/rileylink_status_history_item.xml b/app/src/main/res/layout/rileylink_status_history_item.xml
index ebfcfecac9..f7d60830ef 100644
--- a/app/src/main/res/layout/rileylink_status_history_item.xml
+++ b/app/src/main/res/layout/rileylink_status_history_item.xml
@@ -3,7 +3,6 @@
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="40dp"
- android:id="@+id/rileylink_status_history_item"
android:paddingLeft="20dp">
diff --git a/app/src/main/res/layout/timelistedit_element.xml b/app/src/main/res/layout/timelistedit_element.xml
index b9e473d34e..a57dc29998 100644
--- a/app/src/main/res/layout/timelistedit_element.xml
+++ b/app/src/main/res/layout/timelistedit_element.xml
@@ -33,16 +33,16 @@
diff --git a/app/src/main/res/layout/treatments_bolus_fragment.xml b/app/src/main/res/layout/treatments_bolus_fragment.xml
index db8e0bbbbb..6ed831e84e 100644
--- a/app/src/main/res/layout/treatments_bolus_fragment.xml
+++ b/app/src/main/res/layout/treatments_bolus_fragment.xml
@@ -17,7 +17,6 @@
android:paddingTop="10dp">
+
+
+
+
+
+
+
+
+
+
+