From eba83f93ad3f42a94238ca708266da614c050695 Mon Sep 17 00:00:00 2001 From: Thomas Kuehne Date: Thu, 28 Aug 2025 00:00:00 +0200 Subject: [PATCH] change daily sleep goal from hours to minutes (#1312) --- .../gadgetbridge/daogen/GBDaoGenerator.java | 5 ++-- .../gadgetbridge/GBApplication.java | 11 +++++++- .../gadgetbridge/SleepAlarmWidget.java | 2 +- .../freeyourgadget/gadgetbridge/Widget.java | 3 +-- .../AboutUserPreferencesActivity.java | 8 +++--- .../activities/WidgetAlarmsActivity.java | 10 +++++-- .../charts/SleepPeriodFragment.java | 2 +- .../adapter/GBDeviceAdapterv2.java | 3 +-- .../gadgetbridge/database/DBHelper.java | 6 ++--- .../schema/GadgetbridgeUpdate_115.java | 27 +++++++++++++++++++ .../gadgetbridge/model/ActivityUser.java | 10 +++---- .../service/devices/huami/HuamiSupport.java | 2 +- .../zeppos/services/ZeppOsConfigService.java | 6 ++--- .../devices/zetime/ZeTimeDeviceSupport.java | 4 +-- .../gadgetbridge/util/DashboardUtils.java | 2 +- app/src/main/res/values/strings.xml | 9 +++---- app/src/main/res/xml/about_user.xml | 6 ++--- 17 files changed, 77 insertions(+), 39 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/GadgetbridgeUpdate_115.java diff --git a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java index a49a735858..a0c897aa41 100644 --- a/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java +++ b/GBDaoGenerator/src/nodomain/freeyourgadget/gadgetbridge/daogen/GBDaoGenerator.java @@ -58,7 +58,7 @@ public class GBDaoGenerator { public static void main(String[] args) throws Exception { - final Schema schema = new Schema(114, MAIN_PACKAGE + ".entities"); + final Schema schema = new Schema(115, MAIN_PACKAGE + ".entities"); Entity userAttributes = addUserAttributes(schema); Entity user = addUserInfo(schema, userAttributes); @@ -279,9 +279,10 @@ public class GBDaoGenerator { userAttributes.addIdProperty(); userAttributes.addIntProperty("heightCM").notNull(); userAttributes.addIntProperty("weightKG").notNull(); - userAttributes.addIntProperty("sleepGoalHPD").javaDocGetterAndSetter("Desired number of hours of sleep per day."); + userAttributes.addIntProperty("sleepGoalHPD").javaDocGetterAndSetter("@deprecated").codeBeforeGetterAndSetter("@Deprecated"); userAttributes.addIntProperty("stepsGoalSPD").javaDocGetterAndSetter("Desired number of steps per day."); addDateValidityTo(userAttributes); + userAttributes.addIntProperty("sleepGoalMPD").javaDocGetterAndSetter("Desired number of minutes of sleep per day."); return userAttributes; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index c4d9c5b00c..e175268c53 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -142,7 +142,7 @@ public class GBApplication extends Application { private static SharedPreferences sharedPrefs; private 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 = 50; + private static final int CURRENT_PREFS_VERSION = 51; private static final LimitedQueue mIDSenderLookup = new LimitedQueue<>(16); private static GBPrefs prefs; @@ -2136,6 +2136,15 @@ public class GBApplication extends Application { } } + if (oldVersion < 51) { + if (prefs.contains("activity_user_sleep_duration")) { + int hours = prefs.getInt("activity_user_sleep_duration", -1); + if (hours > -1){ + editor.putInt("activity_user_sleep_duration_minutes", hours * 60); + } + } + } + editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION)); editor.apply(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SleepAlarmWidget.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SleepAlarmWidget.java index 85f0795e3e..32ce58d9d8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SleepAlarmWidget.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/SleepAlarmWidget.java @@ -108,7 +108,7 @@ public class SleepAlarmWidget extends AppWidgetProvider { GregorianCalendar calendar = new GregorianCalendar(); // add preferred sleep duration if (userSleepDuration > 0) { - calendar.add(Calendar.HOUR_OF_DAY, userSleepDuration); + calendar.add(Calendar.MINUTE, userSleepDuration); } else { // probably testing calendar.add(Calendar.MINUTE, 1); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/Widget.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/Widget.java index 56ab047e0d..6c0e8f16f8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/Widget.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/Widget.java @@ -121,8 +121,7 @@ public class Widget extends AppWidgetProvider { int distanceCm = (int) dailyTotals.getDistance(); ActivityUser activityUser = new ActivityUser(); int stepGoal = activityUser.getStepsGoal(); - int sleepGoal = activityUser.getSleepDurationGoal(); - int sleepGoalMinutes = sleepGoal * 60; + int sleepGoalMinutes = activityUser.getSleepDurationGoal(); int distanceGoal = activityUser.getDistanceGoalMeters() * 100; int stepLength = activityUser.getStepLengthCm(); double distanceMeters = (distanceCm > 0 ? distanceCm : steps * stepLength) * 0.01; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java index 5eb77823d8..0968fbac68 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AboutUserPreferencesActivity.java @@ -26,7 +26,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_ import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_GOAL_WEIGHT_KG; import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_HEIGHT_CM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_NAME; -import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_SLEEP_DURATION; +import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_SLEEP_DURATION_MINUTES; import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_STEPS_GOAL; import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_STEP_LENGTH_CM; import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_WEIGHT_KG; @@ -69,7 +69,7 @@ public class AboutUserPreferencesActivity extends AbstractSettingsActivityV2 { addPreferenceHandlerFor(PREF_USER_GOAL_WEIGHT_KG, true, true); addPreferenceHandlerFor(PREF_USER_GOAL_STANDING_TIME_HOURS, true, true); addPreferenceHandlerFor(PREF_USER_GOAL_FAT_BURN_TIME_MINUTES, true, true); - addPreferenceHandlerFor(PREF_USER_SLEEP_DURATION, false, true); + addPreferenceHandlerFor(PREF_USER_SLEEP_DURATION_MINUTES, false, true); addPreferenceHandlerFor(PREF_USER_STEP_LENGTH_CM, false, true); addPreferenceHandlerFor(PREF_USER_DISTANCE_METERS, false, true); @@ -79,7 +79,7 @@ public class AboutUserPreferencesActivity extends AbstractSettingsActivityV2 { setInputTypeFor(PREF_USER_GOAL_WEIGHT_KG, InputType.TYPE_CLASS_NUMBER); setInputTypeFor(PREF_USER_GOAL_STANDING_TIME_HOURS, InputType.TYPE_CLASS_NUMBER); setInputTypeFor(PREF_USER_GOAL_FAT_BURN_TIME_MINUTES, InputType.TYPE_CLASS_NUMBER); - setInputTypeFor(PREF_USER_SLEEP_DURATION, InputType.TYPE_CLASS_NUMBER); + setInputTypeFor(PREF_USER_SLEEP_DURATION_MINUTES, InputType.TYPE_CLASS_NUMBER); setInputTypeFor(PREF_USER_CALORIES_BURNT, InputType.TYPE_CLASS_NUMBER); setInputTypeFor(PREF_USER_ACTIVETIME_MINUTES, InputType.TYPE_CLASS_NUMBER); setInputTypeFor(PREF_USER_STEP_LENGTH_CM, InputType.TYPE_CLASS_NUMBER); @@ -87,7 +87,7 @@ public class AboutUserPreferencesActivity extends AbstractSettingsActivityV2 { } /** - * @param prefKey the pref key that chagned + * @param prefKey the pref key that changed * @param sendToDevice notify all device support classes of the preference change * @param refreshDeviceList Ensure that the Control center is re-rendered when user preferences change */ diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java index 8d56e9e9d1..540c570da9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/WidgetAlarmsActivity.java @@ -26,6 +26,7 @@ import android.view.View; import android.widget.TextView; import android.widget.Toast; +import java.time.Duration; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; @@ -36,6 +37,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.ActivityUser; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.util.AlarmUtils; +import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class WidgetAlarmsActivity extends Activity implements View.OnClickListener { @@ -71,8 +73,12 @@ public class WidgetAlarmsActivity extends Activity implements View.OnClickListen int userSleepDuration = new ActivityUser().getSleepDurationGoal(); textView = findViewById(R.id.alarm5); if (userSleepDuration > 0) { + Duration duration = Duration.ofMinutes(userSleepDuration); + int hours = (int) duration.toHours(); + int mins = (int) duration.minusHours(hours).toMinutes(); + Resources res = getResources(); - textView.setText(res.getQuantityString(R.plurals.widget_alarm_target_hours, userSleepDuration, userSleepDuration)); + textView.setText(res.getQuantityString(R.plurals.widget_alarm_target_hours, hours, hours, mins)); } else { textView.setVisibility(View.GONE); } @@ -113,7 +119,7 @@ public class WidgetAlarmsActivity extends Activity implements View.OnClickListen int userSleepDuration = new ActivityUser().getSleepDurationGoal(); // add preferred sleep duration if (userSleepDuration > 0) { - calendar.add(Calendar.HOUR_OF_DAY, userSleepDuration); + calendar.add(Calendar.MINUTE, userSleepDuration); } else { // probably testing calendar.add(Calendar.MINUTE, 1); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepPeriodFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepPeriodFragment.java index 87abdde491..6373ce4190 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepPeriodFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/SleepPeriodFragment.java @@ -464,7 +464,7 @@ public class SleepPeriodFragment extends SleepFragment 0 ? distanceCm : steps * stepLength) * 0.01; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java index f5fc8611e7..f56484faa8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/DBHelper.java @@ -278,7 +278,7 @@ public class DBHelper { attributes.setValidFromUTC(now.getTime()); attributes.setHeightCM(prefsUser.getHeightCm()); attributes.setWeightKG(prefsUser.getWeightKg()); - attributes.setSleepGoalHPD(prefsUser.getSleepDurationGoal()); + attributes.setSleepGoalMPD(prefsUser.getSleepDurationGoal()); attributes.setStepsGoalSPD(prefsUser.getStepsGoal()); attributes.setUserId(user.getId()); session.getUserAttributesDao().insert(attributes); @@ -340,8 +340,8 @@ public class DBHelper { LOG.debug("user weight changed to {} from {}", prefsUser.getWeightKg(), attr.getWeightKG()); return false; } - if (!Integer.valueOf(prefsUser.getSleepDurationGoal()).equals(attr.getSleepGoalHPD())) { - LOG.debug("user sleep goal changed to {} from {}", prefsUser.getSleepDurationGoal(), attr.getSleepGoalHPD()); + if (!Integer.valueOf(prefsUser.getSleepDurationGoal()).equals(attr.getSleepGoalMPD())) { + LOG.debug("user sleep goal changed to {} from {}", prefsUser.getSleepDurationGoal(), attr.getSleepGoalMPD()); return false; } if (!Integer.valueOf(prefsUser.getStepsGoal()).equals(attr.getStepsGoalSPD())) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/GadgetbridgeUpdate_115.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/GadgetbridgeUpdate_115.java new file mode 100644 index 0000000000..fde95fe1db --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/database/schema/GadgetbridgeUpdate_115.java @@ -0,0 +1,27 @@ +package nodomain.freeyourgadget.gadgetbridge.database.schema; + +import android.database.sqlite.SQLiteDatabase; + +import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; +import nodomain.freeyourgadget.gadgetbridge.database.DBUpdateScript; +import nodomain.freeyourgadget.gadgetbridge.entities.UserAttributesDao; + +public class GadgetbridgeUpdate_115 implements DBUpdateScript { + @Override + public void upgradeSchema(SQLiteDatabase database) { + final String SLEEP_GOAL_MPD = UserAttributesDao.Properties.SleepGoalMPD.columnName; + final String SLEEP_GOAL_HPD = UserAttributesDao.Properties.SleepGoalMPD.columnName.replace("HPD", "MPD"); + final String USER_ATTRIBUTES = UserAttributesDao.TABLENAME; + + if (!DBHelper.existsColumn(USER_ATTRIBUTES, SLEEP_GOAL_MPD, database)) { + final String add = "ALTER TABLE " + USER_ATTRIBUTES + " ADD COLUMN " + SLEEP_GOAL_MPD + " INTEGER;"; + final String update = "UPDATE " + USER_ATTRIBUTES + " SET " + SLEEP_GOAL_MPD + " = 60 * " + SLEEP_GOAL_HPD + ";"; + database.execSQL(add); + database.execSQL(update); + } + } + + @Override + public void downgradeSchema(SQLiteDatabase db) { + } +} diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityUser.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityUser.java index b5ae9d5cc6..5ef0b7f5aa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityUser.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/ActivityUser.java @@ -55,7 +55,7 @@ public class ActivityUser { public static final int defaultUserAge = 0; public static final int defaultUserHeightCm = 175; public static final int defaultUserWeightKg = 70; - public static final int defaultUserSleepDurationGoal = 7; + public static final int defaultUserSleepDurationGoal = 7 * 60; public static final int defaultUserStepsGoal = 8000; public static final int defaultUserCaloriesBurntGoal = 350; public static final int defaultUserDistanceGoalMeters = 5000; @@ -70,7 +70,7 @@ public class ActivityUser { public static final String PREF_USER_GENDER = "activity_user_gender"; public static final String PREF_USER_HEIGHT_CM = "activity_user_height_cm"; public static final String PREF_USER_WEIGHT_KG = "activity_user_weight_kg"; - public static final String PREF_USER_SLEEP_DURATION = "activity_user_sleep_duration"; + public static final String PREF_USER_SLEEP_DURATION_MINUTES = "activity_user_sleep_duration_minutes"; public static final String PREF_USER_STEPS_GOAL = "fitness_goal"; // FIXME: for compatibility public static final String PREF_USER_CALORIES_BURNT = "activity_user_calories_burnt"; public static final String PREF_USER_DISTANCE_METERS = "activity_user_distance_meters"; @@ -129,11 +129,11 @@ public class ActivityUser { } /** - * @return the user defined sleep duration or the default value when none is set or the stored + * @return the user defined sleep duration in minutes or the default value when none is set or the stored * value is out of any logical bounds. */ public int getSleepDurationGoal() { - if (activityUserSleepDurationGoal < 1 || activityUserSleepDurationGoal > 24) { + if (activityUserSleepDurationGoal < 1 || activityUserSleepDurationGoal > 24 * 60) { activityUserSleepDurationGoal = defaultUserSleepDurationGoal; } return activityUserSleepDurationGoal; @@ -157,7 +157,7 @@ public class ActivityUser { activityUserHeightCm = prefs.getInt(PREF_USER_HEIGHT_CM, defaultUserHeightCm); activityUserWeightKg = prefs.getInt(PREF_USER_WEIGHT_KG, defaultUserWeightKg); activityUserDateOfBirth = prefs.getLocalDate(PREF_USER_DATE_OF_BIRTH, defaultUserDateOfBirth); - activityUserSleepDurationGoal = prefs.getInt(PREF_USER_SLEEP_DURATION, defaultUserSleepDurationGoal); + activityUserSleepDurationGoal = prefs.getInt(PREF_USER_SLEEP_DURATION_MINUTES, defaultUserSleepDurationGoal); activityUserStepsGoal = prefs.getInt(PREF_USER_STEPS_GOAL, defaultUserStepsGoal); activityUserCaloriesBurntGoal = prefs.getInt(PREF_USER_CALORIES_BURNT, defaultUserCaloriesBurntGoal); activityUserDistanceGoalMeters = prefs.getInt(PREF_USER_DISTANCE_METERS, defaultUserDistanceGoalMeters); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index d7dbb2ead5..ecc7c437e7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -2657,7 +2657,7 @@ public abstract class HuamiSupport extends AbstractBTLESingleDeviceSupport break; case ActivityUser.PREF_USER_STEPS_GOAL: case ActivityUser.PREF_USER_CALORIES_BURNT: - case ActivityUser.PREF_USER_SLEEP_DURATION: + case ActivityUser.PREF_USER_SLEEP_DURATION_MINUTES: case ActivityUser.PREF_USER_GOAL_WEIGHT_KG: case ActivityUser.PREF_USER_GOAL_STANDING_TIME_HOURS: case ActivityUser.PREF_USER_GOAL_FAT_BURN_TIME_MINUTES: diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java index fcc2fcf738..1e83b735b8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java @@ -147,7 +147,7 @@ public class ZeppOsConfigService extends AbstractZeppOsService { // Fitness goals are global case ActivityUser.PREF_USER_STEPS_GOAL: case ActivityUser.PREF_USER_CALORIES_BURNT: - case ActivityUser.PREF_USER_SLEEP_DURATION: + case ActivityUser.PREF_USER_SLEEP_DURATION_MINUTES: case ActivityUser.PREF_USER_GOAL_WEIGHT_KG: case ActivityUser.PREF_USER_GOAL_STANDING_TIME_HOURS: case ActivityUser.PREF_USER_GOAL_FAT_BURN_TIME_MINUTES: { @@ -221,7 +221,7 @@ public class ZeppOsConfigService extends AbstractZeppOsService { protected void setFitnessGoal(final ZeppOsTransactionBuilder builder) { final int goalSteps = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_STEPS_GOAL, ActivityUser.defaultUserStepsGoal); final int goalCalories = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_CALORIES_BURNT, ActivityUser.defaultUserCaloriesBurntGoal); - final int goalSleep = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_SLEEP_DURATION, ActivityUser.defaultUserSleepDurationGoal); + final int goalSleep = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_SLEEP_DURATION_MINUTES, ActivityUser.defaultUserSleepDurationGoal); final int goalWeight = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_GOAL_WEIGHT_KG, ActivityUser.defaultUserGoalWeightKg); final int goalStandingTime = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_GOAL_STANDING_TIME_HOURS, ActivityUser.defaultUserGoalStandingTimeHours); final int goalFatBurnTime = GBApplication.getPrefs().getInt(ActivityUser.PREF_USER_GOAL_FAT_BURN_TIME_MINUTES, ActivityUser.defaultUserFatBurnTimeMinutes); @@ -229,7 +229,7 @@ public class ZeppOsConfigService extends AbstractZeppOsService { final ConfigSetter setter = newSetter() .setShort(ConfigArg.FITNESS_GOAL_CALORIES, (short) goalCalories) - .setShort(ConfigArg.FITNESS_GOAL_SLEEP, (short) (goalSleep * 60)) + .setShort(ConfigArg.FITNESS_GOAL_SLEEP, (short) goalSleep) .setShort(ConfigArg.FITNESS_GOAL_STANDING_TIME, (short) (goalStandingTime)) .setShort(ConfigArg.FITNESS_GOAL_FAT_BURN_TIME, (short) goalFatBurnTime); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/zetime/ZeTimeDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/zetime/ZeTimeDeviceSupport.java index 3ce1c562da..be11f55b66 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/zetime/ZeTimeDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/zetime/ZeTimeDeviceSupport.java @@ -214,7 +214,7 @@ public class ZeTimeDeviceSupport extends AbstractBTLESingleDeviceSupport { setHeartRateLimits(builder); break; case DeviceSettingsPreferenceConst.PREF_USER_FITNESS_GOAL: - case ActivityUser.PREF_USER_SLEEP_DURATION: + case ActivityUser.PREF_USER_SLEEP_DURATION_MINUTES: case ActivityUser.PREF_USER_CALORIES_BURNT: case ActivityUser.PREF_USER_DISTANCE_METERS: case ActivityUser.PREF_USER_ACTIVETIME_MINUTES: @@ -1509,7 +1509,7 @@ public class ZeTimeDeviceSupport extends AbstractBTLESingleDeviceSupport { int steps = activityUser.getStepsGoal() / 100; // ZeTime expect the steps in 100 increment int calories = activityUser.getCaloriesBurntGoal(); int distance = activityUser.getDistanceGoalMeters() / 1000; // ZeTime only accepts km goals - int sleep = activityUser.getSleepDurationGoal(); + int sleep = Math.round(activityUser.getSleepDurationGoal() / 60.0f); int activeTime = activityUser.getActiveTimeGoalMinutes(); // set steps goal diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DashboardUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DashboardUtils.java index 6a86f9bb8d..22821ecf1c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DashboardUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DashboardUtils.java @@ -135,7 +135,7 @@ public class DashboardUtils { public static float getSleepMinutesGoalFactor(DashboardFragment.DashboardData dashboardData) { ActivityUser activityUser = new ActivityUser(); - int sleepMinutesGoal = activityUser.getSleepDurationGoal() * 60; + int sleepMinutesGoal = activityUser.getSleepDurationGoal(); float goalFactor = (float) getSleepMinutesTotal(dashboardData) / sleepMinutesGoal; if (goalFactor > 1) goalFactor = 1; diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a59bbfb5e2..c55e605086 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1312,7 +1312,7 @@ Authentication required Authentication failed, please check auth key Authentication key negotiation failed - Preferred sleep duration in hours + Preferred sleep duration in minutes Hardware revision: %1$s Firmware version: %1$s Error creating directory for log files: %1$s @@ -2817,11 +2817,8 @@ Use the buttons below to align the watch hands to 12:00. Lorem Ipsum - %d hour - %d hours - %d hours - %d hours - %d hours + %1$d:%2$02d hour + %1$d:%2$02d hours Automatic light Longer light duration diff --git a/app/src/main/res/xml/about_user.xml b/app/src/main/res/xml/about_user.xml index 497029d752..5e37d6f11f 100644 --- a/app/src/main/res/xml/about_user.xml +++ b/app/src/main/res/xml/about_user.xml @@ -78,9 +78,9 @@