mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Cmf Nothing Watch Pro: Fix default activity kinds
This commit is contained in:
+1
-1
@@ -301,7 +301,7 @@ public class CmfWatchProCoordinator extends AbstractBLEDeviceCoordinator {
|
||||
dateTime.add(R.xml.devicesettings_timeformat);
|
||||
|
||||
final List<Integer> 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<Integer> health = deviceSpecificSettings.addRootScreen(DeviceSpecificSettingsScreen.HEALTH);
|
||||
|
||||
@@ -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();
|
||||
|
||||
+42
@@ -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<Device> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1496,7 +1496,7 @@
|
||||
<item>indoor_ice_skating</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_workout_activity_types">
|
||||
<string-array name="pref_cmf_activity_types">
|
||||
<item>@string/activity_type_indoor_running</item>
|
||||
<item>@string/activity_type_outdoor_running</item>
|
||||
<item>@string/activity_type_outdoor_walking</item>
|
||||
@@ -1619,7 +1619,7 @@
|
||||
<item>@string/activity_type_parkour</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_workout_activity_types_values">
|
||||
<string-array name="pref_cmf_activity_types_values">
|
||||
<item>indoor_running</item>
|
||||
<item>outdoor_running</item>
|
||||
<item>outdoor_walking</item>
|
||||
@@ -1742,9 +1742,9 @@
|
||||
<item>parkour</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_workout_activity_types_default">
|
||||
<item>indoor_run</item>
|
||||
<item>outdoor_run</item>
|
||||
<string-array name="pref_cmf_activity_types_default">
|
||||
<item>indoor_running</item>
|
||||
<item>outdoor_running</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="pref_withings_steel_activity_types">
|
||||
|
||||
+3
-3
@@ -2,10 +2,10 @@
|
||||
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<com.mobeta.android.dslv.DragSortListPreference
|
||||
android:icon="@drawable/ic_activity_unknown_small"
|
||||
android:defaultValue="@array/pref_workout_activity_types_default"
|
||||
android:defaultValue="@array/pref_cmf_activity_types_default"
|
||||
android:dialogTitle="@string/mi5_prefs_workout_activity_types"
|
||||
android:entries="@array/pref_workout_activity_types"
|
||||
android:entryValues="@array/pref_workout_activity_types_values"
|
||||
android:entries="@array/pref_cmf_activity_types"
|
||||
android:entryValues="@array/pref_cmf_activity_types_values"
|
||||
android:key="workout_activity_types_sortable"
|
||||
android:persistent="true"
|
||||
android:summary="@string/mi5_prefs_workout_activity_types_summary"
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.cmfwatchpro;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.R;
|
||||
import nodomain.freeyourgadget.gadgetbridge.test.TestBase;
|
||||
|
||||
public class CmfActivityTypeTest extends TestBase {
|
||||
@Test
|
||||
public void validPreferenceValues() {
|
||||
final String[] values = getContext().getResources().getStringArray(R.array.pref_cmf_activity_types_values);
|
||||
for (String value : values) {
|
||||
try {
|
||||
CmfActivityType.valueOf(value.toUpperCase(Locale.ROOT));
|
||||
} catch (final IllegalArgumentException e) {
|
||||
fail(String.format("%s is not a valid CmfActivityType", value));
|
||||
}
|
||||
}
|
||||
|
||||
final String[] defaults = getContext().getResources().getStringArray(R.array.pref_cmf_activity_types_default);
|
||||
for (String value : defaults) {
|
||||
try {
|
||||
CmfActivityType.valueOf(value.toUpperCase(Locale.ROOT));
|
||||
} catch (final IllegalArgumentException e) {
|
||||
fail(String.format("%s is not a valid CmfActivityType", value));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user