diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java index 3b0ad3cf3..fbf626569 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractActivityChartFragment.java @@ -78,6 +78,7 @@ public abstract class AbstractActivityChartFragment extend protected ActivityConfig akLightSleep; protected ActivityConfig akDeepSleep; protected ActivityConfig akRemSleep; + protected ActivityConfig akAwakeSleep; protected ActivityConfig akNotWorn; protected int BACKGROUND_COLOR; @@ -89,6 +90,7 @@ public abstract class AbstractActivityChartFragment extend protected int AK_ACTIVITY_COLOR; protected int AK_DEEP_SLEEP_COLOR; protected int AK_REM_SLEEP_COLOR; + protected int AK_AWAKE_SLEEP_COLOR; protected int AK_LIGHT_SLEEP_COLOR; protected int AK_NOT_WORN_COLOR; @@ -117,6 +119,8 @@ public abstract class AbstractActivityChartFragment extend AK_LIGHT_SLEEP_COLOR = runningColor.data; getContext().getTheme().resolveAttribute(R.attr.chart_rem_sleep, runningColor, true); AK_REM_SLEEP_COLOR = runningColor.data; + getContext().getTheme().resolveAttribute(R.attr.chart_awake_sleep, runningColor, true); + AK_AWAKE_SLEEP_COLOR = runningColor.data; getContext().getTheme().resolveAttribute(R.attr.chart_not_worn, runningColor, true); AK_NOT_WORN_COLOR = runningColor.data; @@ -127,6 +131,7 @@ public abstract class AbstractActivityChartFragment extend akLightSleep = new ActivityConfig(ActivityKind.LIGHT_SLEEP, getString(R.string.abstract_chart_fragment_kind_light_sleep), AK_LIGHT_SLEEP_COLOR); akDeepSleep = new ActivityConfig(ActivityKind.DEEP_SLEEP, getString(R.string.abstract_chart_fragment_kind_deep_sleep), AK_DEEP_SLEEP_COLOR); akRemSleep = new ActivityConfig(ActivityKind.REM_SLEEP, getString(R.string.abstract_chart_fragment_kind_rem_sleep), AK_REM_SLEEP_COLOR); + akAwakeSleep = new ActivityConfig(ActivityKind.REM_SLEEP, getString(R.string.abstract_chart_fragment_kind_awake_sleep), AK_AWAKE_SLEEP_COLOR); akNotWorn = new ActivityConfig(ActivityKind.NOT_WORN, getString(R.string.abstract_chart_fragment_kind_not_worn), AK_NOT_WORN_COLOR); } @@ -138,6 +143,8 @@ public abstract class AbstractActivityChartFragment extend return akLightSleep.color; case REM_SLEEP: return akRemSleep.color; + case AWAKE_SLEEP: + return akAwakeSleep.color; case ACTIVITY: return akActivity.color; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java index 311e11702..9a63e8fe5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java @@ -40,6 +40,7 @@ public class ActivityAnalysis { ActivityAmount deepSleep = new ActivityAmount(ActivityKind.DEEP_SLEEP); ActivityAmount lightSleep = new ActivityAmount(ActivityKind.LIGHT_SLEEP); ActivityAmount remSleep = new ActivityAmount(ActivityKind.REM_SLEEP); + ActivityAmount awakeSleep = new ActivityAmount(ActivityKind.AWAKE_SLEEP); ActivityAmount notWorn = new ActivityAmount(ActivityKind.NOT_WORN); ActivityAmount activity = new ActivityAmount(ActivityKind.ACTIVITY); @@ -57,6 +58,9 @@ public class ActivityAnalysis { case REM_SLEEP: amount = remSleep; break; + case AWAKE_SLEEP: + amount = awakeSleep; + break; case NOT_WORN: amount = notWorn; break; @@ -115,6 +119,9 @@ public class ActivityAnalysis { if (remSleep.getTotalSeconds() > 0) { result.addAmount(remSleep); } + if (awakeSleep.getTotalSeconds() > 0) { + result.addAmount(awakeSleep); + } if (activity.getTotalSeconds() > 0) { result.addAmount(activity); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepAnalysis.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepAnalysis.java index f7f9a6363..0c53344f0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepAnalysis.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepAnalysis.java @@ -37,6 +37,7 @@ public class SleepAnalysis { long lightSleepDuration = 0; long deepSleepDuration = 0; long remSleepDuration = 0; + long awakeSleepDuration = 0; long durationSinceLastSleep = 0; for (ActivitySample sample : samples) { @@ -48,13 +49,14 @@ public class SleepAnalysis { durationSinceLastSleep = 0; } else { //exclude "not worn" times from sleep sessions as this makes a discrepancy with the charts - if (lightSleepDuration + deepSleepDuration + remSleepDuration > MIN_SESSION_LENGTH) - result.add(new SleepSession(sleepStart, sleepEnd, lightSleepDuration, deepSleepDuration, remSleepDuration)); + if (lightSleepDuration + deepSleepDuration + remSleepDuration + awakeSleepDuration > MIN_SESSION_LENGTH) + result.add(new SleepSession(sleepStart, sleepEnd, lightSleepDuration, deepSleepDuration, remSleepDuration, awakeSleepDuration)); sleepStart = null; sleepEnd = null; lightSleepDuration = 0; deepSleepDuration = 0; remSleepDuration = 0; + awakeSleepDuration = 0; } if (previousSample != null) { @@ -65,24 +67,27 @@ public class SleepAnalysis { deepSleepDuration += durationSinceLastSample; } else if (sample.getKind() == ActivityKind.REM_SLEEP) { remSleepDuration += durationSinceLastSample; + } else if (sample.getKind() == ActivityKind.AWAKE_SLEEP) { + awakeSleepDuration += durationSinceLastSample; } else { durationSinceLastSleep += durationSinceLastSample; if (sleepStart != null && durationSinceLastSleep > MAX_WAKE_PHASE_LENGTH) { - if (lightSleepDuration + deepSleepDuration + remSleepDuration > MIN_SESSION_LENGTH) - result.add(new SleepSession(sleepStart, sleepEnd, lightSleepDuration, deepSleepDuration, remSleepDuration)); + if (lightSleepDuration + deepSleepDuration + remSleepDuration + awakeSleepDuration > MIN_SESSION_LENGTH) + result.add(new SleepSession(sleepStart, sleepEnd, lightSleepDuration, deepSleepDuration, remSleepDuration, awakeSleepDuration)); sleepStart = null; sleepEnd = null; lightSleepDuration = 0; deepSleepDuration = 0; remSleepDuration = 0; + awakeSleepDuration = 0; } } } previousSample = sample; } - if (lightSleepDuration + deepSleepDuration + remSleepDuration > MIN_SESSION_LENGTH) { - result.add(new SleepSession(sleepStart, sleepEnd, lightSleepDuration, deepSleepDuration, remSleepDuration)); + if (lightSleepDuration + deepSleepDuration + remSleepDuration + awakeSleepDuration > MIN_SESSION_LENGTH) { + result.add(new SleepSession(sleepStart, sleepEnd, lightSleepDuration, deepSleepDuration, remSleepDuration, awakeSleepDuration)); } return result; } @@ -90,7 +95,8 @@ public class SleepAnalysis { private boolean isSleep(ActivitySample sample) { return sample.getKind() == ActivityKind.DEEP_SLEEP || sample.getKind() == ActivityKind.LIGHT_SLEEP || - sample.getKind() == ActivityKind.REM_SLEEP; + sample.getKind() == ActivityKind.REM_SLEEP || + sample.getKind() == ActivityKind.AWAKE_SLEEP; } private Date getDateFromSample(ActivitySample sample) { @@ -104,17 +110,20 @@ public class SleepAnalysis { private final long lightSleepDuration; private final long deepSleepDuration; private final long remSleepDuration; + private final long awakeSleepDuration; private SleepSession(Date sleepStart, Date sleepEnd, long lightSleepDuration, long deepSleepDuration, - long remSleepDuration) { + long remSleepDuration, + long awakeSleepDuration) { this.sleepStart = sleepStart; this.sleepEnd = sleepEnd; this.lightSleepDuration = lightSleepDuration; this.deepSleepDuration = deepSleepDuration; this.remSleepDuration = remSleepDuration; + this.awakeSleepDuration = awakeSleepDuration; } public Date getSleepStart() { @@ -136,5 +145,9 @@ public class SleepAnalysis { public long getRemSleepDuration() { return remSleepDuration; } + + public long getAwakeSleepDuration() { + return awakeSleepDuration; + } } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java index 2c25240ea..42677ad25 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepChartFragment.java @@ -68,6 +68,8 @@ public class SleepChartFragment extends AbstractActivityChartFragment entries = new ArrayList<>(); final List colors = new ArrayList<>(); @@ -148,6 +151,9 @@ public class SleepChartFragment extends AbstractActivityChartFragment sleepSessions) { @@ -194,6 +201,14 @@ public class SleepChartFragment extends AbstractActivityChartFragment sleepSessions) { + long result = 0; + for (SleepSession sleepSession : sleepSessions) { + result += sleepSession.getAwakeSleepDuration(); + } + return result; + } + @Override protected void updateChartsnUIThread(MyChartsData mcd) { MySleepChartsData pieData = mcd.getPieData(); @@ -207,10 +222,12 @@ public class SleepChartFragment extends AbstractActivityChartFragment sleepSessions; - public MySleepChartsData(PieData pieData, List sleepSessions, String totalSleep, String totalRem, String totalDeep, String totalLight) { + public MySleepChartsData(PieData pieData, List sleepSessions, String totalSleep, String totalAwake, String totalRem, String totalDeep, String totalLight) { this.pieData = pieData; this.sleepSessions = sleepSessions; + this.totalAwake = totalAwake; this.totalSleep = totalSleep; this.totalRem = totalRem; this.totalDeep = totalDeep; @@ -507,6 +528,10 @@ public class SleepChartFragment extends AbstractActivityChartFragment + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_weeksleep_chart.xml b/app/src/main/res/layout/fragment_weeksleep_chart.xml index 0bf1b4eb6..55027a4f5 100644 --- a/app/src/main/res/layout/fragment_weeksleep_chart.xml +++ b/app/src/main/res/layout/fragment_weeksleep_chart.xml @@ -140,6 +140,39 @@ android:layout_height="wrap_content" android:gravity="center"/> + + + + + diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 6dc917454..4b2f6715e 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -12,6 +12,7 @@ + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 9b4dbd14f..6b45d5ff3 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -31,6 +31,9 @@ #e427c7 #e427c7 + #ff866e + #ff866e + #60bd6d #59b22c diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5d4af8401..0a49c470a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -976,7 +976,7 @@ Light sleep Deep sleep REM sleep - Awake sleep + Awake Not worn Deep Light @@ -984,6 +984,7 @@ Deep AVG Light AVG REM AVG + Awake AVG - Lowest HR Highest HR diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index dac95550b..cb7bec794 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -27,6 +27,7 @@ @color/chart_deep_sleep_light @color/chart_light_sleep_light @color/chart_rem_sleep_light + @color/chart_awake_sleep_light @color/chart_activity_light @color/chart_not_worn_light @color/alternate_row_background_light @@ -68,6 +69,7 @@ @color/chart_deep_sleep_dark @color/chart_light_sleep_dark @color/chart_rem_sleep_dark + @color/chart_awake_sleep_dark @color/chart_activity_dark @color/chart_not_worn_dark @color/alternate_row_background_dark