From 9dcd1c70d5367961a8514876f227d4fe8ee84779 Mon Sep 17 00:00:00 2001 From: McHoffi Date: Mon, 19 Feb 2018 20:48:54 +0100 Subject: [PATCH 01/74] Update pref_wear.xml --- app/src/main/res/xml/pref_wear.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/xml/pref_wear.xml b/app/src/main/res/xml/pref_wear.xml index 9b51c4b17b..50f4a17f07 100644 --- a/app/src/main/res/xml/pref_wear.xml +++ b/app/src/main/res/xml/pref_wear.xml @@ -32,10 +32,10 @@ android:title="@string/wear_showbgi_title" /> - \ No newline at end of file + From 293eff837bacec98bf012a9093e46ff2bfb00294 Mon Sep 17 00:00:00 2001 From: McHoffi Date: Mon, 19 Feb 2018 20:49:53 +0100 Subject: [PATCH 02/74] Update pref_wear.xml --- app/src/main/res/xml/pref_wear.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/xml/pref_wear.xml b/app/src/main/res/xml/pref_wear.xml index 50f4a17f07..1f9c409340 100644 --- a/app/src/main/res/xml/pref_wear.xml +++ b/app/src/main/res/xml/pref_wear.xml @@ -32,7 +32,7 @@ android:title="@string/wear_showbgi_title" /> From 21d6745d026583c048044bdab54188576e344074 Mon Sep 17 00:00:00 2001 From: McHoffi Date: Mon, 19 Feb 2018 20:50:17 +0100 Subject: [PATCH 03/74] Update pref_wear.xml --- app/src/main/res/xml/pref_wear.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/xml/pref_wear.xml b/app/src/main/res/xml/pref_wear.xml index 1f9c409340..50f4a17f07 100644 --- a/app/src/main/res/xml/pref_wear.xml +++ b/app/src/main/res/xml/pref_wear.xml @@ -32,7 +32,7 @@ android:title="@string/wear_showbgi_title" /> From 6ed8aceff37b1d8b27aac32543680762e3bf9180 Mon Sep 17 00:00:00 2001 From: McHoffi Date: Mon, 19 Feb 2018 20:52:10 +0100 Subject: [PATCH 04/74] Update WearPlugin.java --- .../info/nightscout/androidaps/plugins/Wear/WearPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java index b72a767278..0f456ee345 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java @@ -197,7 +197,7 @@ public class WearPlugin implements PluginBase { @Subscribe public void onStatusEvent(final EventOverviewBolusProgress ev) { - if(!ev.isSMB()||SP.getBoolean("wear_notifySMB", false)) { + if(!ev.isSMB()||SP.getBoolean("wear_notifySMB", true)) { Intent intent = new Intent(ctx, WatchUpdaterService.class).setAction(WatchUpdaterService.ACTION_SEND_BOLUSPROGRESS); intent.putExtra("progresspercent", ev.percent); intent.putExtra("progressstatus", ev.status); From 88ea215f66848bedec4cbda26455d295a72834d2 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Tue, 20 Feb 2018 12:27:47 +0100 Subject: [PATCH 05/74] add boluses to wear payload --- .../wearintegration/WatchUpdaterService.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java index 74423fe7ac..60a8a27bea 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java @@ -19,11 +19,15 @@ import com.google.android.gms.wearable.PutDataRequest; import com.google.android.gms.wearable.Wearable; import com.google.android.gms.wearable.WearableListenerService; +import org.mozilla.javascript.tools.jsc.Main; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Constants; @@ -35,6 +39,7 @@ import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.BgReading; import info.nightscout.androidaps.db.DatabaseHelper; import info.nightscout.androidaps.db.TemporaryBasal; +import info.nightscout.androidaps.db.Treatment; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.TreatmentsInterface; import info.nightscout.androidaps.plugins.IobCobCalculator.AutosensData; @@ -345,11 +350,13 @@ public class WatchUpdaterService extends WearableListenerService implements } long now = System.currentTimeMillis(); - long startTimeWindow = now - (long) (60000 * 60 * 5.5); + final long startTimeWindow = now - (long) (60000 * 60 * 5.5); ArrayList basals = new ArrayList<>(); ArrayList temps = new ArrayList<>(); + ArrayList boluses = new ArrayList<>(); + Profile profile = MainApp.getConfigBuilder().getProfile(); @@ -447,9 +454,17 @@ public class WatchUpdaterService extends WearableListenerService implements } } + List treatments = MainApp.getConfigBuilder().getTreatmentsFromHistory(); + for (Treatment treatment:treatments) { + if(treatment.date > startTimeWindow){ + boluses.add(treatmentMap(treatment.date, treatment.insulin, treatment.carbs, treatment.isSMB)); + } + + } DataMap dm = new DataMap(); dm.putDataMapArrayList("basals", basals); dm.putDataMapArrayList("temps", temps); + dm.putDataMapArrayList("boluses", boluses); new SendToDataLayerThread(BASAL_DATA_PATH, googleApiClient).execute(dm); } @@ -472,6 +487,15 @@ public class WatchUpdaterService extends WearableListenerService implements return dm; } + private DataMap treatmentMap(long date, double bolus, double carbs, boolean isSMB) { + DataMap dm = new DataMap(); + dm.putLong("date", date); + dm.putDouble("bolus", bolus); + dm.putDouble("carbs", carbs); + dm.putBoolean("isSMB", isSMB); + return dm; + } + private void sendNotification() { if (googleApiClient.isConnected()) { From 6a1b777bc3ecdeabf365ed468d4b20378d8577db Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Tue, 20 Feb 2018 13:51:00 +0100 Subject: [PATCH 06/74] include bigchart watchface for very small watches --- .../androidaps/watchfaces/BIGChart.java | 13 ++- .../res/layout/activity_bigchart_small.xml | 12 ++ .../layout/rect_activity_bigchart_small.xml | 108 ++++++++++++++++++ .../layout/round_activity_bigchart_small.xml | 108 ++++++++++++++++++ 4 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 wear/src/main/res/layout/activity_bigchart_small.xml create mode 100644 wear/src/main/res/layout/rect_activity_bigchart_small.xml create mode 100644 wear/src/main/res/layout/round_activity_bigchart_small.xml diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index a9700c6092..45bb05d62e 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -13,6 +13,7 @@ import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Shader; +import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.os.SystemClock; @@ -22,6 +23,7 @@ import android.support.v4.content.LocalBroadcastManager; import android.support.wearable.view.WatchViewStub; import android.support.wearable.watchface.WatchFaceStyle; import android.text.format.DateFormat; +import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.view.LayoutInflater; @@ -30,6 +32,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import com.google.android.gms.wearable.DataMap; import com.ustwo.clockwise.wearable.WatchFace; @@ -40,6 +43,7 @@ import com.ustwo.clockwise.common.WatchShape; import java.util.ArrayList; import java.util.Date; +import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.data.BasalWatchData; import info.nightscout.androidaps.data.BgWatchData; import info.nightscout.androidaps.data.ListenerService; @@ -53,6 +57,7 @@ import lecho.lib.hellocharts.view.LineChartView; */ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPreferenceChangeListener { public final static IntentFilter INTENT_FILTER; + public static final int SCREENSIZE_SMALL = 280; public TextView mTime, mSgv, mTimestamp, mDelta, mAvgDelta; public RelativeLayout mRelativeLayout; public long sgvLevel = 0; @@ -108,7 +113,13 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre .getDefaultSharedPreferences(this); sharedPrefs.registerOnSharedPreferenceChangeListener(this); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); - layoutView = inflater.inflate(R.layout.activity_bigchart, null); + DisplayMetrics metrics = getResources().getDisplayMetrics(); + if(metrics.widthPixels < SCREENSIZE_SMALL || metrics.widthPixels < SCREENSIZE_SMALL){ + layoutView = inflater.inflate(R.layout.activity_bigchart_small, null); + } else { + layoutView = inflater.inflate(R.layout.activity_bigchart, null); + + } performViewSetup(); } diff --git a/wear/src/main/res/layout/activity_bigchart_small.xml b/wear/src/main/res/layout/activity_bigchart_small.xml new file mode 100644 index 0000000000..34ca885a09 --- /dev/null +++ b/wear/src/main/res/layout/activity_bigchart_small.xml @@ -0,0 +1,12 @@ + + diff --git a/wear/src/main/res/layout/rect_activity_bigchart_small.xml b/wear/src/main/res/layout/rect_activity_bigchart_small.xml new file mode 100644 index 0000000000..2726a17ae7 --- /dev/null +++ b/wear/src/main/res/layout/rect_activity_bigchart_small.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wear/src/main/res/layout/round_activity_bigchart_small.xml b/wear/src/main/res/layout/round_activity_bigchart_small.xml new file mode 100644 index 0000000000..8db4a3dd15 --- /dev/null +++ b/wear/src/main/res/layout/round_activity_bigchart_small.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From c10468e90f6ccc23dc9d1d5d65109eff7353fca5 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Tue, 20 Feb 2018 13:58:25 +0100 Subject: [PATCH 07/74] small cleanup --- .../info/nightscout/androidaps/watchfaces/BIGChart.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 45bb05d62e..4eac6cd922 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -13,7 +13,6 @@ import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Shader; -import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.os.SystemClock; @@ -32,22 +31,19 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.TextView; -import android.widget.Toast; import com.google.android.gms.wearable.DataMap; -import com.ustwo.clockwise.wearable.WatchFace; import com.ustwo.clockwise.common.WatchFaceTime; import com.ustwo.clockwise.common.WatchMode; import com.ustwo.clockwise.common.WatchShape; +import com.ustwo.clockwise.wearable.WatchFace; import java.util.ArrayList; -import java.util.Date; -import info.nightscout.androidaps.BuildConfig; +import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.BasalWatchData; import info.nightscout.androidaps.data.BgWatchData; import info.nightscout.androidaps.data.ListenerService; -import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.TempWatchData; import info.nightscout.androidaps.interaction.menus.MainMenuActivity; import lecho.lib.hellocharts.view.LineChartView; @@ -118,7 +114,6 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre layoutView = inflater.inflate(R.layout.activity_bigchart_small, null); } else { layoutView = inflater.inflate(R.layout.activity_bigchart, null); - } performViewSetup(); } From 126322053ecde6f969621a6a6eb970dcf8807d10 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Tue, 20 Feb 2018 14:14:27 +0100 Subject: [PATCH 08/74] pass bolus data to wear graph builder --- .../androidaps/data/BolusWatchData.java | 12 ++++++++++++ .../androidaps/watchfaces/BIGChart.java | 18 ++++++++++++++++-- .../androidaps/watchfaces/BaseWatchFace.java | 4 ++-- .../androidaps/watchfaces/BgGraphBuilder.java | 8 ++++++-- 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java diff --git a/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java b/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java new file mode 100644 index 0000000000..7179602fa8 --- /dev/null +++ b/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java @@ -0,0 +1,12 @@ +package info.nightscout.androidaps.data; + +/** + * Created by adrian on 17/11/16. + */ + +public class BolusWatchData { + public long date; + public double bolus; + public double carbs; + public boolean isSMB; +} diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 4eac6cd922..d064db79e4 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -43,6 +43,7 @@ import java.util.ArrayList; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.BasalWatchData; import info.nightscout.androidaps.data.BgWatchData; +import info.nightscout.androidaps.data.BolusWatchData; import info.nightscout.androidaps.data.ListenerService; import info.nightscout.androidaps.data.TempWatchData; import info.nightscout.androidaps.interaction.menus.MainMenuActivity; @@ -74,6 +75,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre public ArrayList bgDataList = new ArrayList<>(); public ArrayList tempWatchDataList = new ArrayList<>(); public ArrayList basalWatchDataList = new ArrayList<>(); + public ArrayList bolusWatchDataList = new ArrayList<>(); public PowerManager.WakeLock wakeLock; public View layoutView; private final Point displaySize = new Point(); @@ -398,6 +400,18 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre basalWatchDataList.add(bwd); } } + ArrayList boluses = dataMap.getDataMapArrayList("boluses"); + if (boluses != null) { + bolusWatchDataList = new ArrayList<>(); + for (DataMap basal : basals) { + BolusWatchData bwd = new BolusWatchData(); + bwd.date = basal.getLong("date"); + bwd.bolus = basal.getDouble("bolus"); + bwd.carbs = basal.getDouble("carbs"); + bwd.isSMB = basal.getBoolean("isSMB"); + bolusWatchDataList.add(bwd); + } + } } private void showAgeAndStatus() { @@ -640,9 +654,9 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java index fab81aafb9..ae10062e4e 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java @@ -628,9 +628,9 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index b21934131d..4cec10fec6 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -15,6 +15,7 @@ import java.util.TimeZone; import info.nightscout.androidaps.data.BasalWatchData; import info.nightscout.androidaps.data.BgWatchData; +import info.nightscout.androidaps.data.BolusWatchData; import info.nightscout.androidaps.data.TempWatchData; import lecho.lib.hellocharts.model.Axis; import lecho.lib.hellocharts.model.AxisValue; @@ -27,6 +28,7 @@ import lecho.lib.hellocharts.model.Viewport; * Created by emmablack on 11/15/14. */ public class BgGraphBuilder { + private ArrayList bolusWatchDataList; private ArrayList basalWatchDataList; public List tempWatchDataList; private int timespan; @@ -55,7 +57,7 @@ public class BgGraphBuilder { //used for low resolution screen. - public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int timespan) { end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; @@ -70,12 +72,13 @@ public class BgGraphBuilder { this.timespan = timespan; this.tempWatchDataList = tempWatchDataList; this.basalWatchDataList = basalWatchDataList; + this.bolusWatchDataList = (bolusWatchDataList!=null)?bolusWatchDataList:new ArrayList(); this.gridColour = gridColour; this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; } - public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int timespan) { end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; @@ -89,6 +92,7 @@ public class BgGraphBuilder { this.timespan = timespan; this.tempWatchDataList = tempWatchDataList; this.basalWatchDataList = basalWatchDataList; + this.bolusWatchDataList = (bolusWatchDataList!=null)?bolusWatchDataList:new ArrayList(); this.gridColour = gridColour; this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; From f6253284de162d27ea727e0a660655f0fb13b94d Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Tue, 20 Feb 2018 15:39:02 +0100 Subject: [PATCH 09/74] show boluses on bigchart --- .../androidaps/watchfaces/BIGChart.java | 10 +++---- .../androidaps/watchfaces/BgGraphBuilder.java | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index d064db79e4..ea2e753ec8 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -403,12 +403,12 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre ArrayList boluses = dataMap.getDataMapArrayList("boluses"); if (boluses != null) { bolusWatchDataList = new ArrayList<>(); - for (DataMap basal : basals) { + for (DataMap bolus : boluses) { BolusWatchData bwd = new BolusWatchData(); - bwd.date = basal.getLong("date"); - bwd.bolus = basal.getDouble("bolus"); - bwd.carbs = basal.getDouble("carbs"); - bwd.isSMB = basal.getBoolean("isSMB"); + bwd.date = bolus.getLong("date"); + bwd.bolus = bolus.getDouble("bolus"); + bwd.carbs = bolus.getDouble("carbs"); + bwd.isSMB = bolus.getBoolean("isSMB"); bolusWatchDataList.add(bwd); } } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 4cec10fec6..87d5f39184 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -158,6 +158,7 @@ public class BgGraphBuilder { } lines.add(basalLine((float) minChart, factor, highlight)); + lines.add(bolusLine((float) minChart, factor)); return lines; } @@ -184,6 +185,31 @@ public class BgGraphBuilder { } + private Line bolusLine(float offset, double factor) { + + List pointValues = new ArrayList(); + + for (BolusWatchData bwd: bolusWatchDataList) { + if(bwd.date > start_time) { + pointValues.add(new PointValue(fuzz(bwd.date), (float) offset+2)); + } + } + + + Line line = new Line(pointValues); + line.setColor(basalCenterColor); + line.setHasLines(false); + line.setPointRadius(pointSize); + line.setHasPoints(true); + + return line; + + + } + + + + public Line highValuesLine() { Line highValuesLine = new Line(highValues); highValuesLine.setColor(highColor); From 8ee7309d86f02ec9250dd9e219a113b5e097c146 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 21 Feb 2018 01:56:06 +0100 Subject: [PATCH 10/74] smb and bolus on wear --- .../androidaps/watchfaces/BIGChart.java | 5 +-- .../androidaps/watchfaces/BaseWatchFace.java | 5 +-- .../androidaps/watchfaces/BgGraphBuilder.java | 35 ++++++++++++++----- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index ea2e753ec8..b7a3c7769e 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -66,6 +66,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre public int gridColour = Color.WHITE; public int basalBackgroundColor = Color.BLUE; public int basalCenterColor = Color.BLUE; + public int bolusColor = Color.MAGENTA; public int pointSize = 2; public boolean lowResMode = false; public boolean layoutSet = false; @@ -654,9 +655,9 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java index ae10062e4e..6b3df4b979 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java @@ -66,6 +66,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen public int gridColor = Color.WHITE; public int basalBackgroundColor = Color.BLUE; public int basalCenterColor = Color.BLUE; + public int bolusColor = Color.MAGENTA; public boolean lowResMode = false; public boolean layoutSet = false; public boolean bIsRound = false; @@ -628,9 +629,9 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 87d5f39184..064c00bdcd 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -47,6 +47,7 @@ public class BgGraphBuilder { public int gridColour; public int basalCenterColor; public int basalBackgroundColor; + private int bolusColor; public boolean singleLine = false; private long endHour; @@ -57,7 +58,7 @@ public class BgGraphBuilder { //used for low resolution screen. - public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; @@ -76,9 +77,10 @@ public class BgGraphBuilder { this.gridColour = gridColour; this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; + this.bolusColor = bolusColor; } - public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; @@ -96,6 +98,7 @@ public class BgGraphBuilder { this.gridColour = gridColour; this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; + this.bolusColor = bolusColor; } public LineChartData lineData() { @@ -158,7 +161,9 @@ public class BgGraphBuilder { } lines.add(basalLine((float) minChart, factor, highlight)); - lines.add(bolusLine((float) minChart, factor)); + lines.add(bolusLine((float) minChart)); + lines.add(smbLine((float) minChart)); + return lines; } @@ -185,26 +190,38 @@ public class BgGraphBuilder { } - private Line bolusLine(float offset, double factor) { + private Line bolusLine(float offset) { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time) { - pointValues.add(new PointValue(fuzz(bwd.date), (float) offset+2)); + if(bwd.date > start_time && !bwd.isSMB) { + pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } + Line line = new Line(pointValues); + line.setColor(bolusColor); + line.setHasLines(false); + line.setPointRadius(pointSize); + line.setHasPoints(true); + return line; + } + private Line smbLine(float offset) { + List pointValues = new ArrayList(); + + for (BolusWatchData bwd: bolusWatchDataList) { + if(bwd.date > start_time && bwd.isSMB) { + pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); + } + } Line line = new Line(pointValues); line.setColor(basalCenterColor); line.setHasLines(false); line.setPointRadius(pointSize); line.setHasPoints(true); - return line; - - } From c6a3efb60e2db4959769c23a2b2997d6ffa6fb33 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 21 Feb 2018 14:23:52 +0100 Subject: [PATCH 11/74] wear adaptive prediction timeframe --- .../wearintegration/WatchUpdaterService.java | 23 +++++++++ .../androidaps/data/BgWatchData.java | 4 ++ .../androidaps/watchfaces/BIGChart.java | 16 ++++++- .../androidaps/watchfaces/BaseWatchFace.java | 5 +- .../androidaps/watchfaces/BgGraphBuilder.java | 47 +++++++++++++++++-- 5 files changed, 87 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java index 60a8a27bea..2091f2ad84 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java @@ -356,6 +356,8 @@ public class WatchUpdaterService extends WearableListenerService implements ArrayList basals = new ArrayList<>(); ArrayList temps = new ArrayList<>(); ArrayList boluses = new ArrayList<>(); + ArrayList predictions = new ArrayList<>(); + @@ -461,10 +463,24 @@ public class WatchUpdaterService extends WearableListenerService implements } } + + final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun; + if(finalLastRun != null && finalLastRun.request.hasPredictions && finalLastRun.constraintsProcessed != null){ + List predArray = finalLastRun.constraintsProcessed.getPredictions(); + + if (!predArray.isEmpty()) { + for (BgReading bg : predArray) { + predictions.add(predictionMap(bg.date, bg.value)); + } + } + } + + DataMap dm = new DataMap(); dm.putDataMapArrayList("basals", basals); dm.putDataMapArrayList("temps", temps); dm.putDataMapArrayList("boluses", boluses); + dm.putDataMapArrayList("predictions", predictions); new SendToDataLayerThread(BASAL_DATA_PATH, googleApiClient).execute(dm); } @@ -496,6 +512,13 @@ public class WatchUpdaterService extends WearableListenerService implements return dm; } + private DataMap predictionMap(long timestamp, double sgv) { + DataMap dm = new DataMap(); + dm.putLong("timestamp", timestamp); + dm.putDouble("sgv", sgv); + return dm; + } + private void sendNotification() { if (googleApiClient.isConnected()) { diff --git a/wear/src/main/java/info/nightscout/androidaps/data/BgWatchData.java b/wear/src/main/java/info/nightscout/androidaps/data/BgWatchData.java index 54eb597f1a..8f20d77282 100644 --- a/wear/src/main/java/info/nightscout/androidaps/data/BgWatchData.java +++ b/wear/src/main/java/info/nightscout/androidaps/data/BgWatchData.java @@ -16,6 +16,10 @@ public class BgWatchData implements Comparable{ this.timestamp = aTimestamp; } + public BgWatchData(){ + + } + @Override public boolean equals(Object that){ if(! (that instanceof BgWatchData)){ diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index b7a3c7769e..4926e924cb 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -77,6 +77,8 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre public ArrayList tempWatchDataList = new ArrayList<>(); public ArrayList basalWatchDataList = new ArrayList<>(); public ArrayList bolusWatchDataList = new ArrayList<>(); + public ArrayList predictionList = new ArrayList<>(); + public PowerManager.WakeLock wakeLock; public View layoutView; private final Point displaySize = new Point(); @@ -413,6 +415,16 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre bolusWatchDataList.add(bwd); } } + ArrayList predictions = dataMap.getDataMapArrayList("predictions"); + if (boluses != null) { + predictionList = new ArrayList<>(); + for (DataMap prediction : predictions) { + BgWatchData bwd = new BgWatchData(); + bwd.timestamp = prediction.getLong("timestamp"); + bwd.sgv = prediction.getDouble("sgv"); + predictionList.add(bwd); + } + } } private void showAgeAndStatus() { @@ -655,9 +667,9 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java index 6b3df4b979..2627258860 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java @@ -76,6 +76,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen public ArrayList bgDataList = new ArrayList<>(); public ArrayList tempWatchDataList = new ArrayList<>(); public ArrayList basalWatchDataList = new ArrayList<>(); + public ArrayList predictionList = new ArrayList<>(); public PowerManager.WakeLock wakeLock; // related endTime manual layout public View layoutView; @@ -629,9 +630,9 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList,predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 064c00bdcd..a0e46b8390 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -1,6 +1,7 @@ package info.nightscout.androidaps.watchfaces; import android.content.Context; +import android.graphics.Color; import android.graphics.DashPathEffect; import android.preference.PreferenceManager; import android.text.format.DateFormat; @@ -28,6 +29,8 @@ import lecho.lib.hellocharts.model.Viewport; * Created by emmablack on 11/15/14. */ public class BgGraphBuilder { + public static final double MAX_PREDICTION__TIME_RATIO = (3d / 5); + private List predictionsList; private ArrayList bolusWatchDataList; private ArrayList basalWatchDataList; public List tempWatchDataList; @@ -58,10 +61,11 @@ public class BgGraphBuilder { //used for low resolution screen. - public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; + this.predictionsList = predictionsList; this.context = context; this.highMark = aBgList.get(aBgList.size() - 1).high; this.lowMark = aBgList.get(aBgList.size() - 1).low; @@ -80,10 +84,11 @@ public class BgGraphBuilder { this.bolusColor = bolusColor; } - public BgGraphBuilder(Context context, List aBgList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; + this.predictionsList = predictionsList; this.context = context; this.highMark = aBgList.get(aBgList.size() - 1).high; this.lowMark = aBgList.get(aBgList.size() - 1).low; @@ -109,6 +114,7 @@ public class BgGraphBuilder { } public List defaultLines() { + addBgReadingValues(); List lines = new ArrayList(); lines.add(highLine()); @@ -163,6 +169,7 @@ public class BgGraphBuilder { lines.add(basalLine((float) minChart, factor, highlight)); lines.add(bolusLine((float) minChart)); lines.add(smbLine((float) minChart)); + lines.add(predictionLine()); return lines; @@ -224,6 +231,24 @@ public class BgGraphBuilder { return line; } + private Line predictionLine() { + + List pointValues = new ArrayList(); + + long endTime = getPredictionEndTime(); + for (BgWatchData bwd: predictionsList) { + if(bwd.timestamp <= endTime) { + pointValues.add(new PointValue(fuzz(bwd.timestamp), (float) bwd.sgv)); + } + } + Line line = new Line(pointValues); + line.setColor(Color.MAGENTA); + line.setHasLines(false); + line.setPointRadius(pointSize); + line.setHasPoints(true); + return line; + } + @@ -365,9 +390,12 @@ public class BgGraphBuilder { timeFormat.setTimeZone(TimeZone.getDefault()); long start_hour = today.getTime().getTime(); long timeNow = System.currentTimeMillis(); + + long endTime = getPredictionEndTime(); + for (int l = 0; l <= 24; l++) { - if ((start_hour + (60000 * 60 * (l))) < timeNow) { - if ((start_hour + (60000 * 60 * (l + 1))) >= timeNow) { + if ((start_hour + (60000 * 60 * (l))) < endTime) { + if ((start_hour + (60000 * 60 * (l + 1))) >= endTime) { endHour = start_hour + (60000 * 60 * (l)); l = 25; } @@ -397,6 +425,17 @@ public class BgGraphBuilder { return xAxis; } + public long getPredictionEndTime() { + long maxPredictionDate = System.currentTimeMillis(); + for (BgWatchData prediction : + predictionsList) { + if (maxPredictionDate < prediction.timestamp) { + maxPredictionDate = prediction.timestamp; + } + } + return (long) Math.min(maxPredictionDate, System.currentTimeMillis() + MAX_PREDICTION__TIME_RATIO *timespan*1000*60*60); + } + public float fuzz(long value) { return (float) Math.round(value / fuzzyTimeDenom); } From 8db4a05e1cbb898762f9f62a5292c2dc508b5375 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 21 Feb 2018 14:32:48 +0100 Subject: [PATCH 12/74] wear high/low line fit to predictions --- .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index a0e46b8390..8924eb89e9 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -30,6 +30,7 @@ import lecho.lib.hellocharts.model.Viewport; */ public class BgGraphBuilder { public static final double MAX_PREDICTION__TIME_RATIO = (3d / 5); + private long predictionEndTime; private List predictionsList; private ArrayList bolusWatchDataList; private ArrayList basalWatchDataList; @@ -62,7 +63,6 @@ public class BgGraphBuilder { //used for low resolution screen. public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { - end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; @@ -82,6 +82,7 @@ public class BgGraphBuilder { this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; this.bolusColor = bolusColor; + this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) } public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { @@ -104,6 +105,9 @@ public class BgGraphBuilder { this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; this.bolusColor = bolusColor; + this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) + this.predictionEndTime = getPredictionEndTime(); + this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time; } public LineChartData lineData() { From 28c2779408bd4db0bf6ae94f15e8fb64a1cd5c49 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 21 Feb 2018 15:11:38 +0100 Subject: [PATCH 13/74] wear hour tics for predictions --- .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 8924eb89e9..fc7a3fbdd6 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -248,7 +248,9 @@ public class BgGraphBuilder { Line line = new Line(pointValues); line.setColor(Color.MAGENTA); line.setHasLines(false); - line.setPointRadius(pointSize); + int size = pointSize/2; + size = (size>0)?size:1; + line.setPointRadius(size); line.setHasPoints(true); return line; } @@ -412,7 +414,7 @@ public class BgGraphBuilder { //Add whole hours endTime the axis (as long as they are more than 15 mins away from the current time) for (int l = 0; l <= 24; l++) { long timestamp = endHour - (60000 * 60 * l); - if((timestamp - timeNow < 0) && (timestamp > start_time)) { + if((timestamp - endTime < 0) && (timestamp > start_time)) { if(Math.abs(timestamp - timeNow) > (1000 * 60 * 8 * timespan)){ xAxisValues.add(new AxisValue(fuzz(timestamp), (timeFormat.format(timestamp)).toCharArray())); }else { From c22c22f1d7d3aaa43a991275f8f0c0d716198528 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Wed, 21 Feb 2018 15:56:13 +0100 Subject: [PATCH 14/74] wear settings for predictions --- .../plugins/Wear/wearintegration/WatchUpdaterService.java | 2 +- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/pref_wear.xml | 6 ++++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java index 2091f2ad84..372afdc9e9 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java @@ -465,7 +465,7 @@ public class WatchUpdaterService extends WearableListenerService implements } final LoopPlugin.LastRun finalLastRun = LoopPlugin.lastRun; - if(finalLastRun != null && finalLastRun.request.hasPredictions && finalLastRun.constraintsProcessed != null){ + if(SP.getBoolean("wear_predictions", true) && finalLastRun != null && finalLastRun.request.hasPredictions && finalLastRun.constraintsProcessed != null){ List predArray = finalLastRun.constraintsProcessed.getPredictions(); if (!predArray.isEmpty()) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 319ebc2413..5997c12a9c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -935,5 +935,7 @@ Create announcements from errors Create Nightscout announcement for error dialogs and local alerts (also viewable in Careportal under Treatments) G5 + Show the predictions on the watchface. + Predictions diff --git a/app/src/main/res/xml/pref_wear.xml b/app/src/main/res/xml/pref_wear.xml index 9b51c4b17b..3a7ee15281 100644 --- a/app/src/main/res/xml/pref_wear.xml +++ b/app/src/main/res/xml/pref_wear.xml @@ -36,6 +36,12 @@ android:key="wear_notifySMB" android:summary="@string/wear_notifysmb_summary" android:title="@string/wear_notifysmb_title" /> + + \ No newline at end of file From 90ce3a524ff69d6c36a7ef93f446c0b2392e154a Mon Sep 17 00:00:00 2001 From: swissalpine Date: Wed, 21 Feb 2018 16:53:31 +0100 Subject: [PATCH 15/74] Update BIGChart.java --- .../java/info/nightscout/androidaps/watchfaces/BIGChart.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 4926e924cb..e6e8c45ef2 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -115,7 +115,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre sharedPrefs.registerOnSharedPreferenceChangeListener(this); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); DisplayMetrics metrics = getResources().getDisplayMetrics(); - if(metrics.widthPixels < SCREENSIZE_SMALL || metrics.widthPixels < SCREENSIZE_SMALL){ + if(metrics.widthPixels < SCREENSIZE_SMALL || metrics.heightPixels < SCREENSIZE_SMALL){ layoutView = inflater.inflate(R.layout.activity_bigchart_small, null); } else { layoutView = inflater.inflate(R.layout.activity_bigchart, null); @@ -679,4 +679,4 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre ListenerService.requestData(this); } } -} \ No newline at end of file +} From 20a005c89900b0eb7b2138480669c85583fe9657 Mon Sep 17 00:00:00 2001 From: swissalpine Date: Wed, 21 Feb 2018 16:55:25 +0100 Subject: [PATCH 16/74] Update NOChart.java --- .../nightscout/androidaps/watchfaces/NOChart.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/NOChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/NOChart.java index 328f101497..68b5e7f15a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/NOChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/NOChart.java @@ -13,6 +13,7 @@ import android.graphics.Paint; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Shader; +import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.os.SystemClock; @@ -22,6 +23,7 @@ import android.support.v4.content.LocalBroadcastManager; import android.support.wearable.view.WatchViewStub; import android.support.wearable.watchface.WatchFaceStyle; import android.text.format.DateFormat; +import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.view.LayoutInflater; @@ -30,6 +32,7 @@ import android.view.WindowInsets; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import com.google.android.gms.wearable.DataMap; import com.ustwo.clockwise.common.WatchFaceTime; @@ -40,6 +43,7 @@ import com.ustwo.clockwise.wearable.WatchFace; import java.util.ArrayList; import info.nightscout.androidaps.R; +import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.data.BasalWatchData; import info.nightscout.androidaps.data.BgWatchData; import info.nightscout.androidaps.data.ListenerService; @@ -52,6 +56,7 @@ import lecho.lib.hellocharts.view.LineChartView; */ public class NOChart extends WatchFace implements SharedPreferences.OnSharedPreferenceChangeListener { public final static IntentFilter INTENT_FILTER; + public static final int SCREENSIZE_SMALL = 280; public TextView mTime, mSgv, mTimestamp, mDelta, mAvgDelta; public RelativeLayout mRelativeLayout; public long sgvLevel = 0; @@ -96,6 +101,12 @@ public class NOChart extends WatchFace implements SharedPreferences.OnSharedPref sharedPrefs.registerOnSharedPreferenceChangeListener(this); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); layoutView = inflater.inflate(R.layout.activity_nochart, null); + DisplayMetrics metrics = getResources().getDisplayMetrics(); + if(metrics.widthPixels < SCREENSIZE_SMALL || metrics.heightPixels < SCREENSIZE_SMALL){ + layoutView = inflater.inflate(R.layout.activity_nochart_small, null); + } else { + layoutView = inflater.inflate(R.layout.activity_nochart, null); + } performViewSetup(); } @@ -514,4 +525,4 @@ public class NOChart extends WatchFace implements SharedPreferences.OnSharedPref ListenerService.requestData(this); // attempt endTime recover missing data } } -} \ No newline at end of file +} From f0886b44761e55da230ec2248b69517430cd3d1c Mon Sep 17 00:00:00 2001 From: swissalpine Date: Wed, 21 Feb 2018 16:56:25 +0100 Subject: [PATCH 17/74] Add files via upload --- wear/src/main/res/layout/activity_nochart_small.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 wear/src/main/res/layout/activity_nochart_small.xml diff --git a/wear/src/main/res/layout/activity_nochart_small.xml b/wear/src/main/res/layout/activity_nochart_small.xml new file mode 100644 index 0000000000..955a214580 --- /dev/null +++ b/wear/src/main/res/layout/activity_nochart_small.xml @@ -0,0 +1,12 @@ + + From 0781266dd21d0b58d6b8b343cc481a0e91ad747c Mon Sep 17 00:00:00 2001 From: swissalpine Date: Wed, 21 Feb 2018 16:57:42 +0100 Subject: [PATCH 18/74] Update rect_activity_bigchart_small.xml --- .../src/main/res/layout/rect_activity_bigchart_small.xml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/wear/src/main/res/layout/rect_activity_bigchart_small.xml b/wear/src/main/res/layout/rect_activity_bigchart_small.xml index 2726a17ae7..d080472443 100644 --- a/wear/src/main/res/layout/rect_activity_bigchart_small.xml +++ b/wear/src/main/res/layout/rect_activity_bigchart_small.xml @@ -61,6 +61,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" + android:layout_marginTop="-5sp" android:text="E xU/h IOB: x (x+x)" android:textAlignment="center" android:textColor="#FFFFFF" @@ -75,11 +76,12 @@ android:gravity="center_horizontal" /> + android:layout_marginTop="-5sp" + android:gravity="center_horizontal" + android:orientation="horizontal" + android:textAlignment="center"> Date: Wed, 21 Feb 2018 16:59:07 +0100 Subject: [PATCH 19/74] Update round_activity_bigchart_small.xml --- .../layout/round_activity_bigchart_small.xml | 83 ++++++++++--------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/wear/src/main/res/layout/round_activity_bigchart_small.xml b/wear/src/main/res/layout/round_activity_bigchart_small.xml index 8db4a3dd15..d080472443 100644 --- a/wear/src/main/res/layout/round_activity_bigchart_small.xml +++ b/wear/src/main/res/layout/round_activity_bigchart_small.xml @@ -13,49 +13,60 @@ android:gravity="center_horizontal"> + android:gravity="center_horizontal" + android:orientation="horizontal" + android:paddingTop="5dp" + android:textAlignment="center"> + android:text="---" + android:textColor="#FFFFFF" + android:textSize="24sp" /> + android:gravity="center_horizontal" + android:text="---" + android:textColor="#FFFFFF" + android:textSize="34sp" /> + android:text="---" + android:textColor="#FFFFFF" + android:textSize="24sp" /> + + - - + android:layout_marginTop="-5sp" + android:gravity="center_horizontal" + android:orientation="horizontal" + android:textAlignment="center"> + android:paddingTop="-5sp" + android:text="12:00" + android:textAlignment="center" + android:textColor="#FFFFFF" + android:textSize="34sp" /> + android:textSize="24sp" /> From 60df8da7294b0d0acae9424073c9cb85895ce698 Mon Sep 17 00:00:00 2001 From: swissalpine Date: Wed, 21 Feb 2018 20:49:32 +0100 Subject: [PATCH 20/74] Add files via upload --- .../layout/rect_activity_nochart_small.xml | 116 ++++++++++++++++++ .../layout/round_activity_nochart_small.xml | 116 ++++++++++++++++++ 2 files changed, 232 insertions(+) create mode 100644 wear/src/main/res/layout/rect_activity_nochart_small.xml create mode 100644 wear/src/main/res/layout/round_activity_nochart_small.xml diff --git a/wear/src/main/res/layout/rect_activity_nochart_small.xml b/wear/src/main/res/layout/rect_activity_nochart_small.xml new file mode 100644 index 0000000000..5391cea92a --- /dev/null +++ b/wear/src/main/res/layout/rect_activity_nochart_small.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wear/src/main/res/layout/round_activity_nochart_small.xml b/wear/src/main/res/layout/round_activity_nochart_small.xml new file mode 100644 index 0000000000..5391cea92a --- /dev/null +++ b/wear/src/main/res/layout/round_activity_nochart_small.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 6d3048a9b17291e59ebd8aa4613662bfd67b5620 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sat, 24 Feb 2018 17:58:05 +0100 Subject: [PATCH 21/74] wear predictions update on loop run --- .../nightscout/androidaps/plugins/Wear/WearPlugin.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java index b72a767278..07e7c77f22 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java @@ -10,6 +10,7 @@ import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.events.EventBolusRequested; import info.nightscout.androidaps.events.EventExtendedBolusChange; +import info.nightscout.androidaps.events.EventLoop; import info.nightscout.androidaps.events.EventNewBG; import info.nightscout.androidaps.events.EventNewBasalProfile; import info.nightscout.androidaps.events.EventPreferenceChange; @@ -18,6 +19,7 @@ import info.nightscout.androidaps.events.EventTempBasalChange; import info.nightscout.androidaps.events.EventTreatmentChange; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; +import info.nightscout.androidaps.plugins.OpenAPSMA.events.EventOpenAPSUpdateGui; import info.nightscout.androidaps.plugins.Overview.events.EventDismissBolusprogressIfRunning; import info.nightscout.androidaps.plugins.Overview.events.EventOverviewBolusProgress; import info.nightscout.androidaps.plugins.Wear.wearintegration.WatchUpdaterService; @@ -168,6 +170,11 @@ public class WearPlugin implements PluginBase { sendDataToWatch(true, true, false); } + @Subscribe + public void onStatusEvent(final EventOpenAPSUpdateGui ev){ + sendDataToWatch(true, true, false); + } + @Subscribe public void onStatusEvent(final EventExtendedBolusChange ev) { sendDataToWatch(true, true, false); From 436e03aa039a4a3ed4a5d2fb4e479c8f63806dcf Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sat, 24 Feb 2018 18:10:59 +0100 Subject: [PATCH 22/74] wear only print valid boluses --- .../plugins/Wear/wearintegration/WatchUpdaterService.java | 5 +++-- .../info/nightscout/androidaps/data/BolusWatchData.java | 1 + .../info/nightscout/androidaps/watchfaces/BIGChart.java | 1 + .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 6 +++--- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java index 372afdc9e9..e6bfa76dfd 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java @@ -459,7 +459,7 @@ public class WatchUpdaterService extends WearableListenerService implements List treatments = MainApp.getConfigBuilder().getTreatmentsFromHistory(); for (Treatment treatment:treatments) { if(treatment.date > startTimeWindow){ - boluses.add(treatmentMap(treatment.date, treatment.insulin, treatment.carbs, treatment.isSMB)); + boluses.add(treatmentMap(treatment.date, treatment.insulin, treatment.carbs, treatment.isSMB, treatment.isValid)); } } @@ -503,12 +503,13 @@ public class WatchUpdaterService extends WearableListenerService implements return dm; } - private DataMap treatmentMap(long date, double bolus, double carbs, boolean isSMB) { + private DataMap treatmentMap(long date, double bolus, double carbs, boolean isSMB, boolean isValid) { DataMap dm = new DataMap(); dm.putLong("date", date); dm.putDouble("bolus", bolus); dm.putDouble("carbs", carbs); dm.putBoolean("isSMB", isSMB); + dm.putBoolean("isValid", isValid); return dm; } diff --git a/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java b/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java index 7179602fa8..6a474f3632 100644 --- a/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java +++ b/wear/src/main/java/info/nightscout/androidaps/data/BolusWatchData.java @@ -9,4 +9,5 @@ public class BolusWatchData { public double bolus; public double carbs; public boolean isSMB; + public boolean isValid; } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 4926e924cb..2b4b969d62 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -412,6 +412,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre bwd.bolus = bolus.getDouble("bolus"); bwd.carbs = bolus.getDouble("carbs"); bwd.isSMB = bolus.getBoolean("isSMB"); + bwd.isValid = bolus.getBoolean("isValid"); bolusWatchDataList.add(bwd); } } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index fc7a3fbdd6..588437902b 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -206,14 +206,14 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && !bwd.isSMB) { + if(bwd.date > start_time && !bwd.isSMB && !bwd.isValid && bwd.bolus > 0) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } Line line = new Line(pointValues); line.setColor(bolusColor); line.setHasLines(false); - line.setPointRadius(pointSize); + line.setPointRadius(pointSize*2); line.setHasPoints(true); return line; } @@ -223,7 +223,7 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && bwd.isSMB) { + if(bwd.date > start_time && bwd.isSMB && !bwd.isValid && bwd.bolus > 0) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } From 9baea012253736e3ddaa4a2b8a975a7e84b3a573 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 11:32:00 +0200 Subject: [PATCH 23/74] Not everybody's profile & targets are in mg/dl :) --- .../Overview/Dialogs/NewCarbsDialog.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 15e93816bd..a2e3cd1c56 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -36,6 +36,7 @@ import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.data.DetailedBolusInfo; +import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.Source; import info.nightscout.androidaps.db.TempTarget; @@ -69,7 +70,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV1_DEFAULT = 5; private static final double FAV2_DEFAULT = 10; private static final double FAV3_DEFAULT = 20; - + final double tempTargetValue = 140d; private CheckBox suspendLoopCheckbox; private CheckBox startActivityTTCheckbox; @@ -237,9 +238,22 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D double prefTTDuration = SP.getDouble(R.string.key_activity_duration, 90d); double ttDuration = prefTTDuration > 0 ? prefTTDuration : 90d; double prefTT = SP.getDouble(R.string.key_activity_target, 140d); - double tt = prefTT > 0 ? prefTT : 140d; + double tt = 140d; + Profile currentProfile = MainApp.getConfigBuilder().getProfile(); + if(currentProfile.equals(null)) + return; + if(currentProfile.getUnits().equals("mmol")) { + tt = prefTT > 0 ? prefTT*18 : 140d; + } else + tt = prefTT > 0 ? prefTT : 140d; + + final double finalTT = tt; if (startActivityTTCheckbox.isChecked()) { - confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min "; + if(currentProfile.getUnits().equals("mmol")) { + confirmMessage += "
" + "TT: " + "" + finalTT + " mmol/l for " + ((int) ttDuration) + " min "; + } else + confirmMessage += "
" + "TT: " + "" + ((int) finalTT) + " mg/dl for " + ((int) ttDuration) + " min "; + } if (StringUtils.isNoneEmpty(food)) { @@ -286,8 +300,8 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D tempTarget.durationInMinutes = (int) ttDuration; tempTarget.reason = "Activity"; tempTarget.source = Source.USER; - tempTarget.low = (int) tt; - tempTarget.high = (int) tt; + tempTarget.low = (double) finalTT; + tempTarget.high = (double) finalTT; MainApp.getDbHelper().createOrUpdate(tempTarget); } @@ -326,4 +340,4 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D eventTime.setSeconds(second); timeButton.setText(DateUtil.timeString(eventTime)); } -} \ No newline at end of file +} From 7ca1fdc36ed3fe3d23baf507a9e4ca5f6b118050 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 11:54:24 +0200 Subject: [PATCH 24/74] removed unused var --- .../androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index a2e3cd1c56..43d7069e30 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -70,7 +70,6 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV1_DEFAULT = 5; private static final double FAV2_DEFAULT = 10; private static final double FAV3_DEFAULT = 20; - final double tempTargetValue = 140d; private CheckBox suspendLoopCheckbox; private CheckBox startActivityTTCheckbox; From 5b003c62e2ce09f6887cc9e2e97db97f3a68431a Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 14:07:35 +0200 Subject: [PATCH 25/74] added fix for mmol profiles & targets --- .../Overview/Dialogs/NewInsulinDialog.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java index 7c86cde764..dcb457aa35 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java @@ -246,8 +246,19 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, double ttDuration = prefTTDuration > 0 ? prefTTDuration : 45d; double prefTT = SP.getDouble(R.string.key_eatingsoon_target, 80d); double tt = prefTT > 0 ? prefTT : 80d; + Profile currentProfile = MainApp.getConfigBuilder().getProfile(); + if(currentProfile.equals(null)) + return; + if(currentProfile.getUnits().equals("mmol")) { + tt = prefTT > 0 ? prefTT*18 : 80d; + } else + tt = prefTT > 0 ? prefTT : 80d; + final double finalTT = tt; if (startESMCheckbox.isChecked()) { - confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min "; + if(currentProfile.getUnits().equals("mmol")){ + confirmMessage += "
" + "TT: " + "" + tt/18 + "mmol for " + ((int) ttDuration) + " min "; + } else + confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min "; } if (!initialEventTime.equals(eventTime)) { @@ -277,8 +288,8 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, tempTarget.durationInMinutes = (int) ttDuration; tempTarget.reason = "Eating soon"; tempTarget.source = Source.USER; - tempTarget.low = (int) tt; - tempTarget.high = (int) tt; + tempTarget.low = (int) finalTT; + tempTarget.high = (int) finalTT; MainApp.getDbHelper().createOrUpdate(tempTarget); } @@ -339,4 +350,4 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, eventTime.setSeconds(second); timeButton.setText(DateUtil.timeString(eventTime)); } -} \ No newline at end of file +} From d3a7176209f8edc0f0fe3beb9944f9b4cab5efab Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 15:20:00 +0200 Subject: [PATCH 26/74] Update MainApp.java --- app/src/main/java/info/nightscout/androidaps/MainApp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index bfa801cbdb..412383c6e1 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -139,7 +139,7 @@ public class MainApp extends Application { if (Config.DANAR) pluginsList.add(DanaRv2Plugin.getPlugin()); if (Config.DANAR) pluginsList.add(DanaRSPlugin.getPlugin()); pluginsList.add(CareportalPlugin.getPlugin()); - if (Config.DANAR) pluginsList.add(InsightPumpPlugin.getPlugin()); + // if (Config.DANAR) pluginsList.add(InsightPumpPlugin.getPlugin()); // <-- Enable Insight plugin here if (Config.MDI) pluginsList.add(MDIPlugin.getPlugin()); if (Config.VIRTUALPUMP) pluginsList.add(VirtualPumpPlugin.getPlugin()); if (Config.APS) pluginsList.add(LoopPlugin.getPlugin()); From 9456a246557661635b40e34f4fb180929cc3dafc Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 16:22:05 +0200 Subject: [PATCH 27/74] Adding Eating soon mode to options --- app/src/main/res/layout/overview_newcarbs_dialog.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/layout/overview_newcarbs_dialog.xml b/app/src/main/res/layout/overview_newcarbs_dialog.xml index 67f62e8cf2..7f00891e40 100644 --- a/app/src/main/res/layout/overview_newcarbs_dialog.xml +++ b/app/src/main/res/layout/overview_newcarbs_dialog.xml @@ -39,6 +39,13 @@ android:layout_marginTop="5dp" android:text="Start activity TT"/> + + - \ No newline at end of file + From 38933ac323babe07e692b87d39cb290334984c58 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 16:27:52 +0200 Subject: [PATCH 28/74] Adding Eating soon TT check to carbs I use that a lot for meal anouncement only --- .../Overview/Dialogs/NewCarbsDialog.java | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 43d7069e30..eb56c8b086 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -72,6 +72,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV3_DEFAULT = 20; private CheckBox suspendLoopCheckbox; private CheckBox startActivityTTCheckbox; + private CheckBox ESMCheckbox; private Integer maxCarbs; @@ -127,6 +128,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher); startActivityTTCheckbox = view.findViewById(R.id.newcarbs_activity_tt); + ESMCheckbox = view.findViewById(R.id.carbs_eating_soon_tt); dateButton = view.findViewById(R.id.newcarbs_eventdate); timeButton = view.findViewById(R.id.newcarb_eventtime); @@ -235,26 +237,40 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D } double prefTTDuration = SP.getDouble(R.string.key_activity_duration, 90d); + double eatingSoonTTDuration = SP.getDouble(R.string.key_eatingsoon_duration, 45d); + double eatingSoonTT = SP.getDouble(R.string.key_eatingsoon_target, 90d); double ttDuration = prefTTDuration > 0 ? prefTTDuration : 90d; + final double esDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : 45d; double prefTT = SP.getDouble(R.string.key_activity_target, 140d); + double tt = 140d; + double esTT = 90d; Profile currentProfile = MainApp.getConfigBuilder().getProfile(); if(currentProfile.equals(null)) return; if(currentProfile.getUnits().equals("mmol")) { + esTT = eatingSoonTT > 0 ? eatingSoonTT*18 : 90d; tt = prefTT > 0 ? prefTT*18 : 140d; } else + esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; tt = prefTT > 0 ? prefTT : 140d; - final double finalTT = tt; - if (startActivityTTCheckbox.isChecked()) { + + if (startActivityTTCheckbox.isChecked() ||(startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked()) ) { if(currentProfile.getUnits().equals("mmol")) { - confirmMessage += "
" + "TT: " + "" + finalTT + " mmol/l for " + ((int) ttDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + tt/18 + " mmol/l for " + ((int) ttDuration) + " min "; } else - confirmMessage += "
" + "TT: " + "" + ((int) finalTT) + " mg/dl for " + ((int) ttDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + ((int) tt) + " mg/dl for " + ((int) ttDuration) + " min "; + + }else if (ESMCheckbox.isChecked()) { + if(currentProfile.getUnits().equals("mmol")) { + confirmMessage += "
" + "TT: " + "" + esTT/18 + " mmol/l for " + ((int) esDuration) + " min "; + } else + confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esDuration) + " min "; } - + final double finalTT = tt; + final double finalEsTT = esTT; if (StringUtils.isNoneEmpty(food)) { confirmMessage += "
" + "Food: " + food; } @@ -293,7 +309,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D }); } - if (startActivityTTCheckbox.isChecked()) { + if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked())) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); tempTarget.durationInMinutes = (int) ttDuration; @@ -302,6 +318,15 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D tempTarget.low = (double) finalTT; tempTarget.high = (double) finalTT; MainApp.getDbHelper().createOrUpdate(tempTarget); + } else if (ESMCheckbox.isChecked()) { + TempTarget tempTarget = new TempTarget(); + tempTarget.date = System.currentTimeMillis(); + tempTarget.durationInMinutes = (int) esDuration; + tempTarget.reason = "Eating soon"; + tempTarget.source = Source.USER; + tempTarget.low = (double) finalEsTT; + tempTarget.high = (double) finalEsTT; + MainApp.getDbHelper().createOrUpdate(tempTarget); } if (finalCarbsAfterConstraints > 0 || food != null) { From bea486d81693a2e5402b17b53695281fc846c4d9 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 1 Mar 2018 16:57:36 +0200 Subject: [PATCH 29/74] Don't show confirmation on empty message/input --- .../Overview/Dialogs/NewCarbsDialog.java | 119 +++++++++--------- 1 file changed, 62 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index eb56c8b086..1d028bf051 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -278,75 +278,80 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D if (!initialEventTime.equals(eventTime)) { confirmMessage += "
Time: " + DateUtil.dateAndTimeString(eventTime); } + if(confirmMessage.length() > 0) { - final int finalCarbsAfterConstraints = carbsAfterConstraints; + final int finalCarbsAfterConstraints = carbsAfterConstraints; - final Context context = getContext(); - final AlertDialog.Builder builder = new AlertDialog.Builder(context); + final Context context = getContext(); + final AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(this.getContext().getString(R.string.confirmation)); - if (confirmMessage.startsWith("
")) - confirmMessage = confirmMessage.substring("
".length()); - builder.setMessage(Html.fromHtml(confirmMessage)); - builder.setPositiveButton(getString(R.string.ok), (dialog, id) -> { - synchronized (builder) { - if (accepted) { - log.debug("guarding: already accepted"); - return; - } - accepted = true; + builder.setTitle(this.getContext().getString(R.string.confirmation)); + if (confirmMessage.startsWith("
")) + confirmMessage = confirmMessage.substring("
".length()); - if (suspendLoopCheckbox.isChecked()) { - final LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop(); - activeloop.suspendTo(System.currentTimeMillis() + 30L * 60 * 1000); - ConfigBuilderPlugin.getCommandQueue().cancelTempBasal(true, new Callback() { - @Override - public void run() { - if (!result.success) { - ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); + builder.setMessage(Html.fromHtml(confirmMessage)); + builder.setPositiveButton(getString(R.string.ok), (dialog, id) -> { + synchronized (builder) { + if (accepted) { + log.debug("guarding: already accepted"); + return; + } + accepted = true; + + if (suspendLoopCheckbox.isChecked()) { + final LoopPlugin activeloop = ConfigBuilderPlugin.getActiveLoop(); + activeloop.suspendTo(System.currentTimeMillis() + 30L * 60 * 1000); + ConfigBuilderPlugin.getCommandQueue().cancelTempBasal(true, new Callback() { + @Override + public void run() { + if (!result.success) { + ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); + } } - } - }); - } + }); + } - if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked())) { - TempTarget tempTarget = new TempTarget(); - tempTarget.date = System.currentTimeMillis(); - tempTarget.durationInMinutes = (int) ttDuration; - tempTarget.reason = "Activity"; - tempTarget.source = Source.USER; - tempTarget.low = (double) finalTT; - tempTarget.high = (double) finalTT; - MainApp.getDbHelper().createOrUpdate(tempTarget); - } else if (ESMCheckbox.isChecked()) { - TempTarget tempTarget = new TempTarget(); - tempTarget.date = System.currentTimeMillis(); - tempTarget.durationInMinutes = (int) esDuration; - tempTarget.reason = "Eating soon"; - tempTarget.source = Source.USER; - tempTarget.low = (double) finalEsTT; - tempTarget.high = (double) finalEsTT; - MainApp.getDbHelper().createOrUpdate(tempTarget); - } + if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked())) { + TempTarget tempTarget = new TempTarget(); + tempTarget.date = System.currentTimeMillis(); + tempTarget.durationInMinutes = (int) ttDuration; + tempTarget.reason = "Activity"; + tempTarget.source = Source.USER; + tempTarget.low = (double) finalTT; + tempTarget.high = (double) finalTT; + MainApp.getDbHelper().createOrUpdate(tempTarget); + } else if (ESMCheckbox.isChecked()) { + TempTarget tempTarget = new TempTarget(); + tempTarget.date = System.currentTimeMillis(); + tempTarget.durationInMinutes = (int) esDuration; + tempTarget.reason = "Eating soon"; + tempTarget.source = Source.USER; + tempTarget.low = (double) finalEsTT; + tempTarget.high = (double) finalEsTT; + MainApp.getDbHelper().createOrUpdate(tempTarget); + } - if (finalCarbsAfterConstraints > 0 || food != null) { - DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); - detailedBolusInfo.date = eventTime.getTime(); - detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION; - detailedBolusInfo.carbs = finalCarbsAfterConstraints; + if (finalCarbsAfterConstraints > 0 || food != null) { + DetailedBolusInfo detailedBolusInfo = new DetailedBolusInfo(); + detailedBolusInfo.date = eventTime.getTime(); + detailedBolusInfo.eventType = CareportalEvent.CARBCORRECTION; + detailedBolusInfo.carbs = finalCarbsAfterConstraints; // detailedBolusInfo.food = food; - detailedBolusInfo.context = context; - detailedBolusInfo.source = Source.USER; - MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo); + detailedBolusInfo.context = context; + detailedBolusInfo.source = Source.USER; + MainApp.getConfigBuilder().addToHistoryTreatment(detailedBolusInfo); + } } - } - }); - builder.setNegativeButton(getString(R.string.cancel), null); - builder.show(); - dismiss(); + }); + builder.setNegativeButton(getString(R.string.cancel), null); + builder.show(); + dismiss(); + } else + dismiss(); } catch (Exception e) { log.error("Unhandled exception", e); } + } @Override From 8f813d52fa8d664f473411555afb8dc1dd9cc82b Mon Sep 17 00:00:00 2001 From: Johannes Mockenhaupt Date: Thu, 1 Mar 2018 12:25:20 +0100 Subject: [PATCH 30/74] WatchUpdaterService: process requests in a separate thread. Previously, requests were executed on the main thread (base class is Service, not IntentService), which prompted Android to kill AAPS multiple times a day due to timeouts (of currently unknown origins). (cherry picked from commit 5ae45d5) --- .../wearintegration/WatchUpdaterService.java | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java index 74423fe7ac..42e2715f6b 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/wearintegration/WatchUpdaterService.java @@ -6,6 +6,8 @@ import android.content.IntentFilter; import android.content.SharedPreferences; import android.os.BatteryManager; import android.os.Bundle; +import android.os.Handler; +import android.os.HandlerThread; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.util.Log; @@ -82,6 +84,7 @@ public class WatchUpdaterService extends WearableListenerService implements private static Logger log = LoggerFactory.getLogger(WatchUpdaterService.class); + private Handler handler; @Override public void onCreate() { @@ -91,6 +94,11 @@ public class WatchUpdaterService extends WearableListenerService implements if (wear_integration) { googleApiConnect(); } + if (handler == null) { + HandlerThread handlerThread = new HandlerThread(this.getClass().getSimpleName() + "Handler"); + handlerThread.start(); + handler = new Handler(handlerThread.getLooper()); + } } public void listenForChangeInSettings() { @@ -123,34 +131,33 @@ public class WatchUpdaterService extends WearableListenerService implements @Override public int onStartCommand(Intent intent, int flags, int startId) { - String action = null; - if (intent != null) { - action = intent.getAction(); - } + String action = intent != null ? intent.getAction() : null; if (wear_integration) { - if (googleApiClient.isConnected()) { - if (ACTION_RESEND.equals(action)) { - resendData(); - } else if (ACTION_OPEN_SETTINGS.equals(action)) { - sendNotification(); - } else if (ACTION_SEND_STATUS.equals(action)) { - sendStatus(); - } else if (ACTION_SEND_BASALS.equals(action)) { - sendBasals(); - } else if (ACTION_SEND_BOLUSPROGRESS.equals(action)) { - sendBolusProgress(intent.getIntExtra("progresspercent", 0), intent.hasExtra("progressstatus") ? intent.getStringExtra("progressstatus") : ""); - } else if (ACTION_SEND_ACTIONCONFIRMATIONREQUEST.equals(action)) { - String title = intent.getStringExtra("title"); - String message = intent.getStringExtra("message"); - String actionstring = intent.getStringExtra("actionstring"); - sendActionConfirmationRequest(title, message, actionstring); + handler.post(() -> { + if (googleApiClient.isConnected()) { + if (ACTION_RESEND.equals(action)) { + resendData(); + } else if (ACTION_OPEN_SETTINGS.equals(action)) { + sendNotification(); + } else if (ACTION_SEND_STATUS.equals(action)) { + sendStatus(); + } else if (ACTION_SEND_BASALS.equals(action)) { + sendBasals(); + } else if (ACTION_SEND_BOLUSPROGRESS.equals(action)) { + sendBolusProgress(intent.getIntExtra("progresspercent", 0), intent.hasExtra("progressstatus") ? intent.getStringExtra("progressstatus") : ""); + } else if (ACTION_SEND_ACTIONCONFIRMATIONREQUEST.equals(action)) { + String title = intent.getStringExtra("title"); + String message = intent.getStringExtra("message"); + String actionstring = intent.getStringExtra("actionstring"); + sendActionConfirmationRequest(title, message, actionstring); + } else { + sendData(); + } } else { - sendData(); + googleApiClient.connect(); } - } else { - googleApiClient.connect(); - } + }); } return START_STICKY; From d6794816984730bece4718e153de3b9778fdcdbd Mon Sep 17 00:00:00 2001 From: Johannes Mockenhaupt Date: Thu, 1 Mar 2018 16:11:57 +0100 Subject: [PATCH 31/74] Remove unused method. --- .../nightscout/androidaps/plugins/Wear/WearPlugin.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java index b72a767278..e50fb1b9a6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/WearPlugin.java @@ -251,11 +251,4 @@ public class WearPlugin implements PluginBase { public static void unRegisterWatchUpdaterService() { watchUS = null; } - - public void overviewNotification(int id, String message) { - if(SP.getBoolean("wear_overview_notification", false)){ - ActionStringHandler.expectNotificationAction(message, id); - } - } - } From 65ddf5ced5a52db150da688ba1a65c84bbcd197c Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Thu, 1 Mar 2018 18:31:29 +0200 Subject: [PATCH 32/74] format using the Profile class method and Constants --- .../plugins/Overview/Dialogs/NewInsulinDialog.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java index dcb457aa35..3c57346c39 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java @@ -249,14 +249,14 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, Profile currentProfile = MainApp.getConfigBuilder().getProfile(); if(currentProfile.equals(null)) return; - if(currentProfile.getUnits().equals("mmol")) { - tt = prefTT > 0 ? prefTT*18 : 80d; + if(currentProfile.getUnits().equals(Constants.MMOL)) { + tt = prefTT > 0 ? Profile.toMgdl(prefTT, Constants.MGDL) : 80d; } else tt = prefTT > 0 ? prefTT : 80d; final double finalTT = tt; if (startESMCheckbox.isChecked()) { if(currentProfile.getUnits().equals("mmol")){ - confirmMessage += "
" + "TT: " + "" + tt/18 + "mmol for " + ((int) ttDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt, Constants.MMOL) + "mmol for " + ((int) ttDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min "; } From c6a46129df7b98fb5da7f1b8e348c8528cd655c3 Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Thu, 1 Mar 2018 18:38:56 +0200 Subject: [PATCH 33/74] format using the Profile class method and Constants --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 1d028bf051..1508b003f5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -248,23 +248,23 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D Profile currentProfile = MainApp.getConfigBuilder().getProfile(); if(currentProfile.equals(null)) return; - if(currentProfile.getUnits().equals("mmol")) { - esTT = eatingSoonTT > 0 ? eatingSoonTT*18 : 90d; - tt = prefTT > 0 ? prefTT*18 : 140d; + if(currentProfile.getUnits().equals(Constants.MMOL)) { + esTT = eatingSoonTT > 0 ? eatingSoonTT*Constants.MMOLL_TO_MGDL : 90d; + tt = prefTT > 0 ? prefTT*Constants.MMOLL_TO_MGDL : 140d; } else esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; tt = prefTT > 0 ? prefTT : 140d; if (startActivityTTCheckbox.isChecked() ||(startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked()) ) { - if(currentProfile.getUnits().equals("mmol")) { - confirmMessage += "
" + "TT: " + "" + tt/18 + " mmol/l for " + ((int) ttDuration) + " min "; + if(currentProfile.getUnits().equals(Constants.MMOL)) { + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt,Constants.MGDL) + " mmol/l for " + ((int) ttDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) tt) + " mg/dl for " + ((int) ttDuration) + " min "; }else if (ESMCheckbox.isChecked()) { - if(currentProfile.getUnits().equals("mmol")) { - confirmMessage += "
" + "TT: " + "" + esTT/18 + " mmol/l for " + ((int) esDuration) + " min "; + if(currentProfile.getUnits().equals(Constants.MMOL)) { + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esDuration) + " min "; From 2fb0e6edc19b025d6953fe8c33937716caae504b Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Thu, 1 Mar 2018 18:40:06 +0200 Subject: [PATCH 34/74] format using the Profile class method and Constants --- .../androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java index 3c57346c39..d9f9dcebfa 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java @@ -256,7 +256,7 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, final double finalTT = tt; if (startESMCheckbox.isChecked()) { if(currentProfile.getUnits().equals("mmol")){ - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt, Constants.MMOL) + "mmol for " + ((int) ttDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt, Constants.MGDL) + " mmol for " + ((int) ttDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) tt) + "mg/dl for " + ((int) ttDuration) + " min "; } From 3edec79b8d45faa8e3d26ae5382e77b9b7b00386 Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Thu, 1 Mar 2018 21:41:52 +0200 Subject: [PATCH 35/74] fixing identation and equals() to == --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 13 +++++++++---- .../plugins/Overview/Dialogs/NewInsulinDialog.java | 8 ++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 1508b003f5..45b73762c5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -18,6 +18,7 @@ import android.view.WindowManager; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; +import android.widget.RadioButton; import android.widget.TextView; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; @@ -71,8 +72,8 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV2_DEFAULT = 10; private static final double FAV3_DEFAULT = 20; private CheckBox suspendLoopCheckbox; - private CheckBox startActivityTTCheckbox; - private CheckBox ESMCheckbox; + private RadioButton startActivityTTCheckbox; + private RadioButton ESMCheckbox; private Integer maxCarbs; @@ -212,6 +213,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_3), FAV3_DEFAULT)); validateInputs(); break; + } } @@ -246,7 +248,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D double tt = 140d; double esTT = 90d; Profile currentProfile = MainApp.getConfigBuilder().getProfile(); - if(currentProfile.equals(null)) + if(currentProfile == null) return; if(currentProfile.getUnits().equals(Constants.MMOL)) { esTT = eatingSoonTT > 0 ? eatingSoonTT*Constants.MMOLL_TO_MGDL : 90d; @@ -257,12 +259,15 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D if (startActivityTTCheckbox.isChecked() ||(startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked()) ) { + ESMCheckbox.setChecked(true); if(currentProfile.getUnits().equals(Constants.MMOL)) { confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt,Constants.MGDL) + " mmol/l for " + ((int) ttDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) tt) + " mg/dl for " + ((int) ttDuration) + " min "; - }else if (ESMCheckbox.isChecked()) { + } + if (ESMCheckbox.isChecked()) { + startActivityTTCheckbox.setChecked(true); if(currentProfile.getUnits().equals(Constants.MMOL)) { confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esDuration) + " min "; } else diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java index d9f9dcebfa..356c3a9b3d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java @@ -247,12 +247,12 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, double prefTT = SP.getDouble(R.string.key_eatingsoon_target, 80d); double tt = prefTT > 0 ? prefTT : 80d; Profile currentProfile = MainApp.getConfigBuilder().getProfile(); - if(currentProfile.equals(null)) + if(currentProfile == null) return; - if(currentProfile.getUnits().equals(Constants.MMOL)) { + if(currentProfile.getUnits().equals(Constants.MMOL)) tt = prefTT > 0 ? Profile.toMgdl(prefTT, Constants.MGDL) : 80d; - } else - tt = prefTT > 0 ? prefTT : 80d; + else + tt = prefTT > 0 ? prefTT : 80d; final double finalTT = tt; if (startESMCheckbox.isChecked()) { if(currentProfile.getUnits().equals("mmol")){ From b3a10b47ce5ffc5bddfc6508a0e12b053daede0b Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Thu, 1 Mar 2018 21:57:30 +0200 Subject: [PATCH 36/74] undo the RadioButton tests --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 45b73762c5..cf9a765617 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -72,8 +72,8 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV2_DEFAULT = 10; private static final double FAV3_DEFAULT = 20; private CheckBox suspendLoopCheckbox; - private RadioButton startActivityTTCheckbox; - private RadioButton ESMCheckbox; + private CheckBox startActivityTTCheckbox; + private CheckBox ESMCheckbox; private Integer maxCarbs; @@ -258,16 +258,14 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D tt = prefTT > 0 ? prefTT : 140d; - if (startActivityTTCheckbox.isChecked() ||(startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked()) ) { - ESMCheckbox.setChecked(true); + if (startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt,Constants.MGDL) + " mmol/l for " + ((int) ttDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) tt) + " mg/dl for " + ((int) ttDuration) + " min "; } - if (ESMCheckbox.isChecked()) { - startActivityTTCheckbox.setChecked(true); + if (ESMCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esDuration) + " min "; } else From ab3953687660e90a1a0e2cbc00f9fa2ee41bd9cc Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 10:12:05 +0200 Subject: [PATCH 37/74] Only one TT can be selected --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index cf9a765617..bfcc136ce8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -141,6 +141,10 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D dateButton.setOnClickListener(this); timeButton.setOnClickListener(this); + //To be able to select only one TT at a time + ESMCheckbox.setOnClickListener(this); + startActivityTTCheckbox.setOnClickListener(this); + // TODO prefilling carbs, maybe // TODO maybe update suggested carbs to target TT when checked // APSResult lastAPSResult = ConfigBuilderPlugin.getActiveAPS().getLastAPSResult(); @@ -213,6 +217,12 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_3), FAV3_DEFAULT)); validateInputs(); break; + case R.id.newcarbs_activity_tt: + ESMCheckbox.setChecked(false); + break; + case R.id.carbs_eating_soon_tt: + startActivityTTCheckbox.setChecked(false); + break; } } From 9dd129bbe66fa61df928fdd048144b54befe1da6 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 10:37:12 +0200 Subject: [PATCH 38/74] Revert "Update MainApp.java" This reverts commit d3a7176209f8edc0f0fe3beb9944f9b4cab5efab. reverting changess to app/src/main/java/info/nightscout/androidaps/MainApp.java --- app/src/main/java/info/nightscout/androidaps/MainApp.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index 412383c6e1..bfa801cbdb 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -139,7 +139,7 @@ public class MainApp extends Application { if (Config.DANAR) pluginsList.add(DanaRv2Plugin.getPlugin()); if (Config.DANAR) pluginsList.add(DanaRSPlugin.getPlugin()); pluginsList.add(CareportalPlugin.getPlugin()); - // if (Config.DANAR) pluginsList.add(InsightPumpPlugin.getPlugin()); // <-- Enable Insight plugin here + if (Config.DANAR) pluginsList.add(InsightPumpPlugin.getPlugin()); if (Config.MDI) pluginsList.add(MDIPlugin.getPlugin()); if (Config.VIRTUALPUMP) pluginsList.add(VirtualPumpPlugin.getPlugin()); if (Config.APS) pluginsList.add(LoopPlugin.getPlugin()); From f3a12be0bed9a8033678e76f7a0756e79a51be8c Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 14:53:19 +0200 Subject: [PATCH 39/74] renaming ESMCheckbox to startEsTTCheckbox --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index bfcc136ce8..cbe6575809 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -73,7 +73,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV3_DEFAULT = 20; private CheckBox suspendLoopCheckbox; private CheckBox startActivityTTCheckbox; - private CheckBox ESMCheckbox; + private CheckBox startEsTTCheckbox; private Integer maxCarbs; @@ -129,7 +129,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher); startActivityTTCheckbox = view.findViewById(R.id.newcarbs_activity_tt); - ESMCheckbox = view.findViewById(R.id.carbs_eating_soon_tt); + startEsTTCheckbox = view.findViewById(R.id.carbs_eating_soon_tt); dateButton = view.findViewById(R.id.newcarbs_eventdate); timeButton = view.findViewById(R.id.newcarb_eventtime); @@ -142,7 +142,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D timeButton.setOnClickListener(this); //To be able to select only one TT at a time - ESMCheckbox.setOnClickListener(this); + startEsTTCheckbox.setOnClickListener(this); startActivityTTCheckbox.setOnClickListener(this); // TODO prefilling carbs, maybe @@ -218,7 +218,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D validateInputs(); break; case R.id.newcarbs_activity_tt: - ESMCheckbox.setChecked(false); + startEsTTCheckbox.setChecked(false); break; case R.id.carbs_eating_soon_tt: startActivityTTCheckbox.setChecked(false); @@ -275,7 +275,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D confirmMessage += "
" + "TT: " + "" + ((int) tt) + " mg/dl for " + ((int) ttDuration) + " min "; } - if (ESMCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { + if (startEsTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esDuration) + " min "; } else @@ -324,7 +324,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D }); } - if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && ESMCheckbox.isChecked())) { + if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && startEsTTCheckbox.isChecked())) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); tempTarget.durationInMinutes = (int) ttDuration; @@ -333,7 +333,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D tempTarget.low = (double) finalTT; tempTarget.high = (double) finalTT; MainApp.getDbHelper().createOrUpdate(tempTarget); - } else if (ESMCheckbox.isChecked()) { + } else if (startEsTTCheckbox.isChecked()) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); tempTarget.durationInMinutes = (int) esDuration; From e923bf21560d354cd69028fe23b46f324ac5eedb Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 15:09:03 +0200 Subject: [PATCH 40/74] As Adrian asked .... Profile.toMgDl() --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index cbe6575809..d6254fd443 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -261,12 +261,12 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D if(currentProfile == null) return; if(currentProfile.getUnits().equals(Constants.MMOL)) { - esTT = eatingSoonTT > 0 ? eatingSoonTT*Constants.MMOLL_TO_MGDL : 90d; - tt = prefTT > 0 ? prefTT*Constants.MMOLL_TO_MGDL : 140d; - } else - esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; - tt = prefTT > 0 ? prefTT : 140d; - + esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,Constants.MGDL) : 90d; + tt = prefTT > 0 ? Profile.toMgdl(prefTT,Constants.MGDL) : 140d; + } else { + esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; + tt = prefTT > 0 ? prefTT : 140d; + } if (startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { From 6c75b1b317bc4b21790b5f507b34c4952be6281d Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 15:28:32 +0200 Subject: [PATCH 41/74] more readable var names and --- .../Overview/Dialogs/NewCarbsDialog.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index d6254fd443..ab0cd8dde0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -248,41 +248,41 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D confirmMessage += "
" + "Loop: " + "" + "Suspend for 30 min"; } - double prefTTDuration = SP.getDouble(R.string.key_activity_duration, 90d); + double activityTTDurationSettings = SP.getDouble(R.string.key_activity_duration, 90d); double eatingSoonTTDuration = SP.getDouble(R.string.key_eatingsoon_duration, 45d); double eatingSoonTT = SP.getDouble(R.string.key_eatingsoon_target, 90d); - double ttDuration = prefTTDuration > 0 ? prefTTDuration : 90d; - final double esDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : 45d; + double activityTTDuration = activityTTDurationSettings > 0 ? activityTTDurationSettings : 90d; + final double esTTDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : 45d; double prefTT = SP.getDouble(R.string.key_activity_target, 140d); - double tt = 140d; + double activityTT = 140d; double esTT = 90d; Profile currentProfile = MainApp.getConfigBuilder().getProfile(); if(currentProfile == null) return; if(currentProfile.getUnits().equals(Constants.MMOL)) { esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,Constants.MGDL) : 90d; - tt = prefTT > 0 ? Profile.toMgdl(prefTT,Constants.MGDL) : 140d; + activityTT = prefTT > 0 ? Profile.toMgdl(prefTT,Constants.MGDL) : 140d; } else { esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; - tt = prefTT > 0 ? prefTT : 140d; + activityTT = prefTT > 0 ? prefTT : 140d; } if (startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(tt,Constants.MGDL) + " mmol/l for " + ((int) ttDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(activityTT,Constants.MGDL) + " mmol/l for " + ((int) activityTTDuration) + " min "; } else - confirmMessage += "
" + "TT: " + "" + ((int) tt) + " mg/dl for " + ((int) ttDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + ((int) activityTT) + " mg/dl for " + ((int) activityTTDuration) + " min "; } if (startEsTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min "; } else - confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esTTDuration) + " min "; } - final double finalTT = tt; + final double finalTT = activityTT; final double finalEsTT = esTT; if (StringUtils.isNoneEmpty(food)) { confirmMessage += "
" + "Food: " + food; @@ -327,7 +327,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && startEsTTCheckbox.isChecked())) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); - tempTarget.durationInMinutes = (int) ttDuration; + tempTarget.durationInMinutes = (int) activityTTDuration; tempTarget.reason = "Activity"; tempTarget.source = Source.USER; tempTarget.low = (double) finalTT; @@ -336,7 +336,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D } else if (startEsTTCheckbox.isChecked()) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); - tempTarget.durationInMinutes = (int) esDuration; + tempTarget.durationInMinutes = (int) esTTDuration; tempTarget.reason = "Eating soon"; tempTarget.source = Source.USER; tempTarget.low = (double) finalEsTT; From ea29b6ad82ca68e6d2b44b29b36040e2dbbf58c7 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 16:33:53 +0200 Subject: [PATCH 42/74] propper conversion from MMOL to MgDl --- .../androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java | 4 ++-- .../androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index ab0cd8dde0..5e2a811dbb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -261,8 +261,8 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D if(currentProfile == null) return; if(currentProfile.getUnits().equals(Constants.MMOL)) { - esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,Constants.MGDL) : 90d; - activityTT = prefTT > 0 ? Profile.toMgdl(prefTT,Constants.MGDL) : 140d; + esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,Constants.MMOL) : 90d; + activityTT = prefTT > 0 ? Profile.toMgdl(prefTT,Constants.MMOL) : 140d; } else { esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; activityTT = prefTT > 0 ? prefTT : 140d; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java index 356c3a9b3d..0b8b263262 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewInsulinDialog.java @@ -250,7 +250,7 @@ public class NewInsulinDialog extends DialogFragment implements OnClickListener, if(currentProfile == null) return; if(currentProfile.getUnits().equals(Constants.MMOL)) - tt = prefTT > 0 ? Profile.toMgdl(prefTT, Constants.MGDL) : 80d; + tt = prefTT > 0 ? Profile.toMgdl(prefTT, Constants.MMOL) : 80d; else tt = prefTT > 0 ? prefTT : 80d; final double finalTT = tt; From 6443502808e8a21d4539ad2b6bf1b29cedbb7c8a Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Fri, 2 Mar 2018 16:41:25 +0200 Subject: [PATCH 43/74] reduced if...else to single line as Adrian suggested --- .../plugins/Overview/Dialogs/NewCarbsDialog.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 5e2a811dbb..9ecf426a72 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -260,13 +260,9 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D Profile currentProfile = MainApp.getConfigBuilder().getProfile(); if(currentProfile == null) return; - if(currentProfile.getUnits().equals(Constants.MMOL)) { - esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,Constants.MMOL) : 90d; - activityTT = prefTT > 0 ? Profile.toMgdl(prefTT,Constants.MMOL) : 140d; - } else { - esTT = eatingSoonTT > 0 ? eatingSoonTT : 90d; - activityTT = prefTT > 0 ? prefTT : 140d; - } + + esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,currentProfile.getUnits()) : 90d; + activityTT = prefTT > 0 ? Profile.toMgdl(prefTT,currentProfile.getUnits()) : 140d; if (startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { From 7d8674aa610436ec640d22ed55818715c23f6509 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Fri, 2 Mar 2018 21:09:09 +0100 Subject: [PATCH 44/74] fix 5m-impact parameter - always was 0 --- .../plugins/OpenAPSAMA/DetermineBasalAdapterAMAJS.java | 3 ++- .../plugins/OpenAPSSMB/DetermineBasalAdapterSMBJS.java | 3 ++- .../nightscout/androidaps/plugins/OpenAPSSMB/SMBDefaults.java | 2 +- app/src/main/res/xml/pref_absorption_oref0.xml | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalAdapterAMAJS.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalAdapterAMAJS.java index b9a67f0f4e..7f6df8466d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalAdapterAMAJS.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/DetermineBasalAdapterAMAJS.java @@ -211,7 +211,8 @@ public class DetermineBasalAdapterAMAJS { mProfile.put("current_basal", basalrate); mProfile.put("temptargetSet", tempTargetSet); mProfile.put("autosens_adjust_targets", SP.getBoolean("openapsama_autosens_adjusttargets", true)); - mProfile.put("min_5m_carbimpact", SP.getInt("openapsama_min_5m_carbimpact", SMBDefaults.min_5m_carbimpact)); + //TODO: align with max-absorption model in AMA sensitivity + mProfile.put("min_5m_carbimpact", SP.getDouble("openapsama_min_5m_carbimpact", SMBDefaults.min_5m_carbimpact)); if (units.equals(Constants.MMOL)) { mProfile.put("out_units", "mmol/L"); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/DetermineBasalAdapterSMBJS.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/DetermineBasalAdapterSMBJS.java index b019dbe1cf..5ec19adfe8 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/DetermineBasalAdapterSMBJS.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/DetermineBasalAdapterSMBJS.java @@ -241,7 +241,8 @@ public class DetermineBasalAdapterSMBJS { mProfile.put("half_basal_exercise_target", SMBDefaults.half_basal_exercise_target); mProfile.put("maxCOB", SMBDefaults.maxCOB); mProfile.put("skip_neutral_temps", SMBDefaults.skip_neutral_temps); - mProfile.put("min_5m_carbimpact", SP.getInt("openapsama_min_5m_carbimpact", SMBDefaults.min_5m_carbimpact));; + //TODO: align with max-absorption model in AMA sensitivity + mProfile.put("min_5m_carbimpact", SP.getDouble("openapsama_min_5m_carbimpact", SMBDefaults.min_5m_carbimpact));; mProfile.put("remainingCarbsCap", SMBDefaults.remainingCarbsCap); mProfile.put("enableUAM", SP.getBoolean(R.string.key_use_uam, false)); mProfile.put("A52_risk_enable", SMBDefaults.A52_risk_enable); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/SMBDefaults.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/SMBDefaults.java index a7e690ce79..0ce8d2bb94 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/SMBDefaults.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/SMBDefaults.java @@ -40,7 +40,7 @@ public class SMBDefaults { public final static boolean skip_neutral_temps = true; // ***** default false in oref1 ***** if true, don't set neutral temps // unsuspend_if_no_temp:false // if true, pump will un-suspend after a zero temp finishes // bolussnooze_dia_divisor:2 // bolus snooze decays after 1/2 of DIA - public final static int min_5m_carbimpact = 8; // mg/dL per 5m (8 mg/dL/5m corresponds to 24g/hr at a CSF of 4 mg/dL/g (x/5*60/4)) + public final static double min_5m_carbimpact = 8d; // mg/dL per 5m (8 mg/dL/5m corresponds to 24g/hr at a CSF of 4 mg/dL/g (x/5*60/4)) public final static int remainingCarbsCap = 90; // max carbs we'll assume will absorb over 4h if we don't yet see carb absorption // WARNING: use SMB with caution: it can and will automatically bolus up to max_iob worth of extra insulin // enableUAM:true // enable detection of unannounced meal carb absorption diff --git a/app/src/main/res/xml/pref_absorption_oref0.xml b/app/src/main/res/xml/pref_absorption_oref0.xml index e163f4cd47..b2c77c022a 100644 --- a/app/src/main/res/xml/pref_absorption_oref0.xml +++ b/app/src/main/res/xml/pref_absorption_oref0.xml @@ -7,7 +7,7 @@ Date: Sun, 4 Mar 2018 12:50:06 +0100 Subject: [PATCH 45/74] wear endtime in lowres --- .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 588437902b..6f00f42d3b 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -63,7 +63,7 @@ public class BgGraphBuilder { //used for low resolution screen. public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { - start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago + this.start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; this.context = context; @@ -83,11 +83,12 @@ public class BgGraphBuilder { this.basalBackgroundColor = basalBackgroundColor; this.bolusColor = bolusColor; this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) + this.predictionEndTime = getPredictionEndTime(); + this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time; } public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { - end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) - start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago + this.start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; this.context = context; From 5a80215578752b8709fa99962f7726a52f53700d Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 13:35:17 +0100 Subject: [PATCH 46/74] wear timeticks --- .../androidaps/watchfaces/BgGraphBuilder.java | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 6f00f42d3b..aa78e41856 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -388,41 +388,42 @@ public class BgGraphBuilder { public Axis xAxis() { final boolean is24 = DateFormat.is24HourFormat(context); + SimpleDateFormat timeFormat = new SimpleDateFormat(is24? "HH" : "h a"); + timeFormat.setTimeZone(TimeZone.getDefault()); + long timeNow = System.currentTimeMillis(); + Axis xAxis = new Axis(); xAxis.setAutoGenerated(false); List xAxisValues = new ArrayList(); - GregorianCalendar now = new GregorianCalendar(); - GregorianCalendar today = new GregorianCalendar(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH)); - SimpleDateFormat timeFormat = new SimpleDateFormat(is24? "HH" : "h a"); - timeFormat.setTimeZone(TimeZone.getDefault()); - long start_hour = today.getTime().getTime(); - long timeNow = System.currentTimeMillis(); - long endTime = getPredictionEndTime(); + //get the time-tick at the full hour after start_time + GregorianCalendar startGC = new GregorianCalendar(); + startGC.setTimeInMillis(start_time); + startGC.set(Calendar.MILLISECOND, 0); + startGC.set(Calendar.SECOND, 0); + startGC.set(Calendar.MINUTE, 0); + startGC.add(Calendar.HOUR, 1); + long start_hour = startGC.getTimeInMillis(); - for (int l = 0; l <= 24; l++) { - if ((start_hour + (60000 * 60 * (l))) < endTime) { - if ((start_hour + (60000 * 60 * (l + 1))) >= endTime) { - endHour = start_hour + (60000 * 60 * (l)); - l = 25; - } - } - } //Display current time on the graph SimpleDateFormat longTimeFormat = new SimpleDateFormat(is24? "HH:mm" : "h:mm a"); xAxisValues.add(new AxisValue(fuzz(timeNow), (longTimeFormat.format(timeNow)).toCharArray())); - //Add whole hours endTime the axis (as long as they are more than 15 mins away from the current time) - for (int l = 0; l <= 24; l++) { - long timestamp = endHour - (60000 * 60 * l); - if((timestamp - endTime < 0) && (timestamp > start_time)) { - if(Math.abs(timestamp - timeNow) > (1000 * 60 * 8 * timespan)){ - xAxisValues.add(new AxisValue(fuzz(timestamp), (timeFormat.format(timestamp)).toCharArray())); - }else { - xAxisValues.add(new AxisValue(fuzz(timestamp), "".toCharArray())); - } + long hourTick = start_hour; + + // add all full hours within the timeframe + while (hourTick < end_time){ + if(Math.abs(hourTick - timeNow) > (1000 * 60 * 8 * timespan)){ + xAxisValues.add(new AxisValue(fuzz(hourTick), (timeFormat.format(hourTick)).toCharArray())); + } else { + //don't print hour label if too close to now to avoid overlaps + xAxisValues.add(new AxisValue(fuzz(hourTick), "".toCharArray())); } + + //increment by one hour + hourTick += 60*60*1000; } + xAxis.setValues(xAxisValues); xAxis.setTextSize(10); xAxis.setHasLines(true); From acf7e36d6103012b6a714f16922873a1dabae8c3 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 13:56:17 +0100 Subject: [PATCH 47/74] wear bgGraphbuilder switch to non-deprecated methods --- .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index aa78e41856..d4a46d7f3a 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -54,7 +54,6 @@ public class BgGraphBuilder { private int bolusColor; public boolean singleLine = false; - private long endHour; private List inRangeValues = new ArrayList(); private List highValues = new ArrayList(); private List lowValues = new ArrayList(); @@ -407,17 +406,17 @@ public class BgGraphBuilder { //Display current time on the graph SimpleDateFormat longTimeFormat = new SimpleDateFormat(is24? "HH:mm" : "h:mm a"); - xAxisValues.add(new AxisValue(fuzz(timeNow), (longTimeFormat.format(timeNow)).toCharArray())); + xAxisValues.add(new AxisValue(fuzz(timeNow)).setLabel((longTimeFormat.format(timeNow)))); long hourTick = start_hour; // add all full hours within the timeframe while (hourTick < end_time){ if(Math.abs(hourTick - timeNow) > (1000 * 60 * 8 * timespan)){ - xAxisValues.add(new AxisValue(fuzz(hourTick), (timeFormat.format(hourTick)).toCharArray())); + xAxisValues.add(new AxisValue(fuzz(hourTick)).setLabel(timeFormat.format(hourTick))); } else { //don't print hour label if too close to now to avoid overlaps - xAxisValues.add(new AxisValue(fuzz(hourTick), "".toCharArray())); + xAxisValues.add(new AxisValue(fuzz(hourTick))); } //increment by one hour From a4eb82c5240b8cf2b2c5e230d03671e12e121d4c Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 14:06:19 +0100 Subject: [PATCH 48/74] wear bgGraphbuilder isValid bolus --- .../androidaps/watchfaces/BgGraphBuilder.java | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index d4a46d7f3a..bce19e96a5 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -9,7 +9,6 @@ import android.text.format.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.TimeZone; @@ -51,7 +50,7 @@ public class BgGraphBuilder { public int gridColour; public int basalCenterColor; public int basalBackgroundColor; - private int bolusColor; + private int bolusInvalidColor; public boolean singleLine = false; private List inRangeValues = new ArrayList(); @@ -61,7 +60,7 @@ public class BgGraphBuilder { //used for low resolution screen. - public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int timespan) { this.start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; @@ -80,13 +79,13 @@ public class BgGraphBuilder { this.gridColour = gridColour; this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; - this.bolusColor = bolusColor; + this.bolusInvalidColor = bolusInvalidColor; this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) this.predictionEndTime = getPredictionEndTime(); this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time; } - public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int timespan) { this.start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; @@ -104,7 +103,7 @@ public class BgGraphBuilder { this.gridColour = gridColour; this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; - this.bolusColor = bolusColor; + this.bolusInvalidColor = bolusInvalidColor; this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) this.predictionEndTime = getPredictionEndTime(); this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time; @@ -172,6 +171,7 @@ public class BgGraphBuilder { lines.add(basalLine((float) minChart, factor, highlight)); lines.add(bolusLine((float) minChart)); + lines.add(bolusInvalidLine((float) minChart)); lines.add(smbLine((float) minChart)); lines.add(predictionLine()); @@ -206,12 +206,12 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && !bwd.isSMB && !bwd.isValid && bwd.bolus > 0) { + if(bwd.date > start_time && !bwd.isSMB && bwd.isValid && bwd.bolus > 0) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } Line line = new Line(pointValues); - line.setColor(bolusColor); + line.setColor(bolusInvalidColor); line.setHasLines(false); line.setPointRadius(pointSize*2); line.setHasPoints(true); @@ -223,7 +223,7 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && bwd.isSMB && !bwd.isValid && bwd.bolus > 0) { + if(bwd.date > start_time && bwd.isSMB && bwd.isValid && bwd.bolus > 0) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } @@ -235,6 +235,24 @@ public class BgGraphBuilder { return line; } + private Line bolusInvalidLine(float offset) { + + List pointValues = new ArrayList(); + + for (BolusWatchData bwd: bolusWatchDataList) { + if(!(bwd.isValid && bwd.bolus > 0)) { + pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); + } + } + Line line = new Line(pointValues); + line.setColor(bolusInvalidColor); + line.setHasLines(false); + line.setPointRadius(pointSize); + line.setHasPoints(true); + return line; + } + + private Line predictionLine() { List pointValues = new ArrayList(); From b98dc5c72f509dfd981199de4b138f505c802292 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 14:47:30 +0100 Subject: [PATCH 49/74] wear timeframe bolus --- .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index bce19e96a5..3c69a6e32c 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -206,12 +206,12 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && !bwd.isSMB && bwd.isValid && bwd.bolus > 0) { + if(bwd.date > start_time && bwd.date <= end_time && !bwd.isSMB && bwd.isValid && bwd.bolus > 0) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } Line line = new Line(pointValues); - line.setColor(bolusInvalidColor); + line.setColor(basalCenterColor); line.setHasLines(false); line.setPointRadius(pointSize*2); line.setHasPoints(true); @@ -223,7 +223,7 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && bwd.isSMB && bwd.isValid && bwd.bolus > 0) { + if(bwd.date > start_time && bwd.date <= end_time && bwd.isSMB && bwd.isValid && bwd.bolus > 0) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } @@ -240,7 +240,7 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(!(bwd.isValid && bwd.bolus > 0)) { + if(bwd.date > start_time && bwd.date <= end_time && !(bwd.isValid && bwd.bolus > 0)) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } From 37b96d7e31063258151204cf0523b3fac3ed519c Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Sun, 4 Mar 2018 15:59:17 +0200 Subject: [PATCH 50/74] remove unused import (RadioButton) --- .../androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 9ecf426a72..2eb7898aa1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -18,7 +18,6 @@ import android.view.WindowManager; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; -import android.widget.RadioButton; import android.widget.TextView; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; From ca9150ba5b5d5181d02b37307c043cdea1b87db2 Mon Sep 17 00:00:00 2001 From: PoweRGbg Date: Sun, 4 Mar 2018 16:06:54 +0200 Subject: [PATCH 51/74] more readable low TT message --- .../androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 2eb7898aa1..3367903df1 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -272,9 +272,9 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D } if (startEsTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { if(currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min "; } else - confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esTTDuration) + " min "; + confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esTTDuration) + " min "; } final double finalTT = activityTT; From ef75e2759c7c263cfdd601257e2039c0571c0f9c Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 15:09:59 +0100 Subject: [PATCH 52/74] wear carbonly is valid --- .../info/nightscout/androidaps/watchfaces/BgGraphBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 3c69a6e32c..38e7b974b4 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -240,7 +240,7 @@ public class BgGraphBuilder { List pointValues = new ArrayList(); for (BolusWatchData bwd: bolusWatchDataList) { - if(bwd.date > start_time && bwd.date <= end_time && !(bwd.isValid && bwd.bolus > 0)) { + if(bwd.date > start_time && bwd.date <= end_time && !(bwd.isValid && (bwd.bolus > 0 || bwd.carbs > 0))) { pointValues.add(new PointValue(fuzz(bwd.date), (float) offset-2)); } } From e2b829a60af435eea82f3bcb9602c8fd3dbb96d8 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 15:37:55 +0100 Subject: [PATCH 53/74] wear first carbs --- .../androidaps/watchfaces/BIGChart.java | 4 +-- .../androidaps/watchfaces/BaseWatchFace.java | 4 +-- .../androidaps/watchfaces/BgGraphBuilder.java | 26 +++++++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 2b4b969d62..0f88d03b09 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -668,9 +668,9 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, 0, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java index 2627258860..70a7adb627 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java @@ -630,9 +630,9 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, 0, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList,predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList,predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 38e7b974b4..cd6f7849f7 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -51,6 +51,8 @@ public class BgGraphBuilder { public int basalCenterColor; public int basalBackgroundColor; private int bolusInvalidColor; + private int carbsColor; + public boolean singleLine = false; private List inRangeValues = new ArrayList(); @@ -60,7 +62,7 @@ public class BgGraphBuilder { //used for low resolution screen. - public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int carbsColor, int timespan) { this.start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; @@ -80,12 +82,13 @@ public class BgGraphBuilder { this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; this.bolusInvalidColor = bolusInvalidColor; + this.carbsColor = carbsColor; this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) this.predictionEndTime = getPredictionEndTime(); this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time; } - public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int timespan) { + public BgGraphBuilder(Context context, List aBgList, List predictionsList, List tempWatchDataList, ArrayList basalWatchDataList, ArrayList bolusWatchDataList, int aPointSize, int aHighColor, int aLowColor, int aMidColor, int gridColour, int basalBackgroundColor, int basalCenterColor, int bolusInvalidColor, int carbsColor, int timespan) { this.start_time = System.currentTimeMillis() - (1000 * 60 * 60 * timespan); //timespan hours ago this.bgDataList = aBgList; this.predictionsList = predictionsList; @@ -104,6 +107,7 @@ public class BgGraphBuilder { this.basalCenterColor = basalCenterColor; this.basalBackgroundColor = basalBackgroundColor; this.bolusInvalidColor = bolusInvalidColor; + this.carbsColor = carbsColor; this.end_time = System.currentTimeMillis() + (1000 * 60 * 6 * timespan); //Now plus 30 minutes padding (for 5 hours. Less if less.) this.predictionEndTime = getPredictionEndTime(); this.end_time = (predictionEndTime>end_time)?predictionEndTime:end_time; @@ -172,6 +176,7 @@ public class BgGraphBuilder { lines.add(basalLine((float) minChart, factor, highlight)); lines.add(bolusLine((float) minChart)); lines.add(bolusInvalidLine((float) minChart)); + lines.add(carbsLine((float) minChart)); lines.add(smbLine((float) minChart)); lines.add(predictionLine()); @@ -252,6 +257,23 @@ public class BgGraphBuilder { return line; } + private Line carbsLine(float offset) { + + List pointValues = new ArrayList(); + + for (BolusWatchData bwd: bolusWatchDataList) { + if(bwd.date > start_time && bwd.date <= end_time && !bwd.isSMB && bwd.isValid && bwd.carbs > 0) { + pointValues.add(new PointValue(fuzz(bwd.date), (float) offset+2)); + } + } + Line line = new Line(pointValues); + line.setColor(Color.GREEN); + line.setHasLines(false); + line.setPointRadius(pointSize*2); + line.setHasPoints(true); + return line; + } + private Line predictionLine() { From d500b15947c47ebccaec13f08e21e1b121019a81 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 15:40:36 +0100 Subject: [PATCH 54/74] wear carbs always colour --- .../java/info/nightscout/androidaps/watchfaces/BIGChart.java | 2 +- .../info/nightscout/androidaps/watchfaces/BaseWatchFace.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 0f88d03b09..85f04745f6 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -668,7 +668,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, 0, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); } else { bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); } diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java index 70a7adb627..019a628219 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java @@ -630,7 +630,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, 0, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); } else { bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList,predictionList, tempWatchDataList, basalWatchDataList, null, pointSize, highColor, lowColor, midColor, gridColor, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); } From 2f40feef65fd851f43f30d644b9b1920030c238f Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 15:41:32 +0100 Subject: [PATCH 55/74] wear empty label needed --- .../info/nightscout/androidaps/watchfaces/BgGraphBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index cd6f7849f7..1f0dde1bd4 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -456,7 +456,7 @@ public class BgGraphBuilder { xAxisValues.add(new AxisValue(fuzz(hourTick)).setLabel(timeFormat.format(hourTick))); } else { //don't print hour label if too close to now to avoid overlaps - xAxisValues.add(new AxisValue(fuzz(hourTick))); + xAxisValues.add(new AxisValue(fuzz(hourTick)).setLabel("")); } //increment by one hour From 5a4967e544dc47f752022d79b4dd11290f757f2b Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 19:56:34 +0100 Subject: [PATCH 56/74] newcarb dialog wrap content --- app/src/main/res/layout/overview_newcarbs_dialog.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/layout/overview_newcarbs_dialog.xml b/app/src/main/res/layout/overview_newcarbs_dialog.xml index 67f62e8cf2..1860078ddb 100644 --- a/app/src/main/res/layout/overview_newcarbs_dialog.xml +++ b/app/src/main/res/layout/overview_newcarbs_dialog.xml @@ -34,17 +34,17 @@ + android:text="Start activity TT" /> + android:text="Suspend loop for 30 min" /> - \ No newline at end of file + From cdb58ed143b01340e4ca08b02d6a51a28b0fad9f Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 19:57:21 +0100 Subject: [PATCH 57/74] newinsulin dialog wrap content --- app/src/main/res/layout/overview_newinsulin_dialog.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/overview_newinsulin_dialog.xml b/app/src/main/res/layout/overview_newinsulin_dialog.xml index b761933cea..99508b45fa 100644 --- a/app/src/main/res/layout/overview_newinsulin_dialog.xml +++ b/app/src/main/res/layout/overview_newinsulin_dialog.xml @@ -34,14 +34,14 @@ @@ -115,4 +115,4 @@ - \ No newline at end of file + From 118cdb3dceafca536f4bdfc4641557e0fd1cb80c Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 20:12:33 +0100 Subject: [PATCH 58/74] buttons gone by default in smallheight ... same as on default layout --- .../main/res/layout/overview_fragment_smallheight.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/overview_fragment_smallheight.xml b/app/src/main/res/layout/overview_fragment_smallheight.xml index 604687de82..0e15d66681 100644 --- a/app/src/main/res/layout/overview_fragment_smallheight.xml +++ b/app/src/main/res/layout/overview_fragment_smallheight.xml @@ -394,7 +394,9 @@ android:paddingRight="0dp" android:text="@string/overview_treatment_label" android:textColor="@color/colorTreatmentButton" - android:textSize="10sp" /> + android:textSize="10sp" + android:visibility="gone"/> + + android:textSize="10sp" + android:visibility="gone"/> + android:textSize="10sp" + android:visibility="gone"/> Date: Sun, 4 Mar 2018 20:13:16 +0100 Subject: [PATCH 59/74] wear COB in status --- .../nightscout/androidaps/watchfaces/BIGChart.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 85f04745f6..404d70c997 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -94,6 +94,8 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre private String batteryString = "--"; private String sgvString = "--"; private String externalStatusString = "no status"; + private String cobString = "-g"; + private TextView statusView; private long chartTapTime = 0l; private long sgvTapTime = 0l; @@ -352,6 +354,8 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre DataMap dataMap = DataMap.fromBundle(bundle); wakeLock.acquire(50); externalStatusString = dataMap.getString("externalStatusString"); + cobString = dataMap.getString("cob"); + showAgeAndStatus(); @@ -444,7 +448,12 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre } if(showStatus){ - statusView.setText(externalStatusString); + String status = externalStatusString; + if (sharedPrefs.getBoolean("show_cob", true)) { + status = externalStatusString + " " + cobString; + } + + statusView.setText(status); statusView.setVisibility(View.VISIBLE); } else { statusView.setVisibility(View.GONE); From d7deaa15eba9ff132a23df11c5281b5dacc1dd6d Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Sun, 4 Mar 2018 20:14:58 +0100 Subject: [PATCH 60/74] wear COB string better default --- .../java/info/nightscout/androidaps/watchfaces/BIGChart.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index 404d70c997..f8c21745c0 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -94,7 +94,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre private String batteryString = "--"; private String sgvString = "--"; private String externalStatusString = "no status"; - private String cobString = "-g"; + private String cobString = ""; private TextView statusView; private long chartTapTime = 0l; From 414f92bdf830fd2857e9afbc5eb092025598402c Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Mon, 5 Mar 2018 20:50:21 +0100 Subject: [PATCH 61/74] no double whitespace --- .../java/info/nightscout/androidaps/db/TemporaryBasal.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java b/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java index 3feb9c4ad2..806f65704a 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java +++ b/app/src/main/java/info/nightscout/androidaps/db/TemporaryBasal.java @@ -325,13 +325,13 @@ public class TemporaryBasal implements Interval { if(profile != null) { double basal = profile.getBasal(); if(basal != 0){ - return Math.round(rate*100d/basal) + "% "; + return Math.round(rate*100d/basal) + "%"; } } } - return DecimalFormatter.to2Decimal(rate) + "U/h "; + return DecimalFormatter.to2Decimal(rate) + "U/h"; } else { // percent - return percentRate + "% "; + return percentRate + "%"; } } From 237d55ee85fb248899974041c2a06993f2f00979 Mon Sep 17 00:00:00 2001 From: swissalpine Date: Tue, 6 Mar 2018 11:21:44 +0100 Subject: [PATCH 62/74] Add whitespace to xDrip status line ... which was removed by the last fix. --- .../androidaps/plugins/XDripStatusline/StatuslinePlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java index 5fb902c2eb..61a002e835 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java @@ -192,7 +192,7 @@ public class StatuslinePlugin implements PluginBase { IobTotal bolusIob = treatmentsInterface.getLastCalculationTreatments().round(); treatmentsInterface.updateTotalIOBTempBasals(); IobTotal basalIob = treatmentsInterface.getLastCalculationTempBasals().round(); - status += DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob); + status += " " + DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob); if (mPrefs.getBoolean("xdripstatus_detailediob", true)) { From 2d797e8ce353db7a4fe16223b9a2a11e3c4d441c Mon Sep 17 00:00:00 2001 From: swissalpine Date: Tue, 6 Mar 2018 16:23:56 +0100 Subject: [PATCH 63/74] Update StatuslinePlugin.java --- .../androidaps/plugins/XDripStatusline/StatuslinePlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java index 61a002e835..7e9619dfb3 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/XDripStatusline/StatuslinePlugin.java @@ -184,7 +184,7 @@ public class StatuslinePlugin implements PluginBase { TemporaryBasal activeTemp = treatmentsInterface.getTempBasalFromHistory(System.currentTimeMillis()); if (activeTemp != null) { - status += activeTemp.toStringShort(); + status += activeTemp.toStringShort() + " "; } //IOB @@ -192,7 +192,7 @@ public class StatuslinePlugin implements PluginBase { IobTotal bolusIob = treatmentsInterface.getLastCalculationTreatments().round(); treatmentsInterface.updateTotalIOBTempBasals(); IobTotal basalIob = treatmentsInterface.getLastCalculationTempBasals().round(); - status += " " + DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob); + status += DecimalFormatter.to2Decimal(bolusIob.iob + basalIob.basaliob); if (mPrefs.getBoolean("xdripstatus_detailediob", true)) { From 7bd85c59728f6b2c8087b15057aab41c7d98da09 Mon Sep 17 00:00:00 2001 From: Johannes Mockenhaupt Date: Tue, 6 Mar 2018 20:32:53 +0100 Subject: [PATCH 64/74] Use meal color parameter. --- .../java/info/nightscout/androidaps/watchfaces/BIGChart.java | 5 +++-- .../nightscout/androidaps/watchfaces/BgGraphBuilder.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java index ac20a6d79b..ce8c931078 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BIGChart.java @@ -67,6 +67,7 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre public int basalBackgroundColor = Color.BLUE; public int basalCenterColor = Color.BLUE; public int bolusColor = Color.MAGENTA; + public int carbsColor = Color.GREEN; public int pointSize = 2; public boolean lowResMode = false; public boolean layoutSet = false; @@ -677,9 +678,9 @@ public class BIGChart extends WatchFace implements SharedPreferences.OnSharedPre if(bgDataList.size() > 0) { //Dont crash things just because we dont have values, people dont like crashy things int timeframe = Integer.parseInt(sharedPrefs.getString("chart_timeframe", "3")); if (lowResMode) { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, carbsColor, timeframe); } else { - bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, Color.GREEN, timeframe); + bgGraphBuilder = new BgGraphBuilder(getApplicationContext(), bgDataList, predictionList, tempWatchDataList, basalWatchDataList, bolusWatchDataList, pointSize, highColor, lowColor, midColor, gridColour, basalBackgroundColor, basalCenterColor, bolusColor, carbsColor, timeframe); } chart.setLineChartData(bgGraphBuilder.lineData()); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java index 1f0dde1bd4..9cc7615096 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BgGraphBuilder.java @@ -267,7 +267,7 @@ public class BgGraphBuilder { } } Line line = new Line(pointValues); - line.setColor(Color.GREEN); + line.setColor(carbsColor); line.setHasLines(false); line.setPointRadius(pointSize*2); line.setHasPoints(true); From 5f614b40728568bbbad294cae4571852eda9bd7d Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Thu, 8 Mar 2018 14:52:02 +0100 Subject: [PATCH 65/74] TT unify target calculation --- .../main/java/info/nightscout/androidaps/db/TempTarget.java | 4 ++++ .../androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java | 2 +- .../androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java | 2 +- .../androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java | 2 +- .../androidaps/plugins/Overview/graphData/GraphData.java | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java b/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java index c6d0ed18c4..980ce1c03c 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java +++ b/app/src/main/java/info/nightscout/androidaps/db/TempTarget.java @@ -41,6 +41,10 @@ public class TempTarget implements Interval { @DatabaseField public int durationInMinutes; + public double target() { + return (low + high) / 2; + } + public boolean isEqual(TempTarget other) { if (date != other.date) { return false; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java index bfe4fedf1f..dbb448d8d5 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java @@ -202,7 +202,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { isTempTarget = true; minBg = HardLimits.verifyHardLimits(tempTarget.low, "minBg", HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); maxBg = HardLimits.verifyHardLimits(tempTarget.high, "maxBg", HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); - targetBg = HardLimits.verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); + targetBg = HardLimits.verifyHardLimits(tempTarget.target(), "targetBg", HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java index adb18491a4..fd20bc3274 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java @@ -205,7 +205,7 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface { if (tempTarget != null) { minBg = verifyHardLimits(tempTarget.low, "minBg", HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); maxBg = verifyHardLimits(tempTarget.high, "maxBg", HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); - targetBg = verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); + targetBg = verifyHardLimits(tempTarget.target(), "targetBg", HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); } maxIob = verifyHardLimits(maxIob, "maxIob", 0, HardLimits.maxIobAMA()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java index c992f0e739..9a74c491dd 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java @@ -207,7 +207,7 @@ public class OpenAPSSMBPlugin implements PluginBase, APSInterface { isTempTarget = true; minBg = verifyHardLimits(tempTarget.low, "minBg", HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_MIN_BG[1]); maxBg = verifyHardLimits(tempTarget.high, "maxBg", HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_MAX_BG[1]); - targetBg = verifyHardLimits((tempTarget.low + tempTarget.high) / 2, "targetBg", HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); + targetBg = verifyHardLimits(tempTarget.target(), "targetBg", HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[0], HardLimits.VERY_HARD_LIMIT_TEMP_TARGET_BG[1]); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java index 02bb1a7b3d..b13ab19219 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/graphData/GraphData.java @@ -249,7 +249,7 @@ public class GraphData { if (tt == null) { value = (profile.getTargetLow(time) + profile.getTargetHigh(time)) / 2; } else { - value = (tt.low + tt.high) / 2; + value = tt.target(); } if (lastTarget > 0 && lastTarget != value) { targetsSeriesArray.add(new DataPoint(time, lastTarget)); From 768f61bc07f18070c446c885c614d3d263f66e1d Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Thu, 8 Mar 2018 14:59:18 +0100 Subject: [PATCH 66/74] unify target calculation --- .../java/info/nightscout/androidaps/data/Profile.java | 8 ++++++++ .../androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java | 2 +- .../androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java | 2 +- .../androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/data/Profile.java b/app/src/main/java/info/nightscout/androidaps/data/Profile.java index f461c84b2e..cb17802777 100644 --- a/app/src/main/java/info/nightscout/androidaps/data/Profile.java +++ b/app/src/main/java/info/nightscout/androidaps/data/Profile.java @@ -442,6 +442,14 @@ public class Profile { return ret; } + public double getTarget(){ + return getTarget(secondsFromMidnight(System.currentTimeMillis())); + } + + private double getTarget(Integer time) { + return (getTargetLow(time) + getTargetHigh(time))/2; + } + public Double getTargetLow() { return getTargetLow(secondsFromMidnight(System.currentTimeMillis())); } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java index dbb448d8d5..9d537b5b2f 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSAMA/OpenAPSAMAPlugin.java @@ -176,7 +176,7 @@ public class OpenAPSAMAPlugin implements PluginBase, APSInterface { double maxBasal = SP.getDouble("openapsma_max_basal", 1d); double minBg = Profile.toMgdl(profile.getTargetLow(), units); double maxBg = Profile.toMgdl(profile.getTargetHigh(), units); - double targetBg = (minBg + maxBg) / 2; + double targetBg = Profile.toMgdl(profile.getTarget(), units); minBg = Round.roundTo(minBg, 0.1d); maxBg = Round.roundTo(maxBg, 0.1d); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java index fd20bc3274..9f071c75a2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSMA/OpenAPSMAPlugin.java @@ -179,7 +179,7 @@ public class OpenAPSMAPlugin implements PluginBase, APSInterface { double maxBasal = SafeParse.stringToDouble(SP.getString("openapsma_max_basal", "1")); double minBg = Profile.toMgdl(profile.getTargetLow(), units); double maxBg = Profile.toMgdl(profile.getTargetHigh(), units); - double targetBg = (minBg + maxBg) / 2; + double targetBg = Profile.toMgdl(profile.getTarget(), units); minBg = Round.roundTo(minBg, 0.1d); maxBg = Round.roundTo(maxBg, 0.1d); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java index 9a74c491dd..325951929a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/OpenAPSSMB/OpenAPSSMBPlugin.java @@ -181,7 +181,7 @@ public class OpenAPSSMBPlugin implements PluginBase, APSInterface { double maxBasal = SP.getDouble("openapsma_max_basal", 1d); double minBg = Profile.toMgdl(profile.getTargetLow(), units); double maxBg = Profile.toMgdl(profile.getTargetHigh(), units); - double targetBg = (minBg + maxBg) / 2; + double targetBg = Profile.toMgdl(profile.getTarget(), units); minBg = Round.roundTo(minBg, 0.1d); maxBg = Round.roundTo(maxBg, 0.1d); From b880a9bb10ed138fa8a0be4c4fc574ee680295b8 Mon Sep 17 00:00:00 2001 From: AdrianLxM Date: Thu, 8 Mar 2018 15:02:11 +0100 Subject: [PATCH 67/74] unify target calculation 2 --- .../nightscout/androidaps/plugins/Wear/ActionStringHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java index 636a935787..270051fbb6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Wear/ActionStringHandler.java @@ -481,7 +481,7 @@ public class ActionStringHandler { ret += "DEFAULT RANGE: "; ret += profile.getTargetLow() + " - " + profile.getTargetHigh(); - ret += " target: " + (profile.getTargetLow() + profile.getTargetHigh()) / 2; + ret += " target: " + profile.getTarget(); return ret; } From 951ad2659046d0d427565cb06cc6bbb3cb326740 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 10 Mar 2018 17:58:45 +0100 Subject: [PATCH 68/74] cleanup --- .../Overview/Dialogs/NewCarbsDialog.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 3367903df1..8a2d7b4eed 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -41,9 +41,7 @@ import info.nightscout.androidaps.db.CareportalEvent; import info.nightscout.androidaps.db.Source; import info.nightscout.androidaps.db.TempTarget; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; -import info.nightscout.androidaps.plugins.Loop.APSResult; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; -import info.nightscout.androidaps.plugins.OpenAPSSMB.DetermineBasalResultSMB; import info.nightscout.androidaps.queue.Callback; import info.nightscout.utils.DateUtil; import info.nightscout.utils.NumberPicker; @@ -257,22 +255,22 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D double activityTT = 140d; double esTT = 90d; Profile currentProfile = MainApp.getConfigBuilder().getProfile(); - if(currentProfile == null) + if (currentProfile == null) return; - esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT,currentProfile.getUnits()) : 90d; - activityTT = prefTT > 0 ? Profile.toMgdl(prefTT,currentProfile.getUnits()) : 140d; + esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT, currentProfile.getUnits()) : 90d; + activityTT = prefTT > 0 ? Profile.toMgdl(prefTT, currentProfile.getUnits()) : 140d; if (startActivityTTCheckbox.isChecked()) { - if(currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(activityTT,Constants.MGDL) + " mmol/l for " + ((int) activityTTDuration) + " min "; + if (currentProfile.getUnits().equals(Constants.MMOL)) { + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(activityTT, Constants.MGDL) + " mmol/l for " + ((int) activityTTDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) activityTT) + " mg/dl for " + ((int) activityTTDuration) + " min "; } if (startEsTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { - if(currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT,Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min "; + if (currentProfile.getUnits().equals(Constants.MMOL)) { + confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT, Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min "; } else confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esTTDuration) + " min "; @@ -286,7 +284,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D if (!initialEventTime.equals(eventTime)) { confirmMessage += "
Time: " + DateUtil.dateAndTimeString(eventTime); } - if(confirmMessage.length() > 0) { + if (confirmMessage.length() > 0) { final int finalCarbsAfterConstraints = carbsAfterConstraints; From ec1c43b905f17468d1c8035ed834a676685c2745 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Sat, 10 Mar 2018 19:22:31 +0100 Subject: [PATCH 69/74] carbs dialog: defaults for mmol, i18n --- .../info/nightscout/androidaps/Constants.java | 8 ++ .../info/nightscout/androidaps/MainApp.java | 4 + .../Overview/Dialogs/NewCarbsDialog.java | 97 ++++++++++--------- .../res/layout/overview_newcarbs_dialog.xml | 16 +-- app/src/main/res/values/strings.xml | 4 + 5 files changed, 74 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/Constants.java b/app/src/main/java/info/nightscout/androidaps/Constants.java index e0549ab9bb..d933018790 100644 --- a/app/src/main/java/info/nightscout/androidaps/Constants.java +++ b/app/src/main/java/info/nightscout/androidaps/Constants.java @@ -38,6 +38,14 @@ public class Constants { //DanaR public static final double dailyLimitWarning = 0.95d; + // Temp targets + public static final int defaultActivityTTDuration = 90; // min + public static final double defaultActivityTTmgdl = 90d; + public static final double defaultActivityTTmmol = 5d; + public static final int defaultEatingSoonTTDuration = 45; // min + public static final double defaultEatingSoonTTmgdl = 140d; + public static final double defaultEatingSoonTTmmol = 8d; + //NSClientInternal public static final int MAX_LOG_LINES = 100; diff --git a/app/src/main/java/info/nightscout/androidaps/MainApp.java b/app/src/main/java/info/nightscout/androidaps/MainApp.java index bfa801cbdb..2573b57975 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainApp.java +++ b/app/src/main/java/info/nightscout/androidaps/MainApp.java @@ -247,6 +247,10 @@ public class MainApp extends Application { return sResources.getString(id, args); } + public static int gc(int id) { + return sResources.getColor(id); + } + public static MainApp instance() { return sInstance; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java index 8a2d7b4eed..6f46a5db8a 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/Dialogs/NewCarbsDialog.java @@ -44,6 +44,7 @@ import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.Loop.LoopPlugin; import info.nightscout.androidaps.queue.Callback; import info.nightscout.utils.DateUtil; +import info.nightscout.utils.DecimalFormatter; import info.nightscout.utils.NumberPicker; import info.nightscout.utils.SP; import info.nightscout.utils.SafeParse; @@ -70,7 +71,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D private static final double FAV3_DEFAULT = 20; private CheckBox suspendLoopCheckbox; private CheckBox startActivityTTCheckbox; - private CheckBox startEsTTCheckbox; + private CheckBox startEatingSoonTTCheckbox; private Integer maxCarbs; @@ -102,7 +103,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D Integer carbs = SafeParse.stringToInt(editCarbs.getText()); if (carbs > maxCarbs) { editCarbs.setValue(0d); - ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), getString(R.string.carbsconstraintapplied)); + ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.carbsconstraintapplied)); } } @@ -126,7 +127,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D editCarbs.setParams(0d, 0d, (double) maxCarbs, 1d, new DecimalFormat("0"), false, textWatcher); startActivityTTCheckbox = view.findViewById(R.id.newcarbs_activity_tt); - startEsTTCheckbox = view.findViewById(R.id.carbs_eating_soon_tt); + startEatingSoonTTCheckbox = view.findViewById(R.id.carbs_eating_soon_tt); dateButton = view.findViewById(R.id.newcarbs_eventdate); timeButton = view.findViewById(R.id.newcarb_eventtime); @@ -139,7 +140,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D timeButton.setOnClickListener(this); //To be able to select only one TT at a time - startEsTTCheckbox.setOnClickListener(this); + startEatingSoonTTCheckbox.setOnClickListener(this); startActivityTTCheckbox.setOnClickListener(this); // TODO prefilling carbs, maybe @@ -151,13 +152,13 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D fav1Button = view.findViewById(R.id.newcarbs_plus1); fav1Button.setOnClickListener(this); - fav1Button.setText("+" + SP.getString(MainApp.gs(R.string.key_carbs_button_increment_1), String.valueOf(FAV1_DEFAULT))); + fav1Button.setText("+" + SP.getString(R.string.key_carbs_button_increment_1, String.valueOf(FAV1_DEFAULT))); fav2Button = view.findViewById(R.id.newcarbs_plus2); fav2Button.setOnClickListener(this); - fav2Button.setText("+" + SP.getString(MainApp.gs(R.string.key_carbs_button_increment_2), String.valueOf(FAV2_DEFAULT))); + fav2Button.setText("+" + SP.getString(R.string.key_carbs_button_increment_2, String.valueOf(FAV2_DEFAULT))); fav3Button = view.findViewById(R.id.newcarbs_plus3); fav3Button.setOnClickListener(this); - fav3Button.setText("+" + SP.getString(MainApp.gs(R.string.key_carbs_button_increment_3), String.valueOf(FAV3_DEFAULT))); + fav3Button.setText("+" + SP.getString(R.string.key_carbs_button_increment_3, String.valueOf(FAV3_DEFAULT))); suspendLoopCheckbox = view.findViewById(R.id.newcarbs_suspend_loop); @@ -201,21 +202,21 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D break; case R.id.newcarbs_plus1: editCarbs.setValue(editCarbs.getValue() - + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_1), FAV1_DEFAULT)); + + SP.getDouble(R.string.key_carbs_button_increment_1, FAV1_DEFAULT)); validateInputs(); break; case R.id.newcarbs_plus2: editCarbs.setValue(editCarbs.getValue() - + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_2), FAV2_DEFAULT)); + + SP.getDouble(R.string.key_carbs_button_increment_2, FAV2_DEFAULT)); validateInputs(); break; case R.id.newcarbs_plus3: editCarbs.setValue(editCarbs.getValue() - + SP.getDouble(MainApp.gs(R.string.key_carbs_button_increment_3), FAV3_DEFAULT)); + + SP.getDouble(R.string.key_carbs_button_increment_3, FAV3_DEFAULT)); validateInputs(); break; case R.id.newcarbs_activity_tt: - startEsTTCheckbox.setChecked(false); + startEatingSoonTTCheckbox.setChecked(false); break; case R.id.carbs_eating_soon_tt: startActivityTTCheckbox.setChecked(false); @@ -238,45 +239,47 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D String confirmMessage = ""; if (carbs > 0) - confirmMessage += getString(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + ""; + confirmMessage += MainApp.gs(R.string.carbs) + ": " + "" + carbsAfterConstraints + "g" + ""; if (!carbsAfterConstraints.equals(carbs)) - confirmMessage += "
" + getString(R.string.carbsconstraintapplied) + ""; + confirmMessage += "
" + MainApp.gs(R.string.carbsconstraintapplied) + ""; if (suspendLoopCheckbox.isChecked()) { - confirmMessage += "
" + "Loop: " + "" + "Suspend for 30 min"; + confirmMessage += "
" + MainApp.gs(R.string.loop) + ": " + "" + MainApp.gs(R.string.suspendloopfor30min) + ""; } - double activityTTDurationSettings = SP.getDouble(R.string.key_activity_duration, 90d); - double eatingSoonTTDuration = SP.getDouble(R.string.key_eatingsoon_duration, 45d); - double eatingSoonTT = SP.getDouble(R.string.key_eatingsoon_target, 90d); - double activityTTDuration = activityTTDurationSettings > 0 ? activityTTDurationSettings : 90d; - final double esTTDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : 45d; - double prefTT = SP.getDouble(R.string.key_activity_target, 140d); - - double activityTT = 140d; - double esTT = 90d; - Profile currentProfile = MainApp.getConfigBuilder().getProfile(); + final Profile currentProfile = MainApp.getConfigBuilder().getProfile(); if (currentProfile == null) return; - esTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT, currentProfile.getUnits()) : 90d; - activityTT = prefTT > 0 ? Profile.toMgdl(prefTT, currentProfile.getUnits()) : 140d; + int activityTTDuration = SP.getInt(R.string.key_activity_duration, Constants.defaultActivityTTDuration); + activityTTDuration = activityTTDuration > 0 ? activityTTDuration : Constants.defaultActivityTTDuration; + double activityTT = SP.getDouble(R.string.key_activity_target, currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultActivityTTmmol : Constants.defaultActivityTTmgdl); + activityTT = activityTT > 0 ? activityTT : currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultActivityTTmmol : Constants.defaultActivityTTmgdl; + + int eatingSoonTTDuration = SP.getInt(R.string.key_eatingsoon_duration, Constants.defaultEatingSoonTTDuration); + eatingSoonTTDuration = eatingSoonTTDuration > 0 ? eatingSoonTTDuration : Constants.defaultEatingSoonTTDuration; + double eatingSoonTT = SP.getDouble(R.string.key_eatingsoon_target, currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultEatingSoonTTmmol : Constants.defaultEatingSoonTTmgdl); + eatingSoonTT = eatingSoonTT > 0 ? Profile.toMgdl(eatingSoonTT, currentProfile.getUnits()) : currentProfile.getUnits().equals(Constants.MMOL) ? Constants.defaultEatingSoonTTmmol : Constants.defaultEatingSoonTTmgdl; + if (startActivityTTCheckbox.isChecked()) { if (currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(activityTT, Constants.MGDL) + " mmol/l for " + ((int) activityTTDuration) + " min "; + confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to1Decimal(activityTT) + " mmol/l (" + ((int) activityTTDuration) + " min)"; } else - confirmMessage += "
" + "TT: " + "" + ((int) activityTT) + " mg/dl for " + ((int) activityTTDuration) + " min "; + confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to0Decimal(activityTT) + " mg/dl (" + ((int) activityTTDuration) + " min)"; } - if (startEsTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { + if (startEatingSoonTTCheckbox.isChecked() && !startActivityTTCheckbox.isChecked()) { if (currentProfile.getUnits().equals(Constants.MMOL)) { - confirmMessage += "
" + "TT: " + "" + Profile.toMmol(esTT, Constants.MGDL) + " mmol/l for " + ((int) esTTDuration) + " min "; + confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to1Decimal(eatingSoonTT) + " mmol/l (" + eatingSoonTTDuration + " min)"; } else - confirmMessage += "
" + "TT: " + "" + ((int) esTT) + " mg/dl for " + ((int) esTTDuration) + " min "; + confirmMessage += "
" + MainApp.gs(R.string.temptargetshort) + ": " + "" + DecimalFormatter.to0Decimal(eatingSoonTT) + " mg/dl (" + eatingSoonTTDuration + " min)"; } - final double finalTT = activityTT; - final double finalEsTT = esTT; + final double finalActivityTT = activityTT; + final double finalEatigSoonTT = eatingSoonTT; + final int finalActivityTTDuration = activityTTDuration; + final int finalEatingSoonTTDuration = eatingSoonTTDuration; + if (StringUtils.isNoneEmpty(food)) { confirmMessage += "
" + "Food: " + food; } @@ -291,12 +294,12 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D final Context context = getContext(); final AlertDialog.Builder builder = new AlertDialog.Builder(context); - builder.setTitle(this.getContext().getString(R.string.confirmation)); + builder.setTitle(MainApp.gs(R.string.confirmation)); if (confirmMessage.startsWith("
")) confirmMessage = confirmMessage.substring("
".length()); builder.setMessage(Html.fromHtml(confirmMessage)); - builder.setPositiveButton(getString(R.string.ok), (dialog, id) -> { + builder.setPositiveButton(MainApp.gs(R.string.ok), (dialog, id) -> { synchronized (builder) { if (accepted) { log.debug("guarding: already accepted"); @@ -311,29 +314,29 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D @Override public void run() { if (!result.success) { - ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.sResources.getString(R.string.tempbasaldeliveryerror)); + ToastUtils.showToastInUiThread(MainApp.instance().getApplicationContext(), MainApp.gs(R.string.tempbasaldeliveryerror)); } } }); } - if (startActivityTTCheckbox.isChecked() || (startActivityTTCheckbox.isChecked() && startEsTTCheckbox.isChecked())) { + if (startActivityTTCheckbox.isChecked()) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); - tempTarget.durationInMinutes = (int) activityTTDuration; - tempTarget.reason = "Activity"; + tempTarget.durationInMinutes = finalActivityTTDuration; + tempTarget.reason = MainApp.gs(R.string.activity); tempTarget.source = Source.USER; - tempTarget.low = (double) finalTT; - tempTarget.high = (double) finalTT; + tempTarget.low = Profile.toMgdl(finalActivityTT, currentProfile.getUnits()); + tempTarget.high = Profile.toMgdl(finalActivityTT, currentProfile.getUnits()); MainApp.getDbHelper().createOrUpdate(tempTarget); - } else if (startEsTTCheckbox.isChecked()) { + } else if (startEatingSoonTTCheckbox.isChecked()) { TempTarget tempTarget = new TempTarget(); tempTarget.date = System.currentTimeMillis(); - tempTarget.durationInMinutes = (int) esTTDuration; - tempTarget.reason = "Eating soon"; + tempTarget.durationInMinutes = finalEatingSoonTTDuration; + tempTarget.reason = MainApp.gs(R.string.eatingsoon); tempTarget.source = Source.USER; - tempTarget.low = (double) finalEsTT; - tempTarget.high = (double) finalEsTT; + tempTarget.low = Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits()); + tempTarget.high = Profile.toMgdl(finalEatigSoonTT, currentProfile.getUnits()); MainApp.getDbHelper().createOrUpdate(tempTarget); } @@ -349,7 +352,7 @@ public class NewCarbsDialog extends DialogFragment implements OnClickListener, D } } }); - builder.setNegativeButton(getString(R.string.cancel), null); + builder.setNegativeButton(MainApp.gs(R.string.cancel), null); builder.show(); dismiss(); } else diff --git a/app/src/main/res/layout/overview_newcarbs_dialog.xml b/app/src/main/res/layout/overview_newcarbs_dialog.xml index 7f00891e40..74416d7b8a 100644 --- a/app/src/main/res/layout/overview_newcarbs_dialog.xml +++ b/app/src/main/res/layout/overview_newcarbs_dialog.xml @@ -37,27 +37,27 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="5dp" - android:text="Start activity TT"/> + android:text="@string/start_activity_tt" /> + android:text="@string/start_eating_soon_tt" /> + android:text="@string/suspendloopfor30min" /> + android:layout_gravity="center_horizontal" + android:padding="5dp"> + android:visibility="gone" /> + android:layout_marginBottom="5dp" + android:orientation="horizontal">