mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
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.
This commit is contained in:
+2
-1
@@ -421,7 +421,8 @@ public abstract class AbstractActivityChartFragment<D extends ChartsData> extend
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected List<? extends ActivitySample> getSamplesofSleep(DBHandler db, GBDevice device) {
|
protected List<? extends ActivitySample> 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();
|
int tsStart = getTSStart();
|
||||||
Calendar day = GregorianCalendar.getInstance();
|
Calendar day = GregorianCalendar.getInstance();
|
||||||
|
|||||||
+3
-13
@@ -51,17 +51,12 @@ public class ActivitySleepChartFragment extends AbstractActivityChartFragment<De
|
|||||||
|
|
||||||
private LineChart mChart;
|
private LineChart mChart;
|
||||||
|
|
||||||
private int mSmartAlarmFrom = -1;
|
|
||||||
private int mSmartAlarmTo = -1;
|
|
||||||
private int mTimestampFrom = -1;
|
|
||||||
private int mSmartAlarmGoneOff = -1;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
View rootView = inflater.inflate(R.layout.fragment_charts, container, false);
|
View rootView = inflater.inflate(R.layout.fragment_charts, container, false);
|
||||||
|
|
||||||
mChart = (LineChart) rootView.findViewById(R.id.activitysleepchart);
|
mChart = rootView.findViewById(R.id.activitysleepchart);
|
||||||
|
|
||||||
setupChart();
|
setupChart();
|
||||||
|
|
||||||
@@ -114,12 +109,7 @@ public class ActivitySleepChartFragment extends AbstractActivityChartFragment<De
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (action.equals(ChartsHost.REFRESH)) {
|
if (ChartsHost.REFRESH.equals(action)) {
|
||||||
// TODO: use LimitLines to visualize smart alarms?
|
|
||||||
mSmartAlarmFrom = intent.getIntExtra("smartalarm_from", -1);
|
|
||||||
mSmartAlarmTo = intent.getIntExtra("smartalarm_to", -1);
|
|
||||||
mTimestampFrom = intent.getIntExtra("recording_base_timestamp", -1);
|
|
||||||
mSmartAlarmGoneOff = intent.getIntExtra("alarm_gone_off", -1);
|
|
||||||
refresh();
|
refresh();
|
||||||
} else {
|
} else {
|
||||||
super.onReceive(context, intent);
|
super.onReceive(context, intent);
|
||||||
@@ -140,7 +130,7 @@ public class ActivitySleepChartFragment extends AbstractActivityChartFragment<De
|
|||||||
mChart.getLegend().setTextColor(LEGEND_TEXT_COLOR);
|
mChart.getLegend().setTextColor(LEGEND_TEXT_COLOR);
|
||||||
mChart.setData(null); // workaround for https://github.com/PhilJay/MPAndroidChart/issues/2317
|
mChart.setData(null); // workaround for https://github.com/PhilJay/MPAndroidChart/issues/2317
|
||||||
mChart.getXAxis().setValueFormatter(dcd.getXValueFormatter());
|
mChart.getXAxis().setValueFormatter(dcd.getXValueFormatter());
|
||||||
mChart.setData((LineData) dcd.getData());
|
mChart.setData(dcd.getData());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+1
-10
@@ -91,12 +91,8 @@ public class SleepDailyFragment extends SleepFragment<SleepDailyFragment.MyChart
|
|||||||
|
|
||||||
private FragmentSleepchartBinding binding;
|
private FragmentSleepchartBinding binding;
|
||||||
|
|
||||||
private int mSmartAlarmFrom = -1;
|
|
||||||
private int mSmartAlarmTo = -1;
|
|
||||||
private int mTimestampFrom = -1;
|
|
||||||
private int mSmartAlarmGoneOff = -1;
|
|
||||||
Prefs prefs = GBApplication.getPrefs();
|
Prefs prefs = GBApplication.getPrefs();
|
||||||
private final boolean CHARTS_SLEEP_RANGE_24H = prefs.getBoolean("chart_sleep_range_24h", false);
|
private final boolean CHARTS_SLEEP_RANGE_24H = prefs.getString("chart_sleep_range_mode", "18:00").equals("24h");
|
||||||
private final boolean SHOW_CHARTS_AVERAGE = prefs.getBoolean("charts_show_average", true);
|
private final boolean SHOW_CHARTS_AVERAGE = prefs.getBoolean("charts_show_average", true);
|
||||||
private final int sleepLinesLimit = prefs.getInt("chart_sleep_lines_limit", 6);
|
private final int sleepLinesLimit = prefs.getInt("chart_sleep_lines_limit", 6);
|
||||||
|
|
||||||
@@ -643,11 +639,6 @@ public class SleepDailyFragment extends SleepFragment<SleepDailyFragment.MyChart
|
|||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (action != null && action.equals(ChartsHost.REFRESH)) {
|
if (action != null && action.equals(ChartsHost.REFRESH)) {
|
||||||
// TODO: use LimitLines to visualize smart alarms?
|
|
||||||
mSmartAlarmFrom = intent.getIntExtra("smartalarm_from", -1);
|
|
||||||
mSmartAlarmTo = intent.getIntExtra("smartalarm_to", -1);
|
|
||||||
mTimestampFrom = intent.getIntExtra("recording_base_timestamp", -1);
|
|
||||||
mSmartAlarmGoneOff = intent.getIntExtra("alarm_gone_off", -1);
|
|
||||||
refresh();
|
refresh();
|
||||||
} else {
|
} else {
|
||||||
super.onReceive(context, intent);
|
super.onReceive(context, intent);
|
||||||
|
|||||||
+15
-13
@@ -77,7 +77,7 @@ public class SleepPeriodFragment extends SleepFragment<SleepPeriodFragment.MyCha
|
|||||||
protected Locale mLocale;
|
protected Locale mLocale;
|
||||||
protected int mTargetValue = 0;
|
protected int mTargetValue = 0;
|
||||||
|
|
||||||
private final int mOffsetHours = getOffsetHours();
|
private final int mCutOffHour = GBApplication.getPrefs().getString("chart_sleep_range_mode", "18:00").equals("18:00") ? 18 : 12;
|
||||||
|
|
||||||
protected boolean SHOW_BALANCE;
|
protected boolean SHOW_BALANCE;
|
||||||
|
|
||||||
@@ -475,7 +475,7 @@ public class SleepPeriodFragment extends SleepFragment<SleepPeriodFragment.MyCha
|
|||||||
}
|
}
|
||||||
|
|
||||||
int getOffsetHours() {
|
int getOffsetHours() {
|
||||||
return -12;
|
return GBApplication.getPrefs().getString("chart_sleep_range_mode", "18:00").equals("18:00") ? -18 : -12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -627,7 +627,7 @@ public class SleepPeriodFragment extends SleepFragment<SleepPeriodFragment.MyCha
|
|||||||
ActivityAmounts amounts = null;
|
ActivityAmounts amounts = null;
|
||||||
|
|
||||||
Activity activity = getActivity();
|
Activity activity = getActivity();
|
||||||
int key = (int) (day.getTimeInMillis() / 1000) + (mOffsetHours * 3600);
|
int key = (int) (day.getTimeInMillis() / 1000) + (-mCutOffHour * 3600);
|
||||||
if (activity != null) {
|
if (activity != null) {
|
||||||
activityAmountCache = ((ActivityChartsActivity) activity).mActivityAmountCache;
|
activityAmountCache = ((ActivityChartsActivity) activity).mActivityAmountCache;
|
||||||
amounts = activityAmountCache.lookup(key);
|
amounts = activityAmountCache.lookup(key);
|
||||||
@@ -635,7 +635,7 @@ public class SleepPeriodFragment extends SleepFragment<SleepPeriodFragment.MyCha
|
|||||||
|
|
||||||
if (amounts == null) {
|
if (amounts == null) {
|
||||||
ActivityAnalysis analysis = new ActivityAnalysis();
|
ActivityAnalysis analysis = new ActivityAnalysis();
|
||||||
amounts = analysis.calculateActivityAmounts(getSamplesOfDay(db, day, mOffsetHours, device));
|
amounts = analysis.calculateActivityAmounts(getSamplesOfDay(db, day, mCutOffHour, device));
|
||||||
if (activityAmountCache != null) {
|
if (activityAmountCache != null) {
|
||||||
activityAmountCache.add(key, amounts);
|
activityAmountCache.add(key, amounts);
|
||||||
}
|
}
|
||||||
@@ -644,20 +644,22 @@ public class SleepPeriodFragment extends SleepFragment<SleepPeriodFragment.MyCha
|
|||||||
return amounts;
|
return amounts;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<? extends ActivitySample> getSamplesOfDay(DBHandler db, Calendar day, int offsetHours, GBDevice device) {
|
private List<? extends ActivitySample> getSamplesOfDay(DBHandler db, Calendar day, int cutoffHour, GBDevice device) {
|
||||||
int startTs;
|
|
||||||
int endTs;
|
|
||||||
|
|
||||||
day = (Calendar) day.clone(); // do not modify the caller's argument
|
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.MINUTE, 0);
|
||||||
day.set(Calendar.SECOND, 0);
|
day.set(Calendar.SECOND, 0);
|
||||||
day.add(Calendar.HOUR, offsetHours);
|
final int tsEnd = toTimestamp(day.getTime());
|
||||||
|
|
||||||
startTs = (int) (day.getTimeInMillis() / 1000);
|
int tsStart = tsEnd - 24 * 60 * 60;
|
||||||
endTs = startTs + 24 * 60 * 60 - 1;
|
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() {
|
private int getRangeDays() {
|
||||||
|
|||||||
+1
-2
@@ -80,7 +80,6 @@ public class StressDailyFragment extends StressFragment<StressDailyFragment.Stre
|
|||||||
private String STRESS_AVERAGE_LABEL;
|
private String STRESS_AVERAGE_LABEL;
|
||||||
|
|
||||||
private final Prefs prefs = GBApplication.getPrefs();
|
private final Prefs prefs = GBApplication.getPrefs();
|
||||||
private final boolean CHARTS_SLEEP_RANGE_24H = prefs.getBoolean("chart_sleep_range_24h", false);
|
|
||||||
private final boolean SHOW_CHARTS_AVERAGE = prefs.getBoolean("charts_show_average", true);
|
private final boolean SHOW_CHARTS_AVERAGE = prefs.getBoolean("charts_show_average", true);
|
||||||
|
|
||||||
private boolean showStressLevelInPercents = false;
|
private boolean showStressLevelInPercents = false;
|
||||||
@@ -259,7 +258,7 @@ public class StressDailyFragment extends StressFragment<StressDailyFragment.Stre
|
|||||||
protected void setupLegend(final Chart<?> chart) {
|
protected void setupLegend(final Chart<?> chart) {
|
||||||
final List<LegendEntry> legendEntries = createLegendEntries(chart);
|
final List<LegendEntry> legendEntries = createLegendEntries(chart);
|
||||||
|
|
||||||
if (!CHARTS_SLEEP_RANGE_24H && SHOW_CHARTS_AVERAGE) {
|
if (SHOW_CHARTS_AVERAGE) {
|
||||||
final LegendEntry averageEntry = new LegendEntry();
|
final LegendEntry averageEntry = new LegendEntry();
|
||||||
averageEntry.label = STRESS_AVERAGE_LABEL;
|
averageEntry.label = STRESS_AVERAGE_LABEL;
|
||||||
averageEntry.formColor = Color.GRAY;
|
averageEntry.formColor = Color.GRAY;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import org.slf4j.LoggerFactory;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55;
|
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56;
|
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator57;
|
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator57;
|
||||||
|
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator58;
|
||||||
|
|
||||||
public class GBPrefsMigrator {
|
public class GBPrefsMigrator {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(GBPrefsMigrator.class);
|
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";
|
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
|
//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
|
// 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) {
|
public static void migratePrefsIfNeeded(final SharedPreferences sharedPrefs) {
|
||||||
final int oldVersion = getPrefsFileVersion(sharedPrefs);
|
final int oldVersion = getPrefsFileVersion(sharedPrefs);
|
||||||
@@ -28,6 +29,7 @@ public class GBPrefsMigrator {
|
|||||||
if (oldVersion < 55) new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor);
|
if (oldVersion < 55) new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor);
|
||||||
if (oldVersion < 56) new PreferenceMigrator56().migrate(oldVersion, sharedPrefs, editor);
|
if (oldVersion < 56) new PreferenceMigrator56().migrate(oldVersion, sharedPrefs, editor);
|
||||||
if (oldVersion < 57) new PreferenceMigrator57().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.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION));
|
||||||
editor.apply();
|
editor.apply();
|
||||||
|
|||||||
+21
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5039,6 +5039,17 @@
|
|||||||
<item>23</item>
|
<item>23</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="sleep_range_entries">
|
||||||
|
<item>@string/pref_chart_sleep_range_rolling_24h</item>
|
||||||
|
<item>@string/pref_chart_sleep_range_noon</item>
|
||||||
|
<item>@string/pref_chart_sleep_range_18h</item>
|
||||||
|
</string-array>
|
||||||
|
<string-array name="sleep_range_values">
|
||||||
|
<item>24h</item>
|
||||||
|
<item>12:00</item>
|
||||||
|
<item>18:00</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string-array name="prefs_wena3_button_action_list">
|
<string-array name="prefs_wena3_button_action_list">
|
||||||
<item>@string/menuitem_nothing</item>
|
<item>@string/menuitem_nothing</item>
|
||||||
<!-- <item>@string/menuitem_alexa</item> -->
|
<!-- <item>@string/menuitem_alexa</item> -->
|
||||||
|
|||||||
@@ -1361,8 +1361,10 @@
|
|||||||
<string name="weekstepschart_steps_a_week_or_month">Steps per week/month</string>
|
<string name="weekstepschart_steps_a_week_or_month">Steps per week/month</string>
|
||||||
<string name="weeksleepchart_sleep_a_week_or_month">Sleep per week/month</string>
|
<string name="weeksleepchart_sleep_a_week_or_month">Sleep per week/month</string>
|
||||||
<string name="pref_title_chart_sleep_rolling_24_hour">Sleep range</string>
|
<string name="pref_title_chart_sleep_rolling_24_hour">Sleep range</string>
|
||||||
<string name="pref_chart_sleep_rolling_24_on">Past 24 hours</string>
|
<string name="pref_summary_chart_sleep_range">Determines which day a sleep session is assigned to</string>
|
||||||
<string name="pref_chart_sleep_rolling_24_off">Noon to noon</string>
|
<string name="pref_chart_sleep_range_rolling_24h">Rolling 24 hours</string>
|
||||||
|
<string name="pref_chart_sleep_range_noon">Noon (12:00)</string>
|
||||||
|
<string name="pref_chart_sleep_range_18h">Evening (18:00)</string>
|
||||||
<string name="activity_prefs_chart_min_steps_per_minute_for_run">Minimal steps per minute to detect run</string>
|
<string name="activity_prefs_chart_min_steps_per_minute_for_run">Minimal steps per minute to detect run</string>
|
||||||
<string name="activity_prefs_chart_min_steps_per_minute">Minimal steps per minute to detect activity</string>
|
<string name="activity_prefs_chart_min_steps_per_minute">Minimal steps per minute to detect activity</string>
|
||||||
<string name="activity_prefs_chart_max_idle_phase_length">Pause length to separate activities (minutes)</string>
|
<string name="activity_prefs_chart_max_idle_phase_length">Pause length to separate activities (minutes)</string>
|
||||||
|
|||||||
@@ -53,12 +53,12 @@
|
|||||||
android:title="@string/pref_title_charts_swipe"
|
android:title="@string/pref_title_charts_swipe"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
|
|
||||||
<SwitchPreferenceCompat
|
<ListPreference
|
||||||
android:defaultValue="false"
|
android:defaultValue="18:00"
|
||||||
android:key="chart_sleep_range_24h"
|
android:entries="@array/sleep_range_entries"
|
||||||
android:layout="@layout/preference_checkbox"
|
android:entryValues="@array/sleep_range_values"
|
||||||
android:summaryOff="@string/pref_chart_sleep_rolling_24_off"
|
android:key="chart_sleep_range_mode"
|
||||||
android:summaryOn="@string/pref_chart_sleep_rolling_24_on"
|
android:summary="@string/pref_summary_chart_sleep_range"
|
||||||
android:title="@string/pref_title_chart_sleep_rolling_24_hour"
|
android:title="@string/pref_title_chart_sleep_rolling_24_hour"
|
||||||
app:iconSpaceReserved="false" />
|
app:iconSpaceReserved="false" />
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user