From 878d20e9e787602088b2a141a9c742ca7041a1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Fri, 13 Feb 2026 19:03:29 +0000 Subject: [PATCH] Cmf Nothing Watch Pro: Fix default activity kinds --- .../cmfwatchpro/CmfWatchProCoordinator.java | 2 +- .../gadgetbridge/prefs/GBPrefsMigrator.java | 8 ++-- .../prefs/migrators/PreferenceMigrator56.java | 42 +++++++++++++++++++ app/src/main/res/values/arrays.xml | 10 ++--- ... => devicesettings_cmf_activity_types.xml} | 6 +-- .../cmfwatchpro/CmfActivityTypeTest.java | 33 +++++++++++++++ 6 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator56.java rename app/src/main/res/xml/{devicesettings_workout_activity_types.xml => devicesettings_cmf_activity_types.xml} (74%) create mode 100644 app/src/test/java/nodomain/freeyourgadget/gadgetbridge/service/devices/cmfwatchpro/CmfActivityTypeTest.java diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cmfwatchpro/CmfWatchProCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cmfwatchpro/CmfWatchProCoordinator.java index baf679d146..7628b484a8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cmfwatchpro/CmfWatchProCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/cmfwatchpro/CmfWatchProCoordinator.java @@ -301,7 +301,7 @@ public class CmfWatchProCoordinator extends AbstractBLEDeviceCoordinator { dateTime.add(R.xml.devicesettings_timeformat); final List display = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.DISPLAY); - display.add(R.xml.devicesettings_workout_activity_types); + display.add(R.xml.devicesettings_cmf_activity_types); display.add(R.xml.devicesettings_liftwrist_display_noshed); final List health = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH); 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 79e637aa24..4dcc6a8d3e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/GBPrefsMigrator.java @@ -6,6 +6,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55; +import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator56; public class GBPrefsMigrator { private static final Logger LOG = LoggerFactory.getLogger(GBPrefsMigrator.class); @@ -13,7 +14,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 = 55; + private static final int CURRENT_PREFS_VERSION = 56; public static void migratePrefsIfNeeded(final SharedPreferences sharedPrefs) { final int oldVersion = getPrefsFileVersion(sharedPrefs); @@ -23,9 +24,8 @@ public class GBPrefsMigrator { final SharedPreferences.Editor editor = sharedPrefs.edit(); // Create new migrator classes as needed, one per version - 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); editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION)); editor.apply(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator56.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator56.java new file mode 100644 index 0000000000..7c769aba90 --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/prefs/migrators/PreferenceMigrator56.java @@ -0,0 +1,42 @@ +package nodomain.freeyourgadget.gadgetbridge.prefs.migrators; + +import android.content.SharedPreferences; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; + +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; +import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; +import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; +import nodomain.freeyourgadget.gadgetbridge.entities.Device; +import nodomain.freeyourgadget.gadgetbridge.prefs.AbstractPreferenceMigrator; + +public class PreferenceMigrator56 extends AbstractPreferenceMigrator { + private static final Logger LOG = LoggerFactory.getLogger(PreferenceMigrator56.class); + + @Override + public void migrate(final int oldVersion, final SharedPreferences sharedPrefs, final SharedPreferences.Editor editor) { + try (DBHandler db = GBApplication.acquireDB()) { + final DaoSession daoSession = db.getDaoSession(); + final List activeDevices = DBHelper.getActiveDevices(daoSession); + for (final Device dbDevice : activeDevices) { + if (dbDevice.getTypeName().startsWith("NOTHING_CMF_WATCH_PRO")) { + // The defaults were not valid CmfActivityType values, which would crash on connection for users + // that only opened the preference screen without ever changing them + final SharedPreferences deviceSpecificSharedPrefs = GBApplication.getDeviceSpecificSharedPrefs(dbDevice.getIdentifier()); + final String activityTypes = deviceSpecificSharedPrefs.getString("workout_activity_types_sortable", ""); + if ("indoor_run,outdoor_run".equals(activityTypes)) { + deviceSpecificSharedPrefs.edit() + .putString("workout_activity_types_sortable", "indoor_running,outdoor_running") + .apply(); + } + } + } + } catch (final Exception e) { + LOG.error("Failed to migrate prefs to version 56", e); + } + } +} diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 94e17cfdd6..d8de24c8d4 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1496,7 +1496,7 @@ indoor_ice_skating - + @string/activity_type_indoor_running @string/activity_type_outdoor_running @string/activity_type_outdoor_walking @@ -1619,7 +1619,7 @@ @string/activity_type_parkour - + indoor_running outdoor_running outdoor_walking @@ -1742,9 +1742,9 @@ parkour - - indoor_run - outdoor_run + + indoor_running + outdoor_running diff --git a/app/src/main/res/xml/devicesettings_workout_activity_types.xml b/app/src/main/res/xml/devicesettings_cmf_activity_types.xml similarity index 74% rename from app/src/main/res/xml/devicesettings_workout_activity_types.xml rename to app/src/main/res/xml/devicesettings_cmf_activity_types.xml index 5213d34e26..39bf6d9ee3 100644 --- a/app/src/main/res/xml/devicesettings_workout_activity_types.xml +++ b/app/src/main/res/xml/devicesettings_cmf_activity_types.xml @@ -2,10 +2,10 @@