From a51113cfdf1690743b5e4cec150b5c7925f014e1 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Tue, 23 Apr 2019 10:07:32 +0300 Subject: [PATCH 01/30] try to calculate direction of BG if missing --- .../nightscout/androidaps/db/BgReading.java | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java index 6fafdc4b6d..254c2a7318 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java +++ b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java @@ -18,6 +18,7 @@ import info.nightscout.androidaps.plugins.general.nsclient.data.NSSgv; import info.nightscout.androidaps.plugins.general.overview.OverviewPlugin; import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries; +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; import info.nightscout.androidaps.utils.DecimalFormatter; @DatabaseTable(tableName = DatabaseHelper.DATABASE_BGREADINGS) @@ -74,7 +75,8 @@ public class BgReading implements DataPointWithLabelInterface { public String directionToSymbol() { String symbol = ""; if (direction == null) { - symbol = "??"; + direction = calculateDirection(); + this.directionToSymbol(); // possible endless loop ?!? } else if (direction.compareTo("DoubleDown") == 0) { symbol = "\u21ca"; } else if (direction.compareTo("SingleDown") == 0) { @@ -246,4 +248,37 @@ public class BgReading implements DataPointWithLabelInterface { return isaCOBPrediction || isCOBPrediction || isIOBPrediction || isUAMPrediction || isZTPrediction; } + + // Copied from xDrip+ + public String calculateDirection(){ + GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); + if (glucoseStatus == null || glucoseStatus.prev_glucose != 0) + return "??"; + +// double slope = glucoseStatus.delta / (glucoseStatus.previous_date - glucoseStatus.date); + double slope = (glucoseStatus.glucose - glucoseStatus.prev_glucose) / (glucoseStatus.previous_date - glucoseStatus.date); + log.debug("Slope is :"+slope+" delta "+glucoseStatus.delta+" date difference "+(glucoseStatus.date - glucoseStatus.previous_date)); + double slope_by_minute = slope * 60000; + String arrow = "NONE"; + + if (slope_by_minute <= (-3.5)) { + arrow = "DoubleDown"; + } else if (slope_by_minute <= (-2)) { + arrow = "SingleDown"; + } else if (slope_by_minute <= (-1)) { + arrow = "FortyFiveDown"; + } else if (slope_by_minute <= (1)) { + arrow = "Flat"; + } else if (slope_by_minute <= (2)) { + arrow = "FortyFiveUp"; + } else if (slope_by_minute <= (3.5)) { + arrow = "SingleUp"; + } else if (slope_by_minute <= (40)) { + arrow = "DoubleUp"; + } + log.debug("Direction set to: "+arrow); + return arrow; + + } + } From 87a6e006b2e6c5398a95429e888790937d664843 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Tue, 23 Apr 2019 10:08:52 +0300 Subject: [PATCH 02/30] GlucoseStatus changes --- .../plugins/iob/iobCobCalculator/GlucoseStatus.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java index 191ce9e1cd..f2cb7502f0 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java @@ -26,6 +26,8 @@ public class GlucoseStatus { public double short_avgdelta = 0d; public double long_avgdelta = 0d; public long date = 0L; + public long previous_date = 0L; + public double prev_glucose = 0d; public String log() { @@ -58,6 +60,8 @@ public class GlucoseStatus { // load 45min //long fromtime = DateUtil.now() - 60 * 1000L * 45; //List data = MainApp.getDbHelper().getBgreadingsDataFromTime(fromtime, false); + long prevDate = 0; + double prevValue = 0; synchronized (IobCobCalculatorPlugin.getPlugin().getDataLock()) { @@ -94,6 +98,9 @@ public class GlucoseStatus { status.long_avgdelta = 0d; status.avgdelta = 0d; // for OpenAPS MA status.date = now_date; + status.previous_date = prevDate; // setting the previous value date for slope calculation + status.prev_glucose = prevValue; + if (L.isEnabled(L.GLUCOSE)) log.debug("sizeRecords==1"); return status.round(); @@ -118,6 +125,11 @@ public class GlucoseStatus { // multiply by 5 to get the same units as delta, i.e. mg/dL/5m change = now.value - then.value; avgdelta = change / minutesago * 5; + // save the value of date if it was 5 min ago or less than 10 min + if( minutesago >= 5 && minutesago < 10 ) { + prevDate = then_date; + prevValue = then.value; + } if (L.isEnabled(L.GLUCOSE)) log.debug(then.toString() + " minutesago=" + minutesago + " avgdelta=" + avgdelta); From 34969fdbfd1042e3696fb26730fdbf314448537c Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Thu, 25 Apr 2019 16:57:50 +0300 Subject: [PATCH 03/30] WIP: adding tests --- .../androidaps/db/BgReadingTest.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java diff --git a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java new file mode 100644 index 0000000000..3467205fba --- /dev/null +++ b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java @@ -0,0 +1,71 @@ +package info.nightscout.androidaps.db; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.logging.Logger; + +import info.AAPSMocker; +import info.nightscout.androidaps.Constants; +import info.nightscout.androidaps.MainApp; +import info.nightscout.androidaps.logging.L; +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; +import info.nightscout.androidaps.utils.SP; + +import static org.junit.Assert.*; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({MainApp.class, Logger.class, L.class, SP.class}) +public class BgReadingTest { + private BgReading bgReading = new BgReading(); + @Mock + GlucoseStatus glucoseStatus; + + @Test + public void valueToUnits() { + bgReading.value = 18; + assertEquals(18, bgReading.valueToUnits(Constants.MGDL)*1, 0.01d); + assertEquals(1, bgReading.valueToUnits(Constants.MMOL)*1, 0.01d); + } + + @Test + public void directionToSymbol() { + bgReading = new BgReading(); + bgReading.direction = "DoubleDown"; + assertEquals("\u21ca", bgReading.directionToSymbol()); + bgReading.direction = "SingleDown"; + assertEquals("\u2193", bgReading.directionToSymbol()); + bgReading.direction = "FortyFiveDown"; + assertEquals("\u2198", bgReading.directionToSymbol()); + bgReading.direction = "Flat"; + assertEquals("\u2192", bgReading.directionToSymbol()); + bgReading.direction = "FortyFiveUp"; + assertEquals("\u2197", bgReading.directionToSymbol()); + bgReading.direction = "SingleUp"; + assertEquals("\u2191", bgReading.directionToSymbol()); + bgReading.direction = "DoubleUp"; + assertEquals("\u21c8", bgReading.directionToSymbol()); + bgReading.direction = "OUT OF RANGE"; + assertEquals("??", bgReading.directionToSymbol()); + + } + + @Test + public void calculateDirection() throws Exception { + assertEquals("??", bgReading.calculateDirection()); + + + } + + @Before + public void prepareMock() { + AAPSMocker.mockMainApp(); + AAPSMocker.mockApplicationContext(); + AAPSMocker.mockSP(); + AAPSMocker.mockL(); + } +} \ No newline at end of file From 85bf1fd6bd634463d8cb43887983049efff94deb Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Tue, 30 Apr 2019 15:07:43 +0300 Subject: [PATCH 04/30] Fix + more tests --- .../nightscout/androidaps/db/BgReading.java | 17 +++- .../androidaps/db/BgReadingTest.java | 83 +++++++++++++++++++ 2 files changed, 96 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java index 254c2a7318..6f87f232de 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java +++ b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java @@ -251,12 +251,16 @@ public class BgReading implements DataPointWithLabelInterface { // Copied from xDrip+ public String calculateDirection(){ - GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); - if (glucoseStatus == null || glucoseStatus.prev_glucose != 0) + GlucoseStatus glucoseStatus = getGlucoseStatus(); + double slope = 0; + if (glucoseStatus == null || glucoseStatus.prev_glucose == 0) return "??"; -// double slope = glucoseStatus.delta / (glucoseStatus.previous_date - glucoseStatus.date); - double slope = (glucoseStatus.glucose - glucoseStatus.prev_glucose) / (glucoseStatus.previous_date - glucoseStatus.date); + // Avoid division by 0 + if (glucoseStatus.date == glucoseStatus.previous_date) + slope = 0; + else + slope = (glucoseStatus.prev_glucose - glucoseStatus.glucose) / (glucoseStatus.previous_date - glucoseStatus.date); log.debug("Slope is :"+slope+" delta "+glucoseStatus.delta+" date difference "+(glucoseStatus.date - glucoseStatus.previous_date)); double slope_by_minute = slope * 60000; String arrow = "NONE"; @@ -281,4 +285,9 @@ public class BgReading implements DataPointWithLabelInterface { } + // Used for testing purpose + protected GlucoseStatus getGlucoseStatus() { + return GlucoseStatus.getGlucoseStatusData(); + } + } diff --git a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java index 3467205fba..4a43f9fb7a 100644 --- a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java +++ b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java @@ -4,9 +4,11 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.util.Date; import java.util.logging.Logger; import info.AAPSMocker; @@ -17,6 +19,7 @@ import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; import info.nightscout.androidaps.utils.SP; import static org.junit.Assert.*; +import static org.powermock.api.mockito.PowerMockito.doReturn; @RunWith(PowerMockRunner.class) @PrepareForTest({MainApp.class, Logger.class, L.class, SP.class}) @@ -54,10 +57,90 @@ public class BgReadingTest { } + @Test + public void dateTest(){ + bgReading = new BgReading(); + long now = System.currentTimeMillis(); + bgReading.date = now; + Date nowDate = new Date(now); + assertEquals(now, bgReading.date(now).date); + assertEquals(now, bgReading.date(nowDate).date); + } + + @Test + public void valueTest(){ + bgReading = new BgReading(); + double valueToSet = 81; // 4.5 mmol + assertEquals(81d, bgReading.value(valueToSet).value, 0.01d); + } + + @Test + public void copyFromTest(){ + bgReading = new BgReading(); + BgReading copy = new BgReading(); + bgReading.value = 81; + long now = System.currentTimeMillis(); + bgReading.date = now; + copy.date = now; + + copy.copyFrom(bgReading); + + assertEquals(81, copy.value, 0.1d); + assertEquals(now, copy.date); + assertEquals(bgReading.directionToSymbol(), copy.directionToSymbol()); + } + + @Test + public void isEqualTest(){ + bgReading = new BgReading(); + BgReading copy = new BgReading(); + bgReading.value = 81; + long now = System.currentTimeMillis(); + bgReading.date = now; + copy.date = now; + + copy.copyFrom(bgReading); + + assertEquals(true, copy.isEqual(bgReading)); + assertEquals(false, copy.isEqual(new BgReading())); + } + @Test public void calculateDirection() throws Exception { assertEquals("??", bgReading.calculateDirection()); + bgReading = new BgReading(); + glucoseStatus = new GlucoseStatus(); + glucoseStatus.glucose = 0; + glucoseStatus.prev_glucose = 0; + glucoseStatus.date = 1000L * 60 * 12;; + glucoseStatus.previous_date = 1000L * 60 * 6; + BgReading newReading = Mockito.spy(new BgReading()); + doReturn(glucoseStatus).when(newReading).getGlucoseStatus(); + assertEquals("??", newReading.calculateDirection()); + glucoseStatus.glucose = 72; + glucoseStatus.prev_glucose = 10; + assertEquals("DoubleUp", newReading.calculateDirection()); + glucoseStatus.glucose = 72; + glucoseStatus.prev_glucose = 55; + assertEquals("SingleUp", newReading.calculateDirection()); + glucoseStatus.glucose = 72; + glucoseStatus.prev_glucose = 65; + assertEquals("FortyFiveUp", newReading.calculateDirection()); + glucoseStatus.glucose = 72; + glucoseStatus.prev_glucose = 70; + assertEquals("Flat", newReading.calculateDirection()); + glucoseStatus.glucose = 10; + glucoseStatus.prev_glucose = 72; + assertEquals("DoubleDown", newReading.calculateDirection()); + glucoseStatus.glucose = 55; + glucoseStatus.prev_glucose = 72; + assertEquals("SingleDown", newReading.calculateDirection()); + glucoseStatus.glucose = 65; + glucoseStatus.prev_glucose = 72; + assertEquals("FortyFiveDown", newReading.calculateDirection()); + + } From 62b2d83a1818c6e6ec70c6ff9e8850cf8fbeb05c Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Fri, 10 May 2019 08:47:32 +0200 Subject: [PATCH 05/30] cleanup (#68) --- .../nightscout/androidaps/db/BgReading.java | 51 +++++++++---------- .../iob/iobCobCalculator/GlucoseStatus.java | 6 ++- .../androidaps/db/BgReadingTest.java | 45 ++++++++-------- 3 files changed, 52 insertions(+), 50 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java index 6f87f232de..bfedc94ad0 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java +++ b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java @@ -23,7 +23,7 @@ import info.nightscout.androidaps.utils.DecimalFormatter; @DatabaseTable(tableName = DatabaseHelper.DATABASE_BGREADINGS) public class BgReading implements DataPointWithLabelInterface { - private static Logger log = LoggerFactory.getLogger(L.DATABASE); + private static Logger log = LoggerFactory.getLogger(L.GLUCOSE); @DatabaseField(id = true) public long date; @@ -74,10 +74,10 @@ public class BgReading implements DataPointWithLabelInterface { public String directionToSymbol() { String symbol = ""; - if (direction == null) { + if (direction == null) direction = calculateDirection(); - this.directionToSymbol(); // possible endless loop ?!? - } else if (direction.compareTo("DoubleDown") == 0) { + + if (direction.compareTo("DoubleDown") == 0) { symbol = "\u21ca"; } else if (direction.compareTo("SingleDown") == 0) { symbol = "\u2193"; @@ -97,18 +97,13 @@ public class BgReading implements DataPointWithLabelInterface { return symbol; } - public static boolean isSlopeNameInvalid(String direction) { - if (direction.compareTo("NOT_COMPUTABLE") == 0 || + private static boolean isSlopeNameInvalid(String direction) { + return direction.compareTo("NOT_COMPUTABLE") == 0 || direction.compareTo("NOT COMPUTABLE") == 0 || direction.compareTo("OUT_OF_RANGE") == 0 || direction.compareTo("OUT OF RANGE") == 0 || direction.compareTo("NONE") == 0 || - direction.compareTo("NotComputable") == 0 - ) { - return true; - } else { - return false; - } + direction.compareTo("NotComputable") == 0; } @@ -125,7 +120,8 @@ public class BgReading implements DataPointWithLabelInterface { public boolean isDataChanging(BgReading other) { if (date != other.date) { - log.error("Comparing different"); + if (L.isEnabled(L.GLUCOSE)) + log.error("Comparing different"); return false; } if (value != other.value) @@ -135,7 +131,8 @@ public class BgReading implements DataPointWithLabelInterface { public boolean isEqual(BgReading other) { if (date != other.date) { - log.error("Comparing different"); + if (L.isEnabled(L.GLUCOSE)) + log.error("Comparing different"); return false; } if (value != other.value) @@ -151,7 +148,8 @@ public class BgReading implements DataPointWithLabelInterface { public void copyFrom(BgReading other) { if (date != other.date) { - log.error("Copying different"); + if (L.isEnabled(L.GLUCOSE)) + log.error("Copying different"); return; } value = other.value; @@ -250,18 +248,21 @@ public class BgReading implements DataPointWithLabelInterface { // Copied from xDrip+ - public String calculateDirection(){ - GlucoseStatus glucoseStatus = getGlucoseStatus(); - double slope = 0; + String calculateDirection() { + GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); + double slope; if (glucoseStatus == null || glucoseStatus.prev_glucose == 0) - return "??"; + return "NONE"; // Avoid division by 0 if (glucoseStatus.date == glucoseStatus.previous_date) slope = 0; else slope = (glucoseStatus.prev_glucose - glucoseStatus.glucose) / (glucoseStatus.previous_date - glucoseStatus.date); - log.debug("Slope is :"+slope+" delta "+glucoseStatus.delta+" date difference "+(glucoseStatus.date - glucoseStatus.previous_date)); + + if (L.isEnabled(L.GLUCOSE)) + log.debug("Slope is :" + slope + " delta " + glucoseStatus.delta + " date difference " + (glucoseStatus.date - glucoseStatus.previous_date)); + double slope_by_minute = slope * 60000; String arrow = "NONE"; @@ -280,14 +281,8 @@ public class BgReading implements DataPointWithLabelInterface { } else if (slope_by_minute <= (40)) { arrow = "DoubleUp"; } - log.debug("Direction set to: "+arrow); + if (L.isEnabled(L.GLUCOSE)) + log.debug("Direction set to: " + arrow); return arrow; - } - - // Used for testing purpose - protected GlucoseStatus getGlucoseStatus() { - return GlucoseStatus.getGlucoseStatusData(); - } - } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java index f2cb7502f0..54cac18e70 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java @@ -98,8 +98,8 @@ public class GlucoseStatus { status.long_avgdelta = 0d; status.avgdelta = 0d; // for OpenAPS MA status.date = now_date; - status.previous_date = prevDate; // setting the previous value date for slope calculation - status.prev_glucose = prevValue; + status.previous_date = 0; // setting the previous value date for slope calculation + status.prev_glucose = 0; if (L.isEnabled(L.GLUCOSE)) log.debug("sizeRecords==1"); @@ -171,6 +171,8 @@ public class GlucoseStatus { status.long_avgdelta = average(long_deltas); status.avgdelta = status.short_avgdelta; // for OpenAPS MA + status.previous_date = prevDate; // setting the previous value date for slope calculation + status.prev_glucose = prevValue; if (L.isEnabled(L.GLUCOSE)) log.debug(status.log()); diff --git a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java index 4a43f9fb7a..b1b61285f4 100644 --- a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java +++ b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -18,21 +19,23 @@ import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; import info.nightscout.androidaps.utils.SP; -import static org.junit.Assert.*; -import static org.powermock.api.mockito.PowerMockito.doReturn; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; @RunWith(PowerMockRunner.class) -@PrepareForTest({MainApp.class, Logger.class, L.class, SP.class}) +@PrepareForTest({MainApp.class, Logger.class, L.class, SP.class, GlucoseStatus.class}) public class BgReadingTest { private BgReading bgReading = new BgReading(); - @Mock + GlucoseStatus glucoseStatus; @Test public void valueToUnits() { bgReading.value = 18; - assertEquals(18, bgReading.valueToUnits(Constants.MGDL)*1, 0.01d); - assertEquals(1, bgReading.valueToUnits(Constants.MMOL)*1, 0.01d); + assertEquals(18, bgReading.valueToUnits(Constants.MGDL) * 1, 0.01d); + assertEquals(1, bgReading.valueToUnits(Constants.MMOL) * 1, 0.01d); } @Test @@ -58,7 +61,7 @@ public class BgReadingTest { } @Test - public void dateTest(){ + public void dateTest() { bgReading = new BgReading(); long now = System.currentTimeMillis(); bgReading.date = now; @@ -68,14 +71,14 @@ public class BgReadingTest { } @Test - public void valueTest(){ + public void valueTest() { bgReading = new BgReading(); double valueToSet = 81; // 4.5 mmol assertEquals(81d, bgReading.value(valueToSet).value, 0.01d); } @Test - public void copyFromTest(){ + public void copyFromTest() { bgReading = new BgReading(); BgReading copy = new BgReading(); bgReading.value = 81; @@ -91,7 +94,7 @@ public class BgReadingTest { } @Test - public void isEqualTest(){ + public void isEqualTest() { bgReading = new BgReading(); BgReading copy = new BgReading(); bgReading.value = 81; @@ -101,23 +104,26 @@ public class BgReadingTest { copy.copyFrom(bgReading); - assertEquals(true, copy.isEqual(bgReading)); - assertEquals(false, copy.isEqual(new BgReading())); + assertTrue(copy.isEqual(bgReading)); + assertFalse(copy.isEqual(new BgReading())); } @Test - public void calculateDirection() throws Exception { - assertEquals("??", bgReading.calculateDirection()); + public void calculateDirection() { + assertEquals("NONE", bgReading.calculateDirection()); - bgReading = new BgReading(); glucoseStatus = new GlucoseStatus(); glucoseStatus.glucose = 0; glucoseStatus.prev_glucose = 0; - glucoseStatus.date = 1000L * 60 * 12;; + glucoseStatus.date = 1000L * 60 * 12; glucoseStatus.previous_date = 1000L * 60 * 6; - BgReading newReading = Mockito.spy(new BgReading()); - doReturn(glucoseStatus).when(newReading).getGlucoseStatus(); - assertEquals("??", newReading.calculateDirection()); + + BgReading newReading = new BgReading(); + + PowerMockito.mockStatic(GlucoseStatus.class); + when(GlucoseStatus.getGlucoseStatusData()).thenReturn(glucoseStatus); + + assertEquals("NONE", newReading.calculateDirection()); glucoseStatus.glucose = 72; glucoseStatus.prev_glucose = 10; assertEquals("DoubleUp", newReading.calculateDirection()); @@ -141,7 +147,6 @@ public class BgReadingTest { assertEquals("FortyFiveDown", newReading.calculateDirection()); - } @Before From 6e63d340cd29e23152b254e24d2be6f95b9817e5 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Mon, 13 May 2019 14:18:10 +0300 Subject: [PATCH 06/30] reworked to use DBHelper --- .../nightscout/androidaps/db/BgReading.java | 25 ++++-- .../iob/iobCobCalculator/GlucoseStatus.java | 14 ---- .../androidaps/db/BgReadingTest.java | 81 ++++++++++--------- 3 files changed, 63 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java index bfedc94ad0..8f7782cff2 100644 --- a/app/src/main/java/info/nightscout/androidaps/db/BgReading.java +++ b/app/src/main/java/info/nightscout/androidaps/db/BgReading.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; +import java.util.List; import java.util.Objects; import info.nightscout.androidaps.Constants; @@ -18,8 +19,8 @@ import info.nightscout.androidaps.plugins.general.nsclient.data.NSSgv; import info.nightscout.androidaps.plugins.general.overview.OverviewPlugin; import info.nightscout.androidaps.plugins.general.overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.androidaps.plugins.general.overview.graphExtensions.PointsWithLabelGraphSeries; -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; import info.nightscout.androidaps.utils.DecimalFormatter; +import info.nightscout.androidaps.utils.T; @DatabaseTable(tableName = DatabaseHelper.DATABASE_BGREADINGS) public class BgReading implements DataPointWithLabelInterface { @@ -249,19 +250,29 @@ public class BgReading implements DataPointWithLabelInterface { // Copied from xDrip+ String calculateDirection() { - GlucoseStatus glucoseStatus = GlucoseStatus.getGlucoseStatusData(); - double slope; - if (glucoseStatus == null || glucoseStatus.prev_glucose == 0) + // Rework to get bgreaings from internal DB and calculate on that base + + List bgReadingsList = MainApp.getDbHelper().getAllBgreadingsDataFromTime(this.date - T.mins(10).msecs(), false); + if (bgReadingsList == null || bgReadingsList.size() < 2) return "NONE"; + BgReading current = bgReadingsList.get(1); + BgReading previous = bgReadingsList.get(0); + + if (bgReadingsList.get(1).date < bgReadingsList.get(0).date) { + current = bgReadingsList.get(0); + previous = bgReadingsList.get(1); + } + + double slope; // Avoid division by 0 - if (glucoseStatus.date == glucoseStatus.previous_date) + if (current.date == previous.date) slope = 0; else - slope = (glucoseStatus.prev_glucose - glucoseStatus.glucose) / (glucoseStatus.previous_date - glucoseStatus.date); + slope = (previous.value - current.value) / (previous.date - current.date); if (L.isEnabled(L.GLUCOSE)) - log.debug("Slope is :" + slope + " delta " + glucoseStatus.delta + " date difference " + (glucoseStatus.date - glucoseStatus.previous_date)); + log.debug("Slope is :" + slope + " delta " + (previous.value - current.value) + " date difference " + (current.date - previous.date)); double slope_by_minute = slope * 60000; String arrow = "NONE"; diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java index 54cac18e70..191ce9e1cd 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/iob/iobCobCalculator/GlucoseStatus.java @@ -26,8 +26,6 @@ public class GlucoseStatus { public double short_avgdelta = 0d; public double long_avgdelta = 0d; public long date = 0L; - public long previous_date = 0L; - public double prev_glucose = 0d; public String log() { @@ -60,8 +58,6 @@ public class GlucoseStatus { // load 45min //long fromtime = DateUtil.now() - 60 * 1000L * 45; //List data = MainApp.getDbHelper().getBgreadingsDataFromTime(fromtime, false); - long prevDate = 0; - double prevValue = 0; synchronized (IobCobCalculatorPlugin.getPlugin().getDataLock()) { @@ -98,9 +94,6 @@ public class GlucoseStatus { status.long_avgdelta = 0d; status.avgdelta = 0d; // for OpenAPS MA status.date = now_date; - status.previous_date = 0; // setting the previous value date for slope calculation - status.prev_glucose = 0; - if (L.isEnabled(L.GLUCOSE)) log.debug("sizeRecords==1"); return status.round(); @@ -125,11 +118,6 @@ public class GlucoseStatus { // multiply by 5 to get the same units as delta, i.e. mg/dL/5m change = now.value - then.value; avgdelta = change / minutesago * 5; - // save the value of date if it was 5 min ago or less than 10 min - if( minutesago >= 5 && minutesago < 10 ) { - prevDate = then_date; - prevValue = then.value; - } if (L.isEnabled(L.GLUCOSE)) log.debug(then.toString() + " minutesago=" + minutesago + " avgdelta=" + avgdelta); @@ -171,8 +159,6 @@ public class GlucoseStatus { status.long_avgdelta = average(long_deltas); status.avgdelta = status.short_avgdelta; // for OpenAPS MA - status.previous_date = prevDate; // setting the previous value date for slope calculation - status.prev_glucose = prevValue; if (L.isEnabled(L.GLUCOSE)) log.debug(status.log()); diff --git a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java index b1b61285f4..991c2f7956 100644 --- a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java +++ b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java @@ -3,15 +3,16 @@ package info.nightscout.androidaps.db; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import java.util.ArrayList; import java.util.Date; +import java.util.List; import java.util.logging.Logger; +import edu.emory.mathcs.backport.java.util.Arrays; import info.AAPSMocker; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; @@ -22,6 +23,8 @@ import info.nightscout.androidaps.utils.SP; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.when; @RunWith(PowerMockRunner.class) @@ -110,41 +113,32 @@ public class BgReadingTest { @Test public void calculateDirection() { + List bgReadingsList = null; + AAPSMocker.mockDatabaseHelper(); + + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); assertEquals("NONE", bgReading.calculateDirection()); - - glucoseStatus = new GlucoseStatus(); - glucoseStatus.glucose = 0; - glucoseStatus.prev_glucose = 0; - glucoseStatus.date = 1000L * 60 * 12; - glucoseStatus.previous_date = 1000L * 60 * 6; - - BgReading newReading = new BgReading(); - - PowerMockito.mockStatic(GlucoseStatus.class); - when(GlucoseStatus.getGlucoseStatusData()).thenReturn(glucoseStatus); - - assertEquals("NONE", newReading.calculateDirection()); - glucoseStatus.glucose = 72; - glucoseStatus.prev_glucose = 10; - assertEquals("DoubleUp", newReading.calculateDirection()); - glucoseStatus.glucose = 72; - glucoseStatus.prev_glucose = 55; - assertEquals("SingleUp", newReading.calculateDirection()); - glucoseStatus.glucose = 72; - glucoseStatus.prev_glucose = 65; - assertEquals("FortyFiveUp", newReading.calculateDirection()); - glucoseStatus.glucose = 72; - glucoseStatus.prev_glucose = 70; - assertEquals("Flat", newReading.calculateDirection()); - glucoseStatus.glucose = 10; - glucoseStatus.prev_glucose = 72; - assertEquals("DoubleDown", newReading.calculateDirection()); - glucoseStatus.glucose = 55; - glucoseStatus.prev_glucose = 72; - assertEquals("SingleDown", newReading.calculateDirection()); - glucoseStatus.glucose = 65; - glucoseStatus.prev_glucose = 72; - assertEquals("FortyFiveDown", newReading.calculateDirection()); + bgReadingsList = setReadings(72,0); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("DoubleUp", bgReading.calculateDirection()); + bgReadingsList = setReadings(76,60); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("SingleUp", bgReading.calculateDirection()); + bgReadingsList = setReadings(74,65); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("FortyFiveUp", bgReading.calculateDirection()); + bgReadingsList = setReadings(72,72); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("Flat", bgReading.calculateDirection()); + bgReadingsList = setReadings(0,72); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("DoubleDown", bgReading.calculateDirection()); + bgReadingsList = setReadings(60,76); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("SingleDown", bgReading.calculateDirection()); + bgReadingsList = setReadings(65,74); + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + assertEquals("FortyFiveDown", bgReading.calculateDirection()); } @@ -155,5 +149,20 @@ public class BgReadingTest { AAPSMocker.mockApplicationContext(); AAPSMocker.mockSP(); AAPSMocker.mockL(); + AAPSMocker.mockDatabaseHelper(); + } + + public List setReadings(int current_value, int previous_value){ + BgReading now = new BgReading(); + now.value = current_value; + now.date = System.currentTimeMillis(); + BgReading previous = new BgReading(); + previous.value = previous_value; + previous.date = System.currentTimeMillis() - ( 6 * 60 * 1000L); + List bgReadings = new ArrayList() {{ + add(now); + add(previous); + }}; + return bgReadings; } } \ No newline at end of file From 453faf736d6b2b09164602d35f73e3e5bf3abc22 Mon Sep 17 00:00:00 2001 From: Roumen Georgiev Date: Wed, 19 Jun 2019 16:59:34 +0300 Subject: [PATCH 07/30] fix test moved the when().thenReturn to setReadings --- .../androidaps/db/BgReadingTest.java | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java index 991c2f7956..d8653d0914 100644 --- a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java +++ b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java @@ -118,29 +118,20 @@ public class BgReadingTest { when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); assertEquals("NONE", bgReading.calculateDirection()); - bgReadingsList = setReadings(72,0); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(72,0); assertEquals("DoubleUp", bgReading.calculateDirection()); - bgReadingsList = setReadings(76,60); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(76,60); assertEquals("SingleUp", bgReading.calculateDirection()); - bgReadingsList = setReadings(74,65); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(74,65); assertEquals("FortyFiveUp", bgReading.calculateDirection()); - bgReadingsList = setReadings(72,72); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(72,72); assertEquals("Flat", bgReading.calculateDirection()); - bgReadingsList = setReadings(0,72); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(0,72); assertEquals("DoubleDown", bgReading.calculateDirection()); - bgReadingsList = setReadings(60,76); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(60,76); assertEquals("SingleDown", bgReading.calculateDirection()); - bgReadingsList = setReadings(65,74); - when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadingsList); + setReadings(65,74); assertEquals("FortyFiveDown", bgReading.calculateDirection()); - - } @Before @@ -152,7 +143,7 @@ public class BgReadingTest { AAPSMocker.mockDatabaseHelper(); } - public List setReadings(int current_value, int previous_value){ + public void setReadings(int current_value, int previous_value){ BgReading now = new BgReading(); now.value = current_value; now.date = System.currentTimeMillis(); @@ -163,6 +154,6 @@ public class BgReadingTest { add(now); add(previous); }}; - return bgReadings; + when(MainApp.getDbHelper().getAllBgreadingsDataFromTime(anyLong(),anyBoolean())).thenReturn(bgReadings); } } \ No newline at end of file From a7589e4758c2379cff2dffff397b189e81288080 Mon Sep 17 00:00:00 2001 From: Dominik Dzienia Date: Tue, 5 Nov 2019 09:32:07 +0100 Subject: [PATCH 08/30] [#1806] For WearOS app, added option to make white status bar match background of whole watchface and blend in, switchable on Settings -> Matching divider --- .../androidaps/watchfaces/BaseWatchFace.java | 2 + .../androidaps/watchfaces/Home.java | 21 ++++--- .../androidaps/watchfaces/Home2.java | 61 ++++++++++++------- .../androidaps/watchfaces/LargeHome.java | 36 ++++++----- wear/src/main/res/xml/preferences.xml | 8 +++ 5 files changed, 83 insertions(+), 45 deletions(-) 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 229eb64f1b..24bb735067 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/BaseWatchFace.java @@ -71,6 +71,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen public boolean lowResMode = false; public boolean layoutSet = false; public boolean bIsRound = false; + public boolean dividerMatchesBg = false; public int pointSize = 2; public BgGraphBuilder bgGraphBuilder; public LineChartView chart; @@ -533,6 +534,7 @@ public abstract class BaseWatchFace extends WatchFace implements SharedPreferen } public void setColor() { + dividerMatchesBg = sharedPrefs.getBoolean("match_divider", false); if(lowResMode){ setColorLowRes(); } else if (sharedPrefs.getBoolean("dark", true)) { diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home.java index 430a3feb47..786dbd8179 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home.java @@ -65,7 +65,8 @@ public class Home extends BaseWatchFace { protected void setColorDark() { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView)); + mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_background : R.color.dark_statusView)); mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); if (sgvLevel == 1) { @@ -83,18 +84,21 @@ public class Home extends BaseWatchFace { } if (ageLevel == 1) { - mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTimestamp1_home)); + mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_midColor : R.color.dark_mTimestamp1_home)); } else { mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld)); } if (batteryLevel == 1) { - mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery)); + mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_midColor : R.color.dark_uploaderBattery)); } else { mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty)); } - mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mStatus_home)); + mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_midColor : R.color.dark_mStatus_home)); if (chart != null) { highColor = ContextCompat.getColor(getApplicationContext(), R.color.dark_highColor); @@ -131,7 +135,8 @@ public class Home extends BaseWatchFace { protected void setColorBright() { if (getCurrentWatchMode() == WatchMode.INTERACTIVE) { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background)); + mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.light_background : R.color.light_stripe_background)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background)); if (sgvLevel == 1) { mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor)); @@ -148,17 +153,17 @@ public class Home extends BaseWatchFace { } if (ageLevel == 1) { - mTimestamp.setTextColor(Color.WHITE); + mTimestamp.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE); } else { mTimestamp.setTextColor(Color.RED); } if (batteryLevel == 1) { - mUploaderBattery.setTextColor(Color.WHITE); + mUploaderBattery.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE); } else { mUploaderBattery.setTextColor(Color.RED); } - mStatus.setTextColor(Color.WHITE); + mStatus.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE); mTime.setTextColor(Color.BLACK); if (chart != null) { diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home2.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home2.java index 41c9fd3029..64ec7e17c8 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home2.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/Home2.java @@ -2,6 +2,7 @@ package info.nightscout.androidaps.watchfaces; import android.content.Intent; import android.graphics.Color; +import androidx.annotation.ColorInt; import androidx.core.content.ContextCompat; import android.support.wearable.watchface.WatchFaceStyle; import android.view.LayoutInflater; @@ -64,7 +65,14 @@ public class Home2 extends BaseWatchFace { } protected void setColorDark() { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView)); + @ColorInt final int dividerTxtColor = dividerMatchesBg ? + ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor) : Color.BLACK; + @ColorInt final int dividerBatteryOkColor = ContextCompat.getColor(getApplicationContext(), + dividerMatchesBg ? R.color.dark_midColor : R.color.dark_uploaderBattery); + @ColorInt final int dividerBgColor = ContextCompat.getColor(getApplicationContext(), + dividerMatchesBg ? R.color.dark_background : R.color.dark_statusView); + + mLinearLayout.setBackgroundColor(dividerBgColor); mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); @@ -96,15 +104,15 @@ public class Home2 extends BaseWatchFace { } if (batteryLevel == 1) { - mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery)); + mUploaderBattery.setTextColor(dividerBatteryOkColor); } else { mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty)); } - mRigBattery.setTextColor(Color.BLACK); - mDelta.setTextColor(Color.BLACK); - mAvgDelta.setTextColor(Color.BLACK); - mBasalRate.setTextColor(Color.BLACK); - mBgi.setTextColor(Color.BLACK); + mRigBattery.setTextColor(dividerTxtColor); + mDelta.setTextColor(dividerTxtColor); + mAvgDelta.setTextColor(dividerTxtColor); + mBasalRate.setTextColor(dividerTxtColor); + mBgi.setTextColor(dividerTxtColor); if (loopLevel == 1) { mLoop.setBackgroundResource(R.drawable.loop_green_25); @@ -125,7 +133,12 @@ public class Home2 extends BaseWatchFace { } protected void setColorLowRes() { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_statusView)); + @ColorInt final int dividerTxtColor = dividerMatchesBg ? + ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor) : Color.BLACK; + @ColorInt final int dividerBgColor = ContextCompat.getColor(getApplicationContext(), + dividerMatchesBg ? R.color.dark_background : R.color.dark_statusView); + + mLinearLayout.setBackgroundColor(dividerBgColor); mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); mLoop.setBackgroundResource(R.drawable.loop_grey_25); @@ -133,12 +146,12 @@ public class Home2 extends BaseWatchFace { mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_Timestamp)); - mDelta.setTextColor(Color.BLACK); - mAvgDelta.setTextColor(Color.BLACK); - mRigBattery.setTextColor(Color.BLACK); - mUploaderBattery.setTextColor(Color.BLACK); - mBasalRate.setTextColor(Color.BLACK); - mBgi.setTextColor(Color.BLACK); + mDelta.setTextColor(dividerTxtColor); + mAvgDelta.setTextColor(dividerTxtColor); + mRigBattery.setTextColor(dividerTxtColor); + mUploaderBattery.setTextColor(dividerTxtColor); + mBasalRate.setTextColor(dividerTxtColor); + mBgi.setTextColor(dividerTxtColor); mIOB1.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); mIOB2.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); mCOB1.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); @@ -162,7 +175,13 @@ public class Home2 extends BaseWatchFace { protected void setColorBright() { if (getCurrentWatchMode() == WatchMode.INTERACTIVE) { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background)); + + @ColorInt final int dividerTxtColor = dividerMatchesBg ? Color.BLACK : + ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor); + @ColorInt final int dividerBgColor = ContextCompat.getColor(getApplicationContext(), + dividerMatchesBg ? R.color.light_background : R.color.light_stripe_background); + + mLinearLayout.setBackgroundColor(dividerBgColor); mLinearLayout2.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background)); mTime.setTextColor(Color.BLACK); @@ -194,15 +213,15 @@ public class Home2 extends BaseWatchFace { } if (batteryLevel == 1) { - mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); + mUploaderBattery.setTextColor(dividerTxtColor); } else { mUploaderBattery.setTextColor(Color.RED); } - mRigBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); - mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); - mAvgDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); - mBasalRate.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); - mBgi.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); + mRigBattery.setTextColor(dividerTxtColor); + mDelta.setTextColor(dividerTxtColor); + mAvgDelta.setTextColor(dividerTxtColor); + mBasalRate.setTextColor(dividerTxtColor); + mBgi.setTextColor(dividerTxtColor); if (loopLevel == 1) { mLoop.setBackgroundResource(R.drawable.loop_green_25); diff --git a/wear/src/main/java/info/nightscout/androidaps/watchfaces/LargeHome.java b/wear/src/main/java/info/nightscout/androidaps/watchfaces/LargeHome.java index ffb8dce3ad..672b95dee0 100644 --- a/wear/src/main/java/info/nightscout/androidaps/watchfaces/LargeHome.java +++ b/wear/src/main/java/info/nightscout/androidaps/watchfaces/LargeHome.java @@ -49,7 +49,8 @@ public class LargeHome extends BaseWatchFace { @Override protected void setColorDark(){ - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mLinearLayout)); + mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_background : R.color.dark_mLinearLayout)); mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); if (sgvLevel == 1) { @@ -67,24 +68,27 @@ public class LargeHome extends BaseWatchFace { } if (ageLevel == 1) { - mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTimestamp1_home)); + mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_midColor : R.color.dark_mTimestamp1_home)); } else { mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_TimestampOld)); } if (batteryLevel == 1) { - mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery)); + mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.dark_midColor : R.color.dark_uploaderBattery)); } else { mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBatteryEmpty)); } - mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mStatus_home)); + mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_mStatus_home)); } @Override protected void setColorBright() { if (getCurrentWatchMode() == WatchMode.INTERACTIVE) { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_stripe_background)); + mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? + R.color.light_background : R.color.light_stripe_background)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.light_background)); if (sgvLevel == 1) { mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.light_highColor)); @@ -101,21 +105,21 @@ public class LargeHome extends BaseWatchFace { } if (ageLevel == 1) { - mTimestamp.setTextColor(Color.WHITE); + mTimestamp.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE); } else { mTimestamp.setTextColor(Color.RED); } if (batteryLevel == 1) { - mUploaderBattery.setTextColor(Color.WHITE); + mUploaderBattery.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE); } else { mUploaderBattery.setTextColor(Color.RED); } - mStatus.setTextColor(Color.WHITE); + mStatus.setTextColor(dividerMatchesBg ? Color.BLACK : Color.WHITE); mTime.setTextColor(Color.BLACK); } else { mRelativeLayout.setBackgroundColor(Color.BLACK); - mLinearLayout.setBackgroundColor(Color.LTGRAY); + mLinearLayout.setBackgroundColor(dividerMatchesBg ? Color.BLACK : Color.LTGRAY); if (sgvLevel == 1) { mSgv.setTextColor(Color.YELLOW); mDirection.setTextColor(Color.YELLOW); @@ -130,23 +134,23 @@ public class LargeHome extends BaseWatchFace { mDelta.setTextColor(Color.RED); } - mUploaderBattery.setTextColor(Color.BLACK); - mTimestamp.setTextColor(Color.BLACK); - mStatus.setTextColor(Color.BLACK); + mUploaderBattery.setTextColor(dividerMatchesBg ? Color.WHITE : Color.BLACK); + mTimestamp.setTextColor(dividerMatchesBg ? Color.WHITE : Color.BLACK); + mStatus.setTextColor(dividerMatchesBg ? Color.WHITE : Color.BLACK); mTime.setTextColor(Color.WHITE); } } @Override protected void setColorLowRes() { - mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mLinearLayout)); + mLinearLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_background : R.color.dark_mLinearLayout)); mTime.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTime)); mRelativeLayout.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_background)); mSgv.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); mDelta.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); mDirection.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_midColor)); - mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mTimestamp1_home)); - mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_uploaderBattery)); - mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.dark_mStatus_home)); + mTimestamp.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_mTimestamp1_home)); + mUploaderBattery.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_uploaderBattery)); + mStatus.setTextColor(ContextCompat.getColor(getApplicationContext(), dividerMatchesBg ? R.color.dark_midColor : R.color.dark_mStatus_home)); } } diff --git a/wear/src/main/res/xml/preferences.xml b/wear/src/main/res/xml/preferences.xml index 0befaddfd0..f0fc4b5789 100644 --- a/wear/src/main/res/xml/preferences.xml +++ b/wear/src/main/res/xml/preferences.xml @@ -125,6 +125,14 @@ app:wear_iconOff="@drawable/settings_off" app:wear_iconOn="@drawable/settings_on"/> + + Date: Fri, 22 Nov 2019 18:30:22 +0100 Subject: [PATCH 09/30] Also deactivate Automation if Loop is disabled, not only if it is suspended. --- .../androidaps/plugins/general/automation/AutomationPlugin.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt index 8b78ae6458..b559311f9d 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/AutomationPlugin.kt @@ -161,7 +161,7 @@ object AutomationPlugin : PluginBase(PluginDescription() private fun processActions() { if (!isEnabled(PluginType.GENERAL)) return - if (LoopPlugin.getPlugin().isSuspended) { + if (LoopPlugin.getPlugin().isSuspended || !LoopPlugin.getPlugin().isEnabled(PluginType.LOOP)) { if (L.isEnabled(L.AUTOMATION)) log.debug("Loop deactivated") return From c76f8d76c85f2e7c1810e35d0a1beb0e426f6ce8 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 21:08:20 +0100 Subject: [PATCH 10/30] lint --- .../treatments/fragments/TreatmentsProfileSwitchFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsProfileSwitchFragment.kt b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsProfileSwitchFragment.kt index 28b4f04452..a125f7a8c3 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsProfileSwitchFragment.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/treatments/fragments/TreatmentsProfileSwitchFragment.kt @@ -48,7 +48,7 @@ class TreatmentsProfileSwitchFragment : Fragment() { val builder = AlertDialog.Builder(this.context!!) builder.setTitle(MainApp.gs(R.string.confirmation)) builder.setMessage(MainApp.gs(R.string.refresheventsfromnightscout) + "?") - builder.setPositiveButton(MainApp.gs(R.string.ok)) { dialog: DialogInterface?, id: Int -> + builder.setPositiveButton(MainApp.gs(R.string.ok)) { _ , _-> MainApp.getDbHelper().resetProfileSwitch() RxBus.send(EventNSClientRestart()) } From 1a71c663eecc6bd0788e20e5acd6ecadb6a19ac6 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 21:21:37 +0100 Subject: [PATCH 11/30] fix test --- .../java/info/nightscout/androidaps/db/BgReadingTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java index d8653d0914..e3714a7545 100644 --- a/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java +++ b/app/src/test/java/info/nightscout/androidaps/db/BgReadingTest.java @@ -3,7 +3,6 @@ package info.nightscout.androidaps.db; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @@ -12,7 +11,6 @@ import java.util.Date; import java.util.List; import java.util.logging.Logger; -import edu.emory.mathcs.backport.java.util.Arrays; import info.AAPSMocker; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; @@ -32,8 +30,6 @@ import static org.mockito.Mockito.when; public class BgReadingTest { private BgReading bgReading = new BgReading(); - GlucoseStatus glucoseStatus; - @Test public void valueToUnits() { bgReading.value = 18; From 86a826e65a2f57c62b689df799f4f0df7f257ea3 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 21:36:39 +0100 Subject: [PATCH 12/30] firebase lib update --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 858fe354fc..0f99593636 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -225,8 +225,8 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.google.android.gms:play-services-wearable:17.0.0' - implementation 'com.google.firebase:firebase-core:17.2.0' - implementation("com.crashlytics.sdk.android:crashlytics:2.9.9@aar") { + implementation 'com.google.firebase:firebase-core:17.2.1' + implementation('com.crashlytics.sdk.android:crashlytics:2.10.1@aar') { transitive = true; } From 7cca9892dce78a9893d72424b48fe0767d4cf429 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 22:16:20 +0100 Subject: [PATCH 13/30] materialdatetimepicker update --- app/build.gradle | 2 +- .../activities/HistoryBrowseActivity.java | 4 +- .../general/automation/triggers/Trigger.java | 8 ++-- .../triggers/TriggerRecurringTime.java | 6 +-- .../automation/triggers/TriggerTime.java | 10 ++--- .../automation/triggers/TriggerTimeRange.java | 35 ++++++++--------- .../Dialogs/NewNSTreatmentDialog.java | 39 +++++++------------ .../main/res/layout/actions_fill_dialog.xml | 2 +- .../careportal_newnstreatment_dialog.xml | 2 +- .../layout/overview_calibration_dialog.xml | 2 +- .../overview_editquickwizard_dialog.xml | 2 +- .../res/layout/overview_newcarbs_dialog.xml | 2 +- .../overview_newextendedbolus_dialog.xml | 2 +- .../res/layout/overview_newinsulin_dialog.xml | 2 +- .../layout/overview_newtempbasal_dialog.xml | 2 +- .../layout/overview_newtreatment_dialog.xml | 2 +- 16 files changed, 54 insertions(+), 68 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0f99593636..5e4622da15 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -238,7 +238,7 @@ dependencies { implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.percentlayout:percentlayout:1.0.0' - implementation "com.wdullaer:materialdatetimepicker:2.3.0" + implementation 'com.wdullaer:materialdatetimepicker:4.2.3' implementation "io.reactivex.rxjava2:rxandroid:2.1.1" diff --git a/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.java b/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.java index 2397dda9ed..c0f654bbbb 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/activities/HistoryBrowseActivity.java @@ -45,7 +45,7 @@ import info.nightscout.androidaps.utils.T; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; -public class HistoryBrowseActivity extends NoSplashActivity { +public class HistoryBrowseActivity extends NoSplashAppCompatActivity { private static Logger log = LoggerFactory.getLogger(HistoryBrowseActivity.class); private CompositeDisposable disposable = new CompositeDisposable(); @@ -150,7 +150,7 @@ public class HistoryBrowseActivity extends NoSplashActivity { ); dpd.setThemeDark(true); dpd.dismissOnPause(true); - dpd.show(getFragmentManager(), "Datepickerdialog"); + dpd.show(getSupportFragmentManager(), "Datepickerdialog"); }); bgGraph.getGridLabelRenderer().setGridColor(MainApp.gc(R.color.graphgrid)); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.java index 69ac67bf07..c1bca15028 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/Trigger.java @@ -1,12 +1,12 @@ package info.nightscout.androidaps.plugins.general.automation.triggers; -import android.app.Activity; import android.content.Context; import android.content.ContextWrapper; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import com.google.common.base.Optional; @@ -84,11 +84,11 @@ public abstract class Trigger { } @Nullable - Activity scanForActivity(Context cont) { + AppCompatActivity scanForActivity(Context cont) { if (cont == null) return null; - else if (cont instanceof Activity) - return (Activity) cont; + else if (cont instanceof AppCompatActivity) + return (AppCompatActivity) cont; else if (cont instanceof ContextWrapper) return scanForActivity(((ContextWrapper) cont).getBaseContext()); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java index 89c8d17085..f7f1035558 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java @@ -1,6 +1,5 @@ package info.nightscout.androidaps.plugins.general.automation.triggers; -import android.app.Activity; import android.graphics.Typeface; import android.text.format.DateFormat; import android.view.ViewGroup; @@ -9,6 +8,7 @@ import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import com.dpro.widgets.WeekdaysPicker; @@ -294,9 +294,9 @@ public class TriggerRecurringTime extends Trigger { ); tpd.setThemeDark(true); tpd.dismissOnPause(true); - Activity a = scanForActivity(root.getContext()); + AppCompatActivity a = scanForActivity(root.getContext()); if (a != null) - tpd.show(a.getFragmentManager(), "TimePickerDialog"); + tpd.show(a.getSupportFragmentManager(), "TimePickerDialog"); }); int px = MainApp.dpToPx(10); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTime.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTime.java index 08f9a65aa7..91e739ca45 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTime.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTime.java @@ -1,12 +1,12 @@ package info.nightscout.androidaps.plugins.general.automation.triggers; -import android.app.Activity; import android.graphics.Typeface; import android.text.format.DateFormat; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import com.google.common.base.Optional; @@ -142,9 +142,9 @@ public class TriggerTime extends Trigger { ); dpd.setThemeDark(true); dpd.dismissOnPause(true); - Activity a = scanForActivity(root.getContext()); + AppCompatActivity a = scanForActivity(root.getContext()); if (a != null) - dpd.show(a.getFragmentManager(), "DatePickerDialog"); + dpd.show(a.getSupportFragmentManager(), "DatePickerDialog"); }); timeButton.setOnClickListener(view -> { GregorianCalendar calendar = new GregorianCalendar(); @@ -162,9 +162,9 @@ public class TriggerTime extends Trigger { ); tpd.setThemeDark(true); tpd.dismissOnPause(true); - Activity a = scanForActivity(root.getContext()); + AppCompatActivity a = scanForActivity(root.getContext()); if (a != null) - tpd.show(a.getFragmentManager(), "TimePickerDialog"); + tpd.show(a.getSupportFragmentManager(), "TimePickerDialog"); }); int px = MainApp.dpToPx(10); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTimeRange.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTimeRange.java index 1d03871620..082c5af75c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTimeRange.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerTimeRange.java @@ -1,12 +1,12 @@ package info.nightscout.androidaps.plugins.general.automation.triggers; -import android.app.Activity; import android.graphics.Typeface; import android.text.format.DateFormat; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentManager; import com.google.common.base.Optional; @@ -18,7 +18,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Calendar; -import java.util.Date; import java.util.GregorianCalendar; import info.nightscout.androidaps.MainApp; @@ -33,14 +32,14 @@ import info.nightscout.androidaps.utils.T; public class TriggerTimeRange extends Trigger { private static Logger log = LoggerFactory.getLogger(L.AUTOMATION); - + // in minutes since midnight 60 means 1AM private int start; private int end; long timeZoneOffset = DateUtil.getTimeZoneOffsetMs(); public TriggerTimeRange() { - + start = getMinSinceMidnight(DateUtil.now()); end = getMinSinceMidnight(DateUtil.now()); } @@ -60,11 +59,11 @@ public class TriggerTimeRange extends Trigger { return false; boolean doRun = false; - if ( start < end && start < currentMinSinceMidnight && currentMinSinceMidnight < end) + if (start < end && start < currentMinSinceMidnight && currentMinSinceMidnight < end) doRun = true; - // handle cases like 10PM to 6AM - else if ( start > end && (start < currentMinSinceMidnight || currentMinSinceMidnight < end)) + // handle cases like 10PM to 6AM + else if (start > end && (start < currentMinSinceMidnight || currentMinSinceMidnight < end)) doRun = true; if (doRun) { @@ -129,8 +128,8 @@ public class TriggerTimeRange extends Trigger { } TriggerTimeRange period(int start, int end) { - this.start = getMinSinceMidnight(start*60000); - this.end = getMinSinceMidnight(end*60000); + this.start = getMinSinceMidnight(start * 60000); + this.end = getMinSinceMidnight(end * 60000); return this; } @@ -145,7 +144,7 @@ public class TriggerTimeRange extends Trigger { } long toMilis(long minutesSinceMidnight) { - return minutesSinceMidnight*60*1000; + return minutesSinceMidnight * 60 * 1000; } public int getMinSinceMidnight(long time) { @@ -157,11 +156,11 @@ public class TriggerTimeRange extends Trigger { return (calendar.get(Calendar.HOUR_OF_DAY) * 60) + calendar.get(Calendar.MINUTE); } - int getStart(){ + int getStart() { return start; } - int getEnd(){ + int getEnd() { return end; } @@ -170,8 +169,8 @@ public class TriggerTimeRange extends Trigger { TextView label = new TextView(root.getContext()); TextView startButton = new TextView(root.getContext()); TextView endButton = new TextView(root.getContext()); - log.debug("Start is: " + start ); - log.debug("End is: " + end ); + log.debug("Start is: " + start); + log.debug("End is: " + end); startButton.setText(DateUtil.timeString(toMilis(start) - timeZoneOffset)); endButton.setText(MainApp.gs(R.string.and) + " " + DateUtil.timeString(toMilis(end) - timeZoneOffset)); @@ -193,9 +192,9 @@ public class TriggerTimeRange extends Trigger { ); tpd.setThemeDark(true); tpd.dismissOnPause(true); - Activity a = scanForActivity(root.getContext()); + AppCompatActivity a = scanForActivity(root.getContext()); if (a != null) - tpd.show(a.getFragmentManager(), "TimePickerDialog"); + tpd.show(a.getSupportFragmentManager(), "TimePickerDialog"); }); endButton.setOnClickListener(view -> { GregorianCalendar calendar = new GregorianCalendar(); @@ -213,9 +212,9 @@ public class TriggerTimeRange extends Trigger { ); tpd.setThemeDark(true); tpd.dismissOnPause(true); - Activity a = scanForActivity(root.getContext()); + AppCompatActivity a = scanForActivity(root.getContext()); if (a != null) - tpd.show(a.getFragmentManager(), "TimePickerDialog"); + tpd.show(a.getSupportFragmentManager(), "TimePickerDialog"); }); int px = MainApp.dpToPx(10); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java index e2be9075e3..64b7b05987 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/careportal/Dialogs/NewNSTreatmentDialog.java @@ -1,10 +1,8 @@ package info.nightscout.androidaps.plugins.general.careportal.Dialogs; -import android.app.Activity; +import android.content.Context; import android.os.Bundle; -import androidx.fragment.app.DialogFragment; -import androidx.appcompat.app.AlertDialog; import android.text.Editable; import android.text.TextWatcher; import android.text.format.DateFormat; @@ -20,9 +18,12 @@ import android.widget.RadioButton; import android.widget.Spinner; import android.widget.TextView; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatDialogFragment; +import androidx.fragment.app.DialogFragment; + import com.google.common.collect.Lists; import com.wdullaer.materialdatetimepicker.date.DatePickerDialog; -import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout; import com.wdullaer.materialdatetimepicker.time.TimePickerDialog; import org.json.JSONException; @@ -39,7 +40,6 @@ import java.util.List; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.data.ProfileStore; import info.nightscout.androidaps.db.BgReading; @@ -51,6 +51,7 @@ import info.nightscout.androidaps.plugins.configBuilder.ConfigBuilderPlugin; import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions; import info.nightscout.androidaps.plugins.general.careportal.OptionsToShow; import info.nightscout.androidaps.plugins.general.nsclient.NSUpload; +import info.nightscout.androidaps.plugins.iob.iobCobCalculator.GlucoseStatus; import info.nightscout.androidaps.plugins.treatments.TreatmentsPlugin; import info.nightscout.androidaps.utils.DateUtil; import info.nightscout.androidaps.utils.DefaultValueHelper; @@ -61,11 +62,9 @@ import info.nightscout.androidaps.utils.SP; import info.nightscout.androidaps.utils.SafeParse; import info.nightscout.androidaps.utils.Translator; -public class NewNSTreatmentDialog extends DialogFragment implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { +public class NewNSTreatmentDialog extends AppCompatDialogFragment implements View.OnClickListener, DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { private static Logger log = LoggerFactory.getLogger(NewNSTreatmentDialog.class); - private Activity context; - private static OptionsToShow options; private static String event; @@ -119,18 +118,6 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick } } - @Override - public void onAttach(Activity activity) { - context = activity; - super.onAttach(activity); - } - - @Override - public void onDetach() { - super.onDetach(); - this.context = null; - } - @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -421,18 +408,18 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick ); dpd.setThemeDark(true); dpd.dismissOnPause(true); - dpd.show(context.getFragmentManager(), "Datepickerdialog"); + dpd.show(getActivity().getSupportFragmentManager(), "Datepickerdialog"); break; case R.id.careportal_newnstreatment_eventtime: TimePickerDialog tpd = TimePickerDialog.newInstance( this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), - DateFormat.is24HourFormat(context) + DateFormat.is24HourFormat(getContext()) ); tpd.setThemeDark(true); tpd.dismissOnPause(true); - tpd.show(context.getFragmentManager(), "Timepickerdialog"); + tpd.show(getActivity().getSupportFragmentManager(), "Timepickerdialog"); break; case R.id.ok: confirmNSTreatmentCreation(); @@ -469,7 +456,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick } @Override - public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute, int second) { + public void onTimeSet(TimePickerDialog view, int hourOfDay, int minute, int second) { eventTime.setHours(hourOfDay); eventTime.setMinutes(minute); eventTime.setSeconds(this.seconds++); // randomize seconds to prevent creating record of the same time, if user choose time manually @@ -477,7 +464,6 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick updateBGforDateTime(); } - JSONObject gatherData() { String enteredBy = SP.getString("careportal_enteredby", ""); JSONObject data = new JSONObject(); @@ -702,6 +688,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick } void confirmNSTreatmentCreation() { + Context context = getContext(); if (context != null) { final JSONObject data = gatherData(); final String confirmText = buildConfirmText(data); @@ -715,7 +702,7 @@ public class NewNSTreatmentDialog extends DialogFragment implements View.OnClick } - public void createNSTreatment(JSONObject data) { + void createNSTreatment(JSONObject data) { if (options.executeProfileSwitch) { if (data.has("profile")) { ProfileFunctions.doProfileSwitch(profileStore, JsonHelper.safeGetString(data, "profile"), JsonHelper.safeGetInt(data, "duration"), JsonHelper.safeGetInt(data, "percentage"), JsonHelper.safeGetInt(data, "timeshift")); diff --git a/app/src/main/res/layout/actions_fill_dialog.xml b/app/src/main/res/layout/actions_fill_dialog.xml index 27fdb02ee7..ce52f25abb 100644 --- a/app/src/main/res/layout/actions_fill_dialog.xml +++ b/app/src/main/res/layout/actions_fill_dialog.xml @@ -142,7 +142,7 @@ - + diff --git a/app/src/main/res/layout/careportal_newnstreatment_dialog.xml b/app/src/main/res/layout/careportal_newnstreatment_dialog.xml index d27a5883b5..fc0fa1ea49 100644 --- a/app/src/main/res/layout/careportal_newnstreatment_dialog.xml +++ b/app/src/main/res/layout/careportal_newnstreatment_dialog.xml @@ -567,7 +567,7 @@ - + diff --git a/app/src/main/res/layout/overview_calibration_dialog.xml b/app/src/main/res/layout/overview_calibration_dialog.xml index 2b50ad88fb..7caca56269 100644 --- a/app/src/main/res/layout/overview_calibration_dialog.xml +++ b/app/src/main/res/layout/overview_calibration_dialog.xml @@ -47,7 +47,7 @@ android:layout_marginRight="30dp" /> - + diff --git a/app/src/main/res/layout/overview_editquickwizard_dialog.xml b/app/src/main/res/layout/overview_editquickwizard_dialog.xml index fd0c5fd5ce..fe7862d93f 100644 --- a/app/src/main/res/layout/overview_editquickwizard_dialog.xml +++ b/app/src/main/res/layout/overview_editquickwizard_dialog.xml @@ -150,7 +150,7 @@ android:layout_height="wrap_content" android:entries="@array/quickWizardYesNo"/> - + diff --git a/app/src/main/res/layout/overview_newcarbs_dialog.xml b/app/src/main/res/layout/overview_newcarbs_dialog.xml index 9c5f3840ec..457e11c15d 100644 --- a/app/src/main/res/layout/overview_newcarbs_dialog.xml +++ b/app/src/main/res/layout/overview_newcarbs_dialog.xml @@ -214,7 +214,7 @@ - + diff --git a/app/src/main/res/layout/overview_newextendedbolus_dialog.xml b/app/src/main/res/layout/overview_newextendedbolus_dialog.xml index e0c6aefd37..b3a17229d3 100644 --- a/app/src/main/res/layout/overview_newextendedbolus_dialog.xml +++ b/app/src/main/res/layout/overview_newextendedbolus_dialog.xml @@ -82,6 +82,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/overview_newinsulin_dialog.xml b/app/src/main/res/layout/overview_newinsulin_dialog.xml index e4ce5bbfe7..a3f3b6d56f 100644 --- a/app/src/main/res/layout/overview_newinsulin_dialog.xml +++ b/app/src/main/res/layout/overview_newinsulin_dialog.xml @@ -179,7 +179,7 @@ - + diff --git a/app/src/main/res/layout/overview_newtempbasal_dialog.xml b/app/src/main/res/layout/overview_newtempbasal_dialog.xml index f4254dbe8a..1bd77a26e0 100644 --- a/app/src/main/res/layout/overview_newtempbasal_dialog.xml +++ b/app/src/main/res/layout/overview_newtempbasal_dialog.xml @@ -139,7 +139,7 @@ android:layout_marginLeft="30dp" android:layout_marginRight="30dp" /> - + diff --git a/app/src/main/res/layout/overview_newtreatment_dialog.xml b/app/src/main/res/layout/overview_newtreatment_dialog.xml index 4a899fbd9b..9aec3699e9 100644 --- a/app/src/main/res/layout/overview_newtreatment_dialog.xml +++ b/app/src/main/res/layout/overview_newtreatment_dialog.xml @@ -65,7 +65,7 @@ android:layout_gravity="center_horizontal" android:layout_marginBottom="15dp" /> - + From fb3c89a57652207167f1b8459a27e59f9bee85e1 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 22:24:12 +0100 Subject: [PATCH 14/30] recyclerview:1.1.0 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 5e4622da15..f2595721d0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -234,7 +234,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v13:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.recyclerview:recyclerview:1.0.0' + implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation 'com.google.android.material:material:1.0.0' implementation 'androidx.percentlayout:percentlayout:1.0.0' From 644d5ab49ace3cd98408a13430ed81805caf38e1 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 22:27:09 +0100 Subject: [PATCH 15/30] android-iconify-fontawesome:2.2.2 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f2595721d0..51e9ad254e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -251,7 +251,7 @@ dependencies { implementation "org.slf4j:slf4j-api:1.7.21" // Graphview cannot be upgraded implementation "com.jjoe64:graphview:4.0.1" - implementation "com.joanzapata.iconify:android-iconify-fontawesome:2.1.1" + implementation "com.joanzapata.iconify:android-iconify-fontawesome:2.2.2" implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation(name: "android-edittext-validator-v1.3.4-mod", ext: "aar") implementation 'com.madgag.spongycastle:core:1.58.0.0' From 42401453c6061a52c9115d3a3f7ad0b4dfdeed0d Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 22:35:16 +0100 Subject: [PATCH 16/30] okhttp3, retrofit2 update --- app/build.gradle | 10 +++++----- .../general/tidepool/comm/InfoInterceptor.kt | 2 +- .../general/tidepool/comm/TidepoolUploader.kt | 18 +++++++++--------- .../general/tidepool/messages/BaseMessage.kt | 5 +++-- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 51e9ad254e..31d4d566d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -300,11 +300,11 @@ dependencies { // new for tidepool - implementation 'com.squareup.okhttp3:okhttp:3.10.0' - implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' - implementation "com.squareup.retrofit2:retrofit:2.4.0" - implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0" - implementation "com.squareup.retrofit2:converter-gson:2.4.0" + implementation 'com.squareup.okhttp3:okhttp:4.2.2' + implementation 'com.squareup.okhttp3:logging-interceptor:4.2.2' + implementation "com.squareup.retrofit2:retrofit:2.6.2" + implementation "com.squareup.retrofit2:adapter-rxjava2:2.6.2" + implementation "com.squareup.retrofit2:converter-gson:2.6.2" } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/InfoInterceptor.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/InfoInterceptor.kt index ca3c3e0483..4acc0b5d67 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/InfoInterceptor.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/InfoInterceptor.kt @@ -19,7 +19,7 @@ class InfoInterceptor(tag: String) : Interceptor { @Throws(IOException::class) override fun intercept(chain: Interceptor.Chain): Response { val request = chain.request() - request?.body()?.let { + request.body?.let { if (L.isEnabled(L.TIDEPOOL)) { log.debug("Interceptor Body size: " + it.contentLength()) val requestBuffer = Buffer() diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/TidepoolUploader.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/TidepoolUploader.kt index 40473c0d93..7ab263b8d7 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/TidepoolUploader.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/comm/TidepoolUploader.kt @@ -14,9 +14,9 @@ import info.nightscout.androidaps.utils.DateUtil import info.nightscout.androidaps.utils.OKDialog import info.nightscout.androidaps.utils.SP import info.nightscout.androidaps.utils.T -import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient -import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.logging.HttpLoggingInterceptor import org.slf4j.LoggerFactory import retrofit2.Retrofit @@ -43,7 +43,7 @@ object TidepoolUploader { val PUMPTYPE = "Tandem" - var connectionStatus: ConnectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED + var connectionStatus: ConnectionStatus = ConnectionStatus.DISCONNECTED fun getRetrofitInstance(): Retrofit? { if (retrofit == null) { @@ -75,7 +75,7 @@ object TidepoolUploader { retrofit = null if (L.isEnabled(L.TIDEPOOL)) log.debug("Instance reset") - connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED + connectionStatus = ConnectionStatus.DISCONNECTED } @Synchronized @@ -197,7 +197,7 @@ object TidepoolUploader { } else -> { - val body = RequestBody.create(MediaType.parse("application/json"), chunk) + val body = chunk.toRequestBody("application/json".toMediaTypeOrNull()) RxBus.send(EventTidepoolStatus(("Uploading"))) if (session.service != null && session.token != null && session.datasetReply != null) { @@ -231,11 +231,11 @@ object TidepoolUploader { extendWakeLock(60000) val call = session!!.service?.deleteDataSet(session!!.token!!, session!!.datasetReply!!.id!!) call?.enqueue(TidepoolCallback(session!!, "Delete Dataset", { - connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED + connectionStatus = ConnectionStatus.DISCONNECTED RxBus.send(EventTidepoolStatus(("Dataset removed OK"))) releaseWakeLock() }, { - connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED + connectionStatus = ConnectionStatus.DISCONNECTED RxBus.send(EventTidepoolStatus(("Dataset remove FAILED"))) releaseWakeLock() })) @@ -255,11 +255,11 @@ object TidepoolUploader { extendWakeLock(60000) val call = session.service?.deleteAllData(token, userid) call?.enqueue(TidepoolCallback(session, "Delete all data", { - connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED + connectionStatus = ConnectionStatus.DISCONNECTED RxBus.send(EventTidepoolStatus(("All data removed OK"))) releaseWakeLock() }, { - connectionStatus = TidepoolUploader.ConnectionStatus.DISCONNECTED + connectionStatus = ConnectionStatus.DISCONNECTED RxBus.send(EventTidepoolStatus(("All data remove FAILED"))) releaseWakeLock() })) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/BaseMessage.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/BaseMessage.kt index d3cdffcf8c..d9dfc97b38 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/BaseMessage.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/messages/BaseMessage.kt @@ -1,8 +1,9 @@ package info.nightscout.androidaps.plugins.general.tidepool.messages import info.nightscout.androidaps.plugins.general.tidepool.utils.GsonInstance -import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.RequestBody +import okhttp3.RequestBody.Companion.toRequestBody open class BaseMessage { private fun toS(): String { @@ -10,7 +11,7 @@ open class BaseMessage { } fun getBody(): RequestBody { - return RequestBody.create(MediaType.parse("application/json"), this.toS()) + return this.toS().toRequestBody("application/json".toMediaTypeOrNull()) } } \ No newline at end of file From d1bcb2300a2ba7793f58b868aeaa2bad4ce2b9aa Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 22:50:17 +0100 Subject: [PATCH 17/30] gson, json, joda update --- app/build.gradle | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 31d4d566d4..c6e6112483 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -263,10 +263,10 @@ dependencies { // excluding org.json which is provided by Android exclude group: "org.json", module: "json" } - implementation "com.google.code.gson:gson:2.8.5" + implementation "com.google.code.gson:gson:2.8.6" implementation "com.google.guava:guava:24.1-jre" - implementation "net.danlew:android.joda:2.9.9.1" + implementation "net.danlew:android.joda:2.10.3" implementation "uk.com.robust-it:cloning:1.9.9" implementation 'org.mozilla:rhino:1.7.7.2' @@ -274,7 +274,7 @@ dependencies { implementation 'com.github.DavidProdinger:weekdays-selector:1.1.0' testImplementation "junit:junit:4.12" - testImplementation "org.json:json:20140107" + testImplementation "org.json:json:20190722" testImplementation "org.mockito:mockito-core:2.8.47" testImplementation "org.powermock:powermock-api-mockito2:${powermockVersion}" testImplementation "org.powermock:powermock-module-junit4-rule-agent:${powermockVersion}" From 7f6eb40b661621f6410dfbc4e1afb7f7c02ca898 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 2 Dec 2019 23:18:55 +0100 Subject: [PATCH 18/30] WeekdaysPicker set starting day --- .../general/automation/triggers/TriggerRecurringTime.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java index f7f1035558..2031dbc74c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/automation/triggers/TriggerRecurringTime.java @@ -269,6 +269,8 @@ public class TriggerRecurringTime extends Trigger { weekdaysPicker.setSelectedDays(getSelectedDays()); weekdaysPicker.setOnWeekdaysChangeListener((view, i, list) -> set(DayOfWeek.fromCalendarInt(i), list.contains(i))); weekdaysPicker.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); + weekdaysPicker.setSundayFirstDay(Calendar.getInstance().getFirstDayOfWeek() == Calendar.SUNDAY); + weekdaysPicker.redrawDays(); root.addView(weekdaysPicker); From cca5fca86c135bb93ed8dbf5c4b74ee9202c9a00 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 3 Dec 2019 07:48:59 +0100 Subject: [PATCH 19/30] New Crowdin translations (#2231) * New translations strings.xml (Polish) * New translations strings.xml (Chinese Simplified) * New translations strings.xml (Bulgarian) * New translations strings.xml (Slovak) * New translations strings.xml (Romanian) * New translations strings.xml (Portuguese, Brazilian) * New translations strings.xml (Portuguese) * New translations strings.xml (Polish) * New translations strings.xml (Lithuanian) * New translations strings.xml (Korean) * New translations strings.xml (Afrikaans) * New translations strings.xml (Italian) * New translations strings.xml (Turkish) * New translations strings.xml (Swedish) * New translations strings.xml (Russian) * New translations strings.xml (Greek) * New translations strings.xml (German) * New translations strings.xml (French) * New translations strings.xml (Dutch) * New translations strings.xml (Czech) * New translations strings.xml (Spanish) * New translations strings.xml (Czech) * New translations strings.xml (Portuguese) * New translations strings.xml (Spanish) * New translations objectives.xml (Spanish) * New translations strings.xml (Spanish) * New translations strings.xml (German) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Russian) * New translations strings.xml (Italian) * New translations strings.xml (Italian) * New translations strings.xml (Portuguese) * New translations strings.xml (Portuguese) --- app/src/main/res/values-af-rZA/strings.xml | 2 -- app/src/main/res/values-bg-rBG/strings.xml | 2 -- app/src/main/res/values-cs-rCZ/strings.xml | 23 ++++++++++++-- app/src/main/res/values-de-rDE/strings.xml | 23 ++++++++++++-- app/src/main/res/values-el-rGR/strings.xml | 2 -- app/src/main/res/values-es-rES/objectives.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 23 ++++++++++++-- app/src/main/res/values-fr-rFR/strings.xml | 6 ++-- app/src/main/res/values-it-rIT/strings.xml | 25 +++++++++++++-- app/src/main/res/values-ko-rKR/strings.xml | 2 -- app/src/main/res/values-lt-rLT/strings.xml | 2 -- app/src/main/res/values-nl-rNL/strings.xml | 4 +-- app/src/main/res/values-pl-rPL/strings.xml | 6 ++-- app/src/main/res/values-pt-rBR/strings.xml | 2 -- app/src/main/res/values-pt-rPT/strings.xml | 31 +++++++++++++++++-- app/src/main/res/values-ro-rRO/strings.xml | 2 -- app/src/main/res/values-ru-rRU/strings.xml | 6 ++-- app/src/main/res/values-sk-rSK/strings.xml | 6 ++-- app/src/main/res/values-sv-rSE/strings.xml | 2 -- app/src/main/res/values-tr-rTR/strings.xml | 2 -- app/src/main/res/values-zh-rCN/strings.xml | 2 -- 21 files changed, 127 insertions(+), 47 deletions(-) diff --git a/app/src/main/res/values-af-rZA/strings.xml b/app/src/main/res/values-af-rZA/strings.xml index b6f38aa73a..7f9700187d 100644 --- a/app/src/main/res/values-af-rZA/strings.xml +++ b/app/src/main/res/values-af-rZA/strings.xml @@ -358,10 +358,8 @@ Knoppie 1 Knoppie 2 Knoppie 3 - Eenhede: mg/dl mmol/l - DIA: Doelwit reeks: Reeks vir visualisering Hoë en lae merke vir die diagramme in Overview en Smartwatch diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index bf88d217b4..614b53f022 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -376,10 +376,8 @@ Бутон 1 Бутон 2 Бутон 3 - Единици: мг/дл ммол/л - DIA: Целева КЗ: Диапазон за визуализация Стойност на линиите за ниска и висока КЗ (mmol/l) за телефона и часовника diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 4c45b5f3e2..5745a34a0d 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -376,10 +376,11 @@ Tlačítko 1 Tlačítko 2 Tlačítko 3 - Jednotky: + Jednotky: + Jednotky mg/dL mmol/L - DIA: + DIA Cílový rozsah: Rozsah pro zobrazení Značka vysoké a nízké hodnoty v přehledu a na hodinkách Wear @@ -1391,6 +1392,10 @@ %1$d%% Bolusová kalkulačka min + Jméno profilu: + Vybráno: + Jednotky + Chcete přepnout profil a zahodit změny provedené v aktuálním profilu? %1$dg ZAP VYP @@ -1398,4 +1403,18 @@ Vymazat start Detekce času Chcete resetovat začátek cíle? Můžete přijít o svůj pokrok. + Nevybrána žádná pumpa + Vyberte jednotky, ve kterých chcete zobrazit hodnoty + Odeslat změny lokálního profilu do NS + Doba působnosti inzulínu + I:C + ISF + CÍL + Klonovat + Nejprve uložte nebo resetujte aktuální změny + Odstranit aktuální profil? + Chcete vytvořit nový lokální profil z tohoto přepnutí profilu? + Název profilu obsahuje tečky.\nToto není v NS podporováno.\nProfil není přenesen do NS. + Spodní hodnota oblasti v rozsahu (pouze zobrazování) + Horní hodnota oblasti v rozsahu (pouze zobrazování) diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index 91ac891e82..d223e1092e 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -376,10 +376,11 @@ Schaltfläche 1 Schaltfläche 2 Schaltfläche 3 - Einheiten: + Einheiten: + Einheiten mg/dl mmol/l - DIA: + DIA Zielbereich: Zielbereich für die Grafikanzeige Hoch- und Niedrig-Werte für die Übersicht- und die Smartwatch-Anzeige @@ -1392,6 +1393,10 @@ Unerwartetes Verhalten. %1$d%% Bolus-Rechner Min. + Profilname: + Ausgewählt: + Einheiten + Willst Du das Profil wechseln und die Änderungen am aktuellen Profil verwerfen? %1$dg Ein Aus @@ -1399,4 +1404,18 @@ Unerwartetes Verhalten. Löschen gestartet Zeiterkennung Möchtest Du den Start der Ziele zurücksetzen? Du verlierst Deine Fortschritte. + Keine Pumpe ausgewählt + Wähle die Einheit, in der die Werte angezeigt werden sollen. + Lade die Änderungen des lokalen Profils zu NS hoch. + DIA + IC + ISF + ZIEL + Duplizieren + Speichere oder verwerfe die aktuellen Änderungen zuerst + Aktuelles Profil löschen? + Neues lokales Profil auf Basis dieses Profilwechsels erstellen? + Profilname enthält Punkte.\nDies wird von NS nicht unterstützt.\nProfil wird nicht zu NS hochgeladen. + Unterer Wert des Zielbereichs (nur Anzeige) + Oberer Wert des Zielbereichs (nur Anzeige) diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index cd860161bc..9a807fae20 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -361,10 +361,8 @@ Πλήκτρο 1 Πλήκτρο 2 Πλήκτρο 3 - Μονάδες: mg/dl mmol/l - DIA: Εύρος στόχου: Εύρος εμφάνισης Υψηλό και Χαμηλό σημείο για την γραφική στην Επισκόπηση και Smartwatch diff --git a/app/src/main/res/values-es-rES/objectives.xml b/app/src/main/res/values-es-rES/objectives.xml index 1a24ac5d0c..08ffcf5887 100644 --- a/app/src/main/res/values-es-rES/objectives.xml +++ b/app/src/main/res/values-es-rES/objectives.xml @@ -36,6 +36,7 @@ Mostrar contenido del plugin Loop Usar función de escala mediante un gráfico BG pulsado largo Intro + Si fuiste usuario de OpenAPS y tu NS tiene al menos 3 meses de datos de lazo cerrado, puedes enviar un correo electrónico a objectives@androidaps.org con tu dirección web de NS y solicitar código para saltarse el resto de objetivos. Ingresa posteriormente el código obtenido de los desarrolladores Código aceptado Código no válido Compruebe su conocimiento diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 0b5ac4ac22..beb5bf4feb 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -260,11 +260,23 @@ Números de teléfono permitidos XXXXXXXXXX +; + YYYYYYYYYY Para entregar bolo %1$.2fU responder con código %2$s + Para entregar bolo %1$.2fU responder con código %2$s + Para establecer un basal temporal %1$s responder con el código %2$s + Para cancelar la basal temporal, responder con el código %1$s + Para inhabilitar la respuesta de servicio remoto de SMS, responder con el código %1$s.\n\nTenga en cuenta que solamente será capaz de reactivarlo directamente desde el móvil con la AAPS maestro. + Servicio remoto de SMS detenido. Para reactivarlo, utilice AAPS en el movil maestro. Para enviar calibración %1$.2f responder con código %2$s Bolo falló + Número mínimo de minutos que deben transcursar entre un bolus remoto y el siguiente + Cuántos minutos deben transcurrir, al menos, entre un bolo y el siguiente + Por su seguridad, para editar esta preferencia es necesario añadir al menos 2 números de teléfono. El bolo %1$.2fU se ha infundido correctamente Se van a infundir %1$.2fU El bolo %1$.2fU se ha infundido correctamente + Bolo %1$.2fU entregado correctamente + Objetivo %1$s para %2$d minutos + Objetivo %1$s para %2$d minutos establecido correctamente + Objetivo temporal cancelado con éxito Infundiendo %1$.2fU Permitir comandos remotos vía SMS Dedo @@ -324,10 +336,13 @@ Para iniciar una basal de %1$.2f% durante %2$d min, responder con el código %3$s Para cambiar el perfil a %1$s %2$d%% responder con el código %3$s Para iniciar un bolo extendido de %1$.2fU durante %2$d minutos, responder con el código %3$s + Para introducir %1$dg en %2$s responder con código %3$s Para iniciar una basal de %1$d%% durante %2$d min, responder con el código %3$s Para cancelar lazo por %1$d minutos responde con código %2$s Basal temporal %1$.2fU/h para %2$d min iniciada correctamente Bolo ampliado de %1$.2fU durante %2$d min se inició correctamente + Los carbohidratos %1$dg introducidos con éxito + Error al introducir %1$dg de carbohidratos Basal temporal de %1$d%% durante %2$d min iniciada correctamente Fallo inicio basal temporal Error al iniciar el bolo extendido @@ -361,10 +376,8 @@ Botón 1 Botón 2 Botón 3 - Unidades: mg/dl mmol/l - DIA (Duración Insulina Activa): Rango Objetivo: Rango de visualización Marcas Alta y Baja para gráficos en pantalla Inicio y Smartwatch @@ -680,6 +693,7 @@ g m h + d ]]> kJ En @@ -708,6 +722,7 @@ Ajuste de subida de datos de glucosa Mostrar detalles delta Mostrar delta con un decimal mas + Minutos máximos SMB Minutos máximos de basal para limitar SMB Firmware de la bomba no soportado Mandar datos BG a xDrip+ @@ -1377,4 +1392,8 @@ %1$dg Activado Desactivado + Limpieza finalizada + Limpieza iniciada + Detección de tiempo + ¿Desea reiniciar el objetivo? Puedes perder tu progreso. diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 885f8caf51..1d322049f8 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -205,7 +205,7 @@ Heure glucides Diviser Durée - Pour cent + Pourcentage Absolu Notes Heure de l\'événement @@ -253,7 +253,7 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Activé Commentaire Succès - Pour cent + Pourcentage Absolu Annuler le basal temporaire Communicateur SMS @@ -377,10 +377,8 @@ L\'ENSEMBLE DES RISQUES LIÉS À LA QUALITÉ ET À LA PERFORMANCE DU PROGRAMME S Bouton 1 Bouton 2 Bouton 3 - Unités : mg/dl mmol/l - DAI : Fourchette cible : Fourchette de visualisation Les repères hauts et bas sur les graphiques pour l\'aperçu et la montre diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index d91a1221ef..d352436aa5 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -376,10 +376,11 @@ Tasto 1 Tasto 2 Tasto 3 - Unità: + Unità: + Unità mg/dl mmol/l - DIA: + DIA Intervallo target: Intervallo di visualizzazione Limite alto e basso per i grafici nella sezione Panoramica e sullo Smartwatch @@ -852,7 +853,7 @@ Aggiornamento stato micro La velocità basale nel micro è cambiata e verrà aggiornata a breve Velocità basale cambiata sul micro, ma la sua lettura è fallita - Controllo delle modifiche allo storico + Controllo modifiche allo storico Sono appena stati importati più boli con la stessa quantità nello stesso minuto. Solo un record può essere aggiunto ai trattamenti. Controlla il micro e aggiungi manualmente un record di bolo utilizzando la sezione Portale. Assicurati di creare un bolo con un orario non utilizzato da nessun altro bolo. \n\nhttp://www.androidaps.org\nhttp://www.androidaps.de (de)\n\nfacebook:\nhttp://facebook.androidaps.org\nhttp://facebook.androidaps.de (de) L\'ultimo bolo è più vecchio di 24 ore o ha una data nel futuro. Controlla che la data sul micro sia impostata correttamente. @@ -1391,6 +1392,10 @@ %1$d%% Calcolatore min + Nome profilo: + Selezionato: + Unità + Vuoi cambiare profilo e scartare le modifiche apportate al profilo corrente? %1$dg On Off @@ -1398,4 +1403,18 @@ Cancella avviato Rilevazione tempo Vuoi resettare l\'avvio dell\'obiettivo? Potresti perdere i tuoi progressi. + Nessun micro selezionato + Seleziona le unità in cui vuoi visualizzare i valori + Carica modifiche al profilo locale in NS + DIA + IC + ISF + TARG + Clona + Salva o reimposta prima le modifiche correnti + Rimuovere il profilo corrente? + Creare nuovo profilo locale da questo cambio profilo? + Il nome profilo contiene dei punti.\nQuesto non è supportato da NS.\nIl profilo non viene caricato in NS. + Valore più basso per l\'intervallo di visualizzazione dell\'area \"in range\" + Valore più alto per l\'intervallo di visualizzazione dell\'area \"in range\" diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index b88368882e..79706233d5 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -359,10 +359,8 @@ 버튼1 버튼2 버튼3 - 유닛: mg/dl mmol/l - DIA: 목표 범위: 차트 표시 범위 스마트워치 차트 고/저혈당 선 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 0d52246cec..4ef25d9fbc 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -361,10 +361,8 @@ Mygtukas 1 Mygtukas 2 Mygtukas 3 - Vienetai: mg/dl mmol/l - IVT: Tikslinis diapazonas: Vizualizacijos diapazonas Aukštoji ir žemoji riba Apžvalgos grafikuose bei išmaniuosiuose laikrodžiuose diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 184b4c98da..09f55f1b94 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -376,10 +376,8 @@ Knop 1 Knop 2 Knop 3 - Eenheden: mg/dl mmol/l - DIA: Streefdoel: Bereik voor visualisatie Hoge en lage grens voor grafieken op het Overzicht en op Wear @@ -591,7 +589,7 @@ uren Basaal type Ongeldig profiel !!! - Wisselen van profiel + Profiel Wissel Ouderdom batterij Pomp bat. wissel Alarm opties diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 34385a52dd..0551d3d7d0 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -361,10 +361,8 @@ Przycisk 1 Przycisk 2 Przycisk 3 - Jednostki: mg/dl mmol/l - DIA: Zakres docelowy: Zakres do wizualizacji (na wykresie) Oznaczenia wysokiego i niskiego cukru na wykresie w oknie przegląd i na smartwatch\'u @@ -1378,4 +1376,8 @@ %1$dg Włącz Wyłącz + Wyczyść skończone + Wyczyść rozpoczęte + Wykrywanie czasu + Czy chcesz zresetować czas rozpoczęcia zadania? Możesz utracić postępy. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index c86394d14f..c38bb1a3a9 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -361,10 +361,8 @@ Botão 1 Botão 2 Botão 3 - Unidades: mg/dL mmol/L - DIA: Intervalo Alvo: Intervalo para visualização Marca alta e baixa para as cartas em Visão geral e Smartwatch diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 892b93a1f6..a066ebb901 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -210,7 +210,7 @@ Notas Tempo do evento Perfil - Introduzido por + Inserido por Tipo de glicose Sem perfil carregado do NS BasalTemp @@ -265,6 +265,9 @@ Bólus %1$.2fU enviado com êxito Vai ser enviado %1$.2fU Bólus %1$.2fU enviado com êxito + Alvo %1$s para %2$d minutos + Alvo %1$s para %2$d minutos definido com sucesso + Alvo Temp cancelado com êxito A enviar %1$.2fU Permitir comandos remotos via SMS Dedo @@ -324,10 +327,13 @@ Para começar a basal %1$.2fU/h durante%2$d min responda com o código %3$s Para mudar o perfil para %1$s %2$d%% responda com o código %3$s Para começar o bólus estendido %1$.2fU/h para %2$d min responda com o código %3$s + Para inserir %1$dg em %2$s responda com código %3$s Para começar a basal %1$d% U/h durante %2$d min responda com o código %3$s Para suspender o loop por %1$d minutos resposta com código %2$s Basal temporária %1$.2fU/h para %2$d min iniciada com êxito Bólus estendido %1$.2fU/h para %2$d min iniciado com êxito + Hidratos %1$dg inseridos com sucesso + Introdução de %1$dg de hidratos falhou Basal temporária %1$d% U/h durante%2$d min iniciada com êxito Início basal temp falhou Falha ao iniciar o bólus estendido @@ -361,10 +367,11 @@ Botão 1 Botão 2 Botão 3 - Unidades: + Unidades: + Unidades mg/dL mmol/L - DIA: + DIA Intervalo Alvo: Intervalo para visualização Marca Alto e Baixo para os gráficos em Sumário e Smartwatch @@ -1376,7 +1383,25 @@ %1$d%% Assistente de Bólus min + Nome do Perfil: + Seleccionado: + Unidades + Deseja mudar de perfil e descartar as alterações feitas no perfil actual? %1$dg Ligado Desligado + Limpar terminado + Limpar iniciado + Detecção de tempo + Nenhuma bomba seleccionada + Seleccione as unidades em que deseja exibir os valores + Carregar as alterações do perfil local para NS + DIA + IC + FSI + ALV + Clone + Eliminar perfil actual? + Criar novo perfil local a partir desta troca de perfil? + Nome do perfil contém pontos.\nIsso não é suportado pelo NS.\nPerfil não é enviado para o NS. diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index caff1bb1a7..20f1ef7ee7 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -360,10 +360,8 @@ Buton 1 Buton 2 Buton 3 - Unități: mg/dl mmol/l - DIA: Intervalul țintă: Intervalul pentru vizualizare Valoarea maximă și minimă pentru graficele din vizualizare și pentru smartwatch diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 67834cd608..979ad94324 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -376,10 +376,8 @@ кнопка 1 кнопка 2 кнопка 3 - единицы измерения: мг/дл ммоль/л - Время действия инсулина DIA: целевой диапазон диапазон для визуализации Нижняя и верхняя граница диаграммы в отчетах и Smartwatch @@ -1396,4 +1394,8 @@ Context | Edit Context %1$d гр Вкл. Выкл. + Очистить завершенные + Очистить начатые + Определение времени + Хотите сбросить начатую цель? Можете потерять уже достигнутое. diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index bb559c8868..63688620cc 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -376,10 +376,8 @@ Tlačidlo 1 Tlačidlo 2 Tlačidlo 3 - Jednotky: mg/dL mmol/L - DIA: Cieľový rozsah: Rozsah pre zobrazenie Značka vysokej a nízkej hodnoty v prehľade a na hodinkách Wear @@ -521,7 +519,7 @@ Dieťa Dospievajúci Dospelý - Dospelý z nízkou citlivosťou + Dospelý s nízkou citlivosťou Vyberte vek pacienta pre nastavenie bezpečnostných limitov Glimp %1$s potrebuje vypnúť optimalizáciu batérie pre optimálny výkon @@ -977,7 +975,7 @@ VYP Otvoriť Menu Zavrieť Menu - Nastavenie modulov + Nastavenie modulu Hotovo, gratulujeme! Nedokončené Uplynutý čas diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index acaa1cd1b1..67d5d3d7c6 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -377,10 +377,8 @@ Eversense-appen. Knapp 1 Knapp 2 Knapp 3 - Enheter: mg/dl mmol/l - DIA: Målområde: Gränsvärden för visualisering Högt och lågt värde för grafen i Översikt och i klockan diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index e42bee6ba7..bf486de9f4 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -333,10 +333,8 @@ Düğme 1 Düğme 2 Düğme 3 - Birim: mg/dl mmol/l - DIA: Hedef aralığı: Görselleştirme Aralığı Genel bakış ve akıllı saat göstergesi için yüksek ve düşük değerler diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5335791cbe..5f187f80f6 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -357,10 +357,8 @@ 按钮1 按钮2 按钮3 - 单位: mg/dl mmol/l - DIA: 目标范围: 可视化范围 在智能手表上的图表上的高值和低值标记 From e4a5616298be72e043edbafeb1e9ae99c723cf6e Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 3 Dec 2019 15:29:14 +0100 Subject: [PATCH 20/30] wizard & SP improvements --- .../nightscout/androidaps/MainActivity.java | 10 +--- .../maintenance/ImportExportPrefs.java | 12 ++--- .../setupwizard/SetupWizardActivity.java | 24 ++++----- .../setupwizard/elements/SWItem.java | 6 ++- .../info/nightscout/androidaps/utils/SP.java | 54 ++++++------------- .../main/res/layout/activity_setupwizard.xml | 1 + 6 files changed, 40 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.java b/app/src/main/java/info/nightscout/androidaps/MainActivity.java index d011a12dd3..e44a55aee7 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.java @@ -42,7 +42,6 @@ import info.nightscout.androidaps.activities.HistoryBrowseActivity; import info.nightscout.androidaps.activities.NoSplashAppCompatActivity; import info.nightscout.androidaps.activities.PreferencesActivity; import info.nightscout.androidaps.activities.SingleFragmentActivity; -import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventRebuildTabs; @@ -51,7 +50,6 @@ import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin; import info.nightscout.androidaps.plugins.bus.RxBus; -import info.nightscout.androidaps.plugins.configBuilder.ProfileFunctions; import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtilsKt; import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus; import info.nightscout.androidaps.setupwizard.SetupWizardActivity; @@ -59,7 +57,6 @@ import info.nightscout.androidaps.tabs.TabPageAdapter; import info.nightscout.androidaps.utils.AndroidPermission; import info.nightscout.androidaps.utils.FabricPrivacy; import info.nightscout.androidaps.utils.LocaleHelper; -import info.nightscout.androidaps.utils.OKDialog; import info.nightscout.androidaps.utils.PasswordProtection; import info.nightscout.androidaps.utils.SP; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -141,7 +138,7 @@ public class MainActivity extends NoSplashAppCompatActivity { .subscribe(this::processPreferenceChange, FabricPrivacy::logException) ); - if (!SP.getBoolean(R.string.key_setupwizard_processed, false)) { + if (!SP.getBoolean(R.string.key_setupwizard_processed, false) || !SP.contains(R.string.key_units)) { Intent intent = new Intent(this, SetupWizardActivity.class); startActivity(intent); } else { @@ -255,11 +252,6 @@ public class MainActivity extends NoSplashAppCompatActivity { SP.remove(R.string.key_pump_unreachable_threshold); if (unreachable_threshold < 30) unreachable_threshold = 30; SP.putString(R.string.key_pump_unreachable_threshold, Integer.toString(unreachable_threshold)); - - if (!SP.contains(R.string.key_units)) { - Intent intent = new Intent(this, SetupWizardActivity.class); - startActivity(intent); - } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.java b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.java index 7a801a44c0..ae9867b0a2 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/ImportExportPrefs.java @@ -30,6 +30,7 @@ import info.nightscout.androidaps.events.EventAppExit; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.bus.RxBus; import info.nightscout.androidaps.utils.OKDialog; +import info.nightscout.androidaps.utils.SP; import info.nightscout.androidaps.utils.ToastUtils; /** @@ -113,27 +114,24 @@ public class ImportExportPrefs { .setMessage(MainApp.gs(R.string.import_from) + " " + file + " ?") .setPositiveButton(android.R.string.yes, (dialog, which) -> { - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - SharedPreferences.Editor editor = prefs.edit(); String line; String[] lineParts; try { - editor.clear(); - editor.commit(); + SP.clear(); BufferedReader reader = new BufferedReader(new FileReader(file)); while ((line = reader.readLine()) != null) { lineParts = line.split("::"); if (lineParts.length == 2) { if (lineParts[1].equals("true") || lineParts[1].equals("false")) { - editor.putBoolean(lineParts[0], Boolean.parseBoolean(lineParts[1])); + SP.putBoolean(lineParts[0], Boolean.parseBoolean(lineParts[1])); } else { - editor.putString(lineParts[0], lineParts[1]); + SP.putString(lineParts[0], lineParts[1]); } } } reader.close(); - editor.commit(); + SP.putBoolean(R.string.key_setupwizard_processed, true); OKDialog.show(context, MainApp.gs(R.string.setting_imported), MainApp.gs(R.string.restartingapp), () -> { log.debug("Exiting"); MainApp.instance().stopKeepAliveService(); diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/SetupWizardActivity.java b/app/src/main/java/info/nightscout/androidaps/setupwizard/SetupWizardActivity.java index e6a4831693..603292d3cc 100644 --- a/app/src/main/java/info/nightscout/androidaps/setupwizard/SetupWizardActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/SetupWizardActivity.java @@ -72,18 +72,6 @@ public class SetupWizardActivity extends NoSplashAppCompatActivity { } } - @Override - public void onBackPressed() { - if (currentWizardPage == 0) - OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish); - else showPreviousPage(null); - } - - public void exitPressed(View view) { - SP.putBoolean(R.string.key_setupwizard_processed, true); - OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish); - } - @Override public void onPause() { super.onPause(); @@ -157,6 +145,18 @@ public class SetupWizardActivity extends NoSplashAppCompatActivity { }); } + @Override + public void onBackPressed() { + if (currentWizardPage == 0) + OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish); + else showPreviousPage(null); + } + + public void exitPressed(View view) { + SP.putBoolean(R.string.key_setupwizard_processed, true); + OKDialog.showConfirmation(this, MainApp.gs(R.string.exitwizard), this::finish); + } + public void showNextPage(View view) { this.finish(); Intent intent = new Intent(this, SetupWizardActivity.class); diff --git a/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWItem.java b/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWItem.java index 720d00d4b7..734b204ff3 100644 --- a/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWItem.java +++ b/app/src/main/java/info/nightscout/androidaps/setupwizard/elements/SWItem.java @@ -3,6 +3,8 @@ package info.nightscout.androidaps.setupwizard.elements; import android.view.View; import android.widget.LinearLayout; +import androidx.annotation.StringRes; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,12 +69,12 @@ public class SWItem { return type; } - public SWItem label(int label) { + public SWItem label(@StringRes int label) { this.label = label; return this; } - public SWItem comment(int comment) { + public SWItem comment(@StringRes int comment) { this.comment = comment; return this; } diff --git a/app/src/main/java/info/nightscout/androidaps/utils/SP.java b/app/src/main/java/info/nightscout/androidaps/utils/SP.java index 1b46642751..e45e650ace 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/SP.java +++ b/app/src/main/java/info/nightscout/androidaps/utils/SP.java @@ -10,7 +10,11 @@ import info.nightscout.androidaps.MainApp; */ public class SP { - static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); + private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); + + static public void clear() { + sharedPreferences.edit().clear().apply(); + } static public boolean contains(String key) { return sharedPreferences.contains(key); @@ -85,75 +89,51 @@ public class SP { } static public void putBoolean(String key, boolean value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(key, value); - editor.apply(); + sharedPreferences.edit().putBoolean(key, value).apply(); } static public void putBoolean(int resourceID, boolean value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putBoolean(MainApp.gs(resourceID), value); - editor.apply(); + sharedPreferences.edit().putBoolean(MainApp.gs(resourceID), value).apply(); } static public void putDouble(String key, double value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(key, Double.toString(value)); - editor.apply(); + sharedPreferences.edit().putString(key, Double.toString(value)).apply(); } static public void putLong(String key, long value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putLong(key, value); - editor.apply(); + sharedPreferences.edit().putLong(key, value).apply(); } static public void putLong(int resourceID, long value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putLong(MainApp.gs(resourceID), value); - editor.apply(); + sharedPreferences.edit().putLong(MainApp.gs(resourceID), value).apply(); } static public void putInt(String key, int value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putInt(key, value); - editor.apply(); + sharedPreferences.edit().putInt(key, value).apply(); } static public void putInt(int resourceID, int value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putInt(MainApp.gs(resourceID), value); - editor.apply(); + sharedPreferences.edit().putInt(MainApp.gs(resourceID), value).apply(); } static public void incInt(int resourceID) { - SharedPreferences.Editor editor = sharedPreferences.edit(); int value = SP.getInt(resourceID, 0) + 1; - editor.putInt(MainApp.gs(resourceID), value); - editor.apply(); + sharedPreferences.edit().putInt(MainApp.gs(resourceID), value).apply(); } static public void putString(int resourceID, String value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(MainApp.gs(resourceID), value); - editor.apply(); + sharedPreferences.edit().putString(MainApp.gs(resourceID), value).apply(); } static public void putString(String key, String value) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.putString(key, value); - editor.apply(); + sharedPreferences.edit().putString(key, value).apply(); } static public void remove(int resourceID) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.remove(MainApp.gs(resourceID)); - editor.apply(); + sharedPreferences.edit().remove(MainApp.gs(resourceID)).apply(); } static public void remove(String key) { - SharedPreferences.Editor editor = sharedPreferences.edit(); - editor.remove(key); - editor.apply(); + sharedPreferences.edit().remove(key).apply(); } } diff --git a/app/src/main/res/layout/activity_setupwizard.xml b/app/src/main/res/layout/activity_setupwizard.xml index 4bcc5b1221..2c2930b827 100644 --- a/app/src/main/res/layout/activity_setupwizard.xml +++ b/app/src/main/res/layout/activity_setupwizard.xml @@ -29,6 +29,7 @@ android:layout_marginStart="10dp" android:layout_weight="1" android:text="@string/exit" + android:onClick="exitPressed" android:textAppearance="@android:style/TextAppearance.Material.Medium" android:textStyle="bold" /> From 95d3551931330268e88f870b623a074fb67069e8 Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Tue, 3 Dec 2019 18:12:37 +0100 Subject: [PATCH 21/30] Make switching language working again --- .../nightscout/androidaps/MainActivity.java | 13 ---- .../activities/AgreementActivity.java | 44 ------------- .../androidaps/activities/NoSplashActivity.kt | 13 ---- .../activities/NoSplashAppCompatActivity.kt | 6 ++ .../activities/PreferencesActivity.java | 7 ++ .../activities/TDDStatsActivity.java | 2 +- .../activities/LogSettingActivity.kt | 4 +- .../tidepool/events/EventTidepoolStatus.kt | 4 +- .../activities/DanaRHistoryActivity.java | 4 +- .../activities/DanaRUserOptionsActivity.java | 5 +- .../dialog/MedtronicHistoryActivity.java | 4 +- .../androidaps/utils/LocaleHelper.kt | 43 +++++++++--- .../main/res/layout/activity_agreement.xml | 65 ------------------- 13 files changed, 57 insertions(+), 157 deletions(-) delete mode 100644 app/src/main/java/info/nightscout/androidaps/activities/AgreementActivity.java delete mode 100644 app/src/main/java/info/nightscout/androidaps/activities/NoSplashActivity.kt delete mode 100644 app/src/main/res/layout/activity_agreement.xml diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.java b/app/src/main/java/info/nightscout/androidaps/MainActivity.java index e44a55aee7..c383d039ed 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.java @@ -37,7 +37,6 @@ import com.joanzapata.iconify.fonts.FontAwesomeModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import info.nightscout.androidaps.activities.AgreementActivity; import info.nightscout.androidaps.activities.HistoryBrowseActivity; import info.nightscout.androidaps.activities.NoSplashAppCompatActivity; import info.nightscout.androidaps.activities.PreferencesActivity; @@ -141,8 +140,6 @@ public class MainActivity extends NoSplashAppCompatActivity { if (!SP.getBoolean(R.string.key_setupwizard_processed, false) || !SP.contains(R.string.key_units)) { Intent intent = new Intent(this, SetupWizardActivity.class); startActivity(intent); - } else { - checkEula(); } AndroidPermission.notifyForStoragePermission(this); @@ -234,16 +231,6 @@ public class MainActivity extends NoSplashAppCompatActivity { } } - private void checkEula() { - //SP.removeBoolean(R.string.key_i_understand); - boolean IUnderstand = SP.getBoolean(R.string.key_i_understand, false); - if (!IUnderstand) { - Intent intent = new Intent(getApplicationContext(), AgreementActivity.class); - startActivity(intent); - finish(); - } - } - private void doMigrations() { // guarantee that the unreachable threshold is at least 30 and of type String diff --git a/app/src/main/java/info/nightscout/androidaps/activities/AgreementActivity.java b/app/src/main/java/info/nightscout/androidaps/activities/AgreementActivity.java deleted file mode 100644 index d3792bbad5..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/activities/AgreementActivity.java +++ /dev/null @@ -1,44 +0,0 @@ -package info.nightscout.androidaps.activities; - -import android.app.Activity; -import android.content.Intent; -import android.os.Bundle; -import android.view.View; -import android.widget.Button; -import android.widget.CheckBox; - -import info.nightscout.androidaps.MainActivity; -import info.nightscout.androidaps.R; -import info.nightscout.androidaps.utils.SP; - -public class AgreementActivity extends NoSplashActivity { - boolean IUnderstand; - CheckBox agreeCheckBox; - Button saveButton; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_agreement); - IUnderstand = SP.getBoolean(R.string.key_i_understand, false); - setContentView(R.layout.activity_agreement); - agreeCheckBox = (CheckBox)findViewById(R.id.agreementCheckBox); - agreeCheckBox.setChecked(IUnderstand); - saveButton = (Button)findViewById(R.id.agreementSaveButton); - addListenerOnButton(); - } - - public void addListenerOnButton() { - saveButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - - SP.putBoolean(R.string.key_i_understand, agreeCheckBox.isChecked()); - - Intent intent = new Intent(getApplicationContext(), MainActivity.class); - startActivity(intent); - finish(); - } - - }); - } -} diff --git a/app/src/main/java/info/nightscout/androidaps/activities/NoSplashActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/NoSplashActivity.kt deleted file mode 100644 index 0b7af2bd1d..0000000000 --- a/app/src/main/java/info/nightscout/androidaps/activities/NoSplashActivity.kt +++ /dev/null @@ -1,13 +0,0 @@ -package info.nightscout.androidaps.activities - -import android.app.Activity -import android.os.Bundle - -import info.nightscout.androidaps.R - -open class NoSplashActivity : Activity() { - public override fun onCreate(savedInstanceState: Bundle?) { - setTheme(R.style.AppTheme_NoActionBar) - super.onCreate(savedInstanceState) - } -} diff --git a/app/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt b/app/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt index e4c8027cd5..3f59cd56ef 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/activities/NoSplashAppCompatActivity.kt @@ -1,12 +1,18 @@ package info.nightscout.androidaps.activities +import android.content.Context import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import info.nightscout.androidaps.R +import info.nightscout.androidaps.utils.LocaleHelper open class NoSplashAppCompatActivity : AppCompatActivity() { public override fun onCreate(savedInstanceState: Bundle?) { setTheme(R.style.AppTheme_NoActionBar) super.onCreate(savedInstanceState) } + + public override fun attachBaseContext(newBase: Context) { + super.attachBaseContext(LocaleHelper.wrap(newBase)) + } } diff --git a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.java b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.java index 65699bcc77..282fec47c9 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/activities/PreferencesActivity.java @@ -1,5 +1,6 @@ package info.nightscout.androidaps.activities; +import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.EditTextPreference; @@ -47,6 +48,7 @@ import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref0Plugin; import info.nightscout.androidaps.plugins.sensitivity.SensitivityOref1Plugin; import info.nightscout.androidaps.plugins.sensitivity.SensitivityWeightedAveragePlugin; import info.nightscout.androidaps.plugins.source.SourceDexcomPlugin; +import info.nightscout.androidaps.utils.LocaleHelper; import info.nightscout.androidaps.utils.OKDialog; import info.nightscout.androidaps.utils.SP; import info.nightscout.androidaps.utils.SafeParse; @@ -66,6 +68,11 @@ public class PreferencesActivity extends PreferenceActivity implements SharedPre PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this); } + @Override + public void attachBaseContext(Context newBase) { + super.attachBaseContext(LocaleHelper.INSTANCE.wrap(newBase)); + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { RxBus.INSTANCE.send(new EventPreferenceChange(key)); diff --git a/app/src/main/java/info/nightscout/androidaps/activities/TDDStatsActivity.java b/app/src/main/java/info/nightscout/androidaps/activities/TDDStatsActivity.java index 24cdceada6..03fb034c5c 100644 --- a/app/src/main/java/info/nightscout/androidaps/activities/TDDStatsActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/activities/TDDStatsActivity.java @@ -54,7 +54,7 @@ import info.nightscout.androidaps.utils.SafeParse; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; -public class TDDStatsActivity extends NoSplashActivity { +public class TDDStatsActivity extends NoSplashAppCompatActivity { private static Logger log = LoggerFactory.getLogger(TDDStatsActivity.class); private CompositeDisposable disposable = new CompositeDisposable(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/activities/LogSettingActivity.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/activities/LogSettingActivity.kt index f47bb03513..d9ed0c590c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/activities/LogSettingActivity.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/maintenance/activities/LogSettingActivity.kt @@ -6,11 +6,11 @@ import android.widget.CheckBox import android.widget.LinearLayout import android.widget.TextView import info.nightscout.androidaps.R -import info.nightscout.androidaps.activities.NoSplashActivity +import info.nightscout.androidaps.activities.NoSplashAppCompatActivity import info.nightscout.androidaps.logging.L import kotlinx.android.synthetic.main.activity_logsetting.* -class LogSettingActivity : NoSplashActivity() { +class LogSettingActivity : NoSplashAppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/events/EventTidepoolStatus.kt b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/events/EventTidepoolStatus.kt index e7854f8ff2..f9e2b724cb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/events/EventTidepoolStatus.kt +++ b/app/src/main/java/info/nightscout/androidaps/plugins/general/tidepool/events/EventTidepoolStatus.kt @@ -3,9 +3,9 @@ package info.nightscout.androidaps.plugins.general.tidepool.events import info.nightscout.androidaps.events.Event import info.nightscout.androidaps.logging.L import info.nightscout.androidaps.utils.DateUtil -import info.nightscout.androidaps.utils.LocaleHelper import org.slf4j.LoggerFactory import java.text.SimpleDateFormat +import java.util.* class EventTidepoolStatus(val status: String) : Event() { private val log = LoggerFactory.getLogger(L.TIDEPOOL) @@ -17,7 +17,7 @@ class EventTidepoolStatus(val status: String) : Event() { log.debug("New status: $status") } - private var timeFormat = SimpleDateFormat("HH:mm:ss", LocaleHelper.currentLocale()) + private var timeFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) fun toPreparedHtml(): StringBuilder { val stringBuilder = StringBuilder() diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java index ae25d781af..97f029bd8c 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRHistoryActivity.java @@ -24,7 +24,7 @@ import java.util.List; import info.nightscout.androidaps.Constants; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.activities.NoSplashActivity; +import info.nightscout.androidaps.activities.NoSplashAppCompatActivity; import info.nightscout.androidaps.data.Profile; import info.nightscout.androidaps.db.DanaRHistoryRecord; import info.nightscout.androidaps.events.EventPumpStatusChanged; @@ -44,7 +44,7 @@ import info.nightscout.androidaps.utils.FabricPrivacy; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; -public class DanaRHistoryActivity extends NoSplashActivity { +public class DanaRHistoryActivity extends NoSplashAppCompatActivity { private static Logger log = LoggerFactory.getLogger(L.PUMP); private CompositeDisposable disposable = new CompositeDisposable(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRUserOptionsActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRUserOptionsActivity.java index f1181bb7cb..0346b5320e 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRUserOptionsActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/danaR/activities/DanaRUserOptionsActivity.java @@ -12,9 +12,8 @@ import org.slf4j.LoggerFactory; import java.text.DecimalFormat; import info.nightscout.androidaps.Constants; -import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.activities.NoSplashActivity; +import info.nightscout.androidaps.activities.NoSplashAppCompatActivity; import info.nightscout.androidaps.events.EventInitializationChanged; import info.nightscout.androidaps.interfaces.PluginType; import info.nightscout.androidaps.logging.L; @@ -33,7 +32,7 @@ import io.reactivex.disposables.CompositeDisposable; * Created by Rumen Georgiev on 5/31/2018. */ -public class DanaRUserOptionsActivity extends NoSplashActivity { +public class DanaRUserOptionsActivity extends NoSplashAppCompatActivity { private static Logger log = LoggerFactory.getLogger(L.PUMP); private CompositeDisposable disposable = new CompositeDisposable(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java index 2d1a3a871e..7641e5c4cb 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/pump/medtronic/dialog/MedtronicHistoryActivity.java @@ -20,13 +20,13 @@ import java.util.ArrayList; import java.util.List; import info.nightscout.androidaps.R; -import info.nightscout.androidaps.activities.NoSplashActivity; +import info.nightscout.androidaps.activities.NoSplashAppCompatActivity; import info.nightscout.androidaps.logging.L; import info.nightscout.androidaps.plugins.pump.medtronic.MedtronicPumpPlugin; import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntry; import info.nightscout.androidaps.plugins.pump.medtronic.comm.history.pump.PumpHistoryEntryGroup; -public class MedtronicHistoryActivity extends NoSplashActivity { +public class MedtronicHistoryActivity extends NoSplashAppCompatActivity { private static Logger LOG = LoggerFactory.getLogger(L.PUMP); diff --git a/app/src/main/java/info/nightscout/androidaps/utils/LocaleHelper.kt b/app/src/main/java/info/nightscout/androidaps/utils/LocaleHelper.kt index 6052c5699a..447d076d93 100644 --- a/app/src/main/java/info/nightscout/androidaps/utils/LocaleHelper.kt +++ b/app/src/main/java/info/nightscout/androidaps/utils/LocaleHelper.kt @@ -1,21 +1,19 @@ package info.nightscout.androidaps.utils import android.content.Context +import android.content.ContextWrapper +import android.os.Build +import android.os.LocaleList import info.nightscout.androidaps.R import java.util.* -object LocaleHelper { - fun update(context: Context) = - updateResources(context, currentLanguage()) +object LocaleHelper { fun currentLanguage(): String = SP.getString(R.string.key_language, Locale.getDefault().language) - fun currentLocale(): Locale = - Locale(SP.getString(R.string.key_language, Locale.getDefault().language)) - - @Suppress("DEPRECATION") - private fun updateResources(context: Context, language: String) { + private fun currentLocale(): Locale { + val language = currentLanguage() var locale = Locale(language) if (language.contains("_")) { // language with country like pt_BR defined in arrays.xml @@ -23,10 +21,35 @@ object LocaleHelper { val country = language.substring(3, 5) locale = Locale(lang, country) } + return locale + } + @Suppress("DEPRECATION") + fun update(context: Context) { + val locale = currentLocale() Locale.setDefault(locale) val resources = context.resources - resources.configuration.setLocale(locale) - resources.updateConfiguration(resources.configuration, resources.displayMetrics) + val configuration = resources.configuration + context.createConfigurationContext(configuration) + configuration.setLocale(locale) + configuration.locale = locale + resources.updateConfiguration(configuration, resources.displayMetrics) + } + + fun wrap(ctx: Context): ContextWrapper { + val res = ctx.resources + val configuration = res.configuration + val newLocale = currentLocale() + val context = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.setLocale(newLocale) + val localeList = LocaleList(newLocale) + LocaleList.setDefault(localeList) + configuration.locales = localeList + ctx.createConfigurationContext(configuration) + } else { + configuration.setLocale(newLocale) + ctx.createConfigurationContext(configuration) + } + return ContextWrapper(context) } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_agreement.xml b/app/src/main/res/layout/activity_agreement.xml deleted file mode 100644 index 5c98f937ed..0000000000 --- a/app/src/main/res/layout/activity_agreement.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - -