From 2380f988155a3be1b12a4e297d394406b45bf62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Tue, 21 Apr 2026 23:00:16 +0100 Subject: [PATCH] Adjust default sleep range to 18:00 This is a saner default than 12:00, which cuts off sleep sessions that go past noon. We keep the previous noon-to-noon setting as an option, in case that is a better option for some users. --- .../charts/AbstractActivityChartFragment.java | 3 +- .../charts/ActivitySleepChartFragment.java | 16 ++--------- .../activities/charts/SleepDailyFragment.java | 11 +------- .../charts/SleepPeriodFragment.java | 28 ++++++++++--------- .../charts/StressDailyFragment.java | 3 +- .../gadgetbridge/prefs/GBPrefsMigrator.java | 4 ++- .../prefs/migrators/PreferenceMigrator58.java | 21 ++++++++++++++ app/src/main/res/values/arrays.xml | 11 ++++++++ app/src/main/res/values/strings.xml | 6 ++-- app/src/main/res/xml/charts_preferences.xml | 12 ++++---- 10 files changed, 67 insertions(+), 48 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator58.java 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 d2ef81fb93..99cd0de23a 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 @@ -421,7 +421,8 @@ public abstract class AbstractActivityChartFragment extend } protected List getSamplesofSleep(DBHandler db, GBDevice device) { - int SLEEP_HOUR_LIMIT = 12; + final String chartSleepRangeMode = GBApplication.getPrefs().getString("chart_sleep_range_mode", "18:00"); + final int SLEEP_HOUR_LIMIT = "18:00".equals(chartSleepRangeMode) ? 18 : 12; int tsStart = getTSStart(); Calendar day = GregorianCalendar.getInstance(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java index eb999280eb..12eb0d0948 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivitySleepChartFragment.java @@ -51,17 +51,12 @@ public class ActivitySleepChartFragment extends AbstractActivityChartFragment getSamplesOfDay(DBHandler db, Calendar day, int offsetHours, GBDevice device) { - int startTs; - int endTs; - + private List getSamplesOfDay(DBHandler db, Calendar day, int cutoffHour, GBDevice device) { day = (Calendar) day.clone(); // do not modify the caller's argument - day.set(Calendar.HOUR_OF_DAY, 0); + + day.set(Calendar.HOUR_OF_DAY, cutoffHour); day.set(Calendar.MINUTE, 0); day.set(Calendar.SECOND, 0); - day.add(Calendar.HOUR, offsetHours); + final int tsEnd = toTimestamp(day.getTime()); - startTs = (int) (day.getTimeInMillis() / 1000); - endTs = startTs + 24 * 60 * 60 - 1; + int tsStart = tsEnd - 24 * 60 * 60; + day.setTimeInMillis(tsStart * 1000L); + day.set(Calendar.HOUR_OF_DAY, cutoffHour); + day.set(Calendar.MINUTE, 0); + day.set(Calendar.SECOND, 0); + tsStart = toTimestamp(day.getTime()); - return getSamples(db, device, startTs, endTs); + return getSamples(db, device, tsStart, tsEnd); } private int getRangeDays() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/StressDailyFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/StressDailyFragment.java index 15c5cc21e5..4fa716f709 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/StressDailyFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/StressDailyFragment.java @@ -80,7 +80,6 @@ public class StressDailyFragment extends StressFragment chart) { final List legendEntries = createLegendEntries(chart); - if (!CHARTS_SLEEP_RANGE_24H && SHOW_CHARTS_AVERAGE) { + if (SHOW_CHARTS_AVERAGE) { final LegendEntry averageEntry = new LegendEntry(); averageEntry.label = STRESS_AVERAGE_LABEL; averageEntry.formColor = Color.GRAY; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java index dd30c907d3..dcc2763640 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java @@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory; import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55; import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56; import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator57; +import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator58; public class GBPrefsMigrator { private static final Logger LOG = LoggerFactory.getLogger(GBPrefsMigrator.class); @@ -15,7 +16,7 @@ public class GBPrefsMigrator { public static final String PREFS_VERSION = "shared_preferences_version"; //if preferences have to be migrated, increment the following and add the migration logic in migratePrefs below // see http://stackoverflow.com/questions/16397848/how-can-i-migrate-android-preferences-with-a-new-version - private static final int CURRENT_PREFS_VERSION = 57; + private static final int CURRENT_PREFS_VERSION = 58; public static void migratePrefsIfNeeded(final SharedPreferences sharedPrefs) { final int oldVersion = getPrefsFileVersion(sharedPrefs); @@ -28,6 +29,7 @@ public class GBPrefsMigrator { if (oldVersion < 55) new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor); if (oldVersion < 56) new PreferenceMigrator56().migrate(oldVersion, sharedPrefs, editor); if (oldVersion < 57) new PreferenceMigrator57().migrate(oldVersion, sharedPrefs, editor); + if (oldVersion < 58) new PreferenceMigrator58().migrate(oldVersion, sharedPrefs, editor); editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION)); editor.apply(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator58.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator58.java new file mode 100644 index 0000000000..b712295eea --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator58.java @@ -0,0 +1,21 @@ +package nodomain.freeyourgadget.gadgetbridge.prefs.migrators; + +import android.content.SharedPreferences; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import nodomain.freeyourgadget.gadgetbridge.prefs.AbstractPreferenceMigrator; + +public class PreferenceMigrator58 extends AbstractPreferenceMigrator { + private static final Logger LOG = LoggerFactory.getLogger(PreferenceMigrator58.class); + + @Override + public void migrate(final int oldVersion, final SharedPreferences sharedPrefs, final SharedPreferences.Editor editor) { + try { + editor.putString("chart_sleep_range_mode", sharedPrefs.getBoolean("chart_sleep_range_24h", false) ? "24h" : "18:00"); + } catch (final Exception e) { + LOG.error("Failed to migrate prefs to version 58", e); + } + } +} diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index be2e39827f..c9c17f15d4 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -5039,6 +5039,17 @@ 23 + + @string/pref_chart_sleep_range_rolling_24h + @string/pref_chart_sleep_range_noon + @string/pref_chart_sleep_range_18h + + + 24h + 12:00 + 18:00 + + @string/menuitem_nothing diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9fa69e1111..58b80e204c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1361,8 +1361,10 @@ Steps per week/month Sleep per week/month Sleep range - Past 24 hours - Noon to noon + Determines which day a sleep session is assigned to + Rolling 24 hours + Noon (12:00) + Evening (18:00) Minimal steps per minute to detect run Minimal steps per minute to detect activity Pause length to separate activities (minutes) diff --git a/app/src/main/res/xml/charts_preferences.xml b/app/src/main/res/xml/charts_preferences.xml index 9555221703..a1d3dbafa0 100644 --- a/app/src/main/res/xml/charts_preferences.xml +++ b/app/src/main/res/xml/charts_preferences.xml @@ -53,12 +53,12 @@ android:title="@string/pref_title_charts_swipe" app:iconSpaceReserved="false" /> -