From 22a9ad329ed624738768909e5bdb0f6c18eeda63 Mon Sep 17 00:00:00 2001 From: vanous Date: Sun, 29 May 2022 21:18:53 +0200 Subject: [PATCH] FitPro: fix crash, inactivity warning preference to string, after type enforcement in 3b348a5d5 --- .../gadgetbridge/GBApplication.java | 21 ++++++++++++++++++- .../DeviceSettingsPreferenceConst.java | 1 + .../DeviceSpecificSettingsFragment.java | 1 + .../devices/fitpro/FitProDeviceSupport.java | 4 ++-- .../devicesettings_inactivity_extended.xml | 2 +- 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index 085370cb4..24aae687b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -117,7 +117,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 = 14; + private static final int CURRENT_PREFS_VERSION = 15; private static LimitedQueue mIDSenderLookup = new LimitedQueue(16); private static Prefs prefs; @@ -1143,6 +1143,25 @@ public class GBApplication extends Application { } } + if (oldVersion < 15) { + try (DBHandler db = acquireDB()) { + final DaoSession daoSession = db.getDaoSession(); + final List activeDevices = DBHelper.getActiveDevices(daoSession); + + for (Device dbDevice : activeDevices) { + final SharedPreferences deviceSharedPrefs = GBApplication.getDeviceSpecificSharedPrefs(dbDevice.getIdentifier()); + final SharedPreferences.Editor deviceSharedPrefsEdit = deviceSharedPrefs.edit(); + + if (DeviceType.FITPRO.equals(dbDevice.getType())) { + editor.remove("inactivity_warnings_threshold"); + deviceSharedPrefsEdit.apply(); + } + } + } catch (Exception e) { + Log.w(TAG, "error acquiring DB lock"); + } + } + editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION)); editor.apply(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java index 495a92f7c..36f6638a9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java @@ -77,6 +77,7 @@ public class DeviceSettingsPreferenceConst { public static final String PREF_INACTIVITY_START = "inactivity_warnings_start"; public static final String PREF_INACTIVITY_END = "inactivity_warnings_end"; public static final String PREF_INACTIVITY_THRESHOLD = "inactivity_warnings_threshold"; + public static final String PREF_INACTIVITY_THRESHOLD_EXTENDED = "inactivity_warnings_threshold_extended"; public static final String PREF_INACTIVITY_MO = "inactivity_warnings_mo"; public static final String PREF_INACTIVITY_TU = "inactivity_warnings_tu"; public static final String PREF_INACTIVITY_WE = "inactivity_warnings_we"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java index efe23cbca..53808daff 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSpecificSettingsFragment.java @@ -429,6 +429,7 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat imp addPreferenceHandlerFor(PREF_INACTIVITY_START); addPreferenceHandlerFor(PREF_INACTIVITY_END); addPreferenceHandlerFor(PREF_INACTIVITY_THRESHOLD); + addPreferenceHandlerFor(PREF_INACTIVITY_THRESHOLD_EXTENDED); addPreferenceHandlerFor(PREF_INACTIVITY_MO); addPreferenceHandlerFor(PREF_INACTIVITY_TU); addPreferenceHandlerFor(PREF_INACTIVITY_WE); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java index 63596edfa..a35bfabca 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/fitpro/FitProDeviceSupport.java @@ -543,7 +543,7 @@ public class FitProDeviceSupport extends AbstractBTLEDeviceSupport { case DeviceSettingsPreferenceConst.PREF_LANGUAGE: setLanguage(builder); break; - case DeviceSettingsPreferenceConst.PREF_INACTIVITY_THRESHOLD: + case DeviceSettingsPreferenceConst.PREF_INACTIVITY_THRESHOLD_EXTENDED: case DeviceSettingsPreferenceConst.PREF_INACTIVITY_ENABLE: case DeviceSettingsPreferenceConst.PREF_INACTIVITY_START: case DeviceSettingsPreferenceConst.PREF_INACTIVITY_END: @@ -1148,7 +1148,7 @@ public class FitProDeviceSupport extends AbstractBTLEDeviceSupport { if (prefLongsitSwitch) { - String inactivity = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getString(DeviceSettingsPreferenceConst.PREF_INACTIVITY_THRESHOLD, "4"); + String inactivity = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getString(DeviceSettingsPreferenceConst.PREF_INACTIVITY_THRESHOLD_EXTENDED, "4"); String start = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getString(DeviceSettingsPreferenceConst.PREF_INACTIVITY_START, "08:00"); String end = GBApplication.getDeviceSpecificSharedPrefs(gbDevice.getAddress()).getString(DeviceSettingsPreferenceConst.PREF_INACTIVITY_END, "16:00"); Calendar startCalendar = GregorianCalendar.getInstance(); diff --git a/app/src/main/res/xml/devicesettings_inactivity_extended.xml b/app/src/main/res/xml/devicesettings_inactivity_extended.xml index 7063b8572..766e865ab 100644 --- a/app/src/main/res/xml/devicesettings_inactivity_extended.xml +++ b/app/src/main/res/xml/devicesettings_inactivity_extended.xml @@ -21,7 +21,7 @@ android:dependency="inactivity_warnings_enable" android:entries="@array/inactivity_minutes" android:entryValues="@array/inactivity_minutes_values" - android:key="inactivity_warnings_threshold" + android:key="inactivity_warnings_threshold_extended" android:summary="@string/mi2_prefs_inactivity_warnings_summary" android:title="@string/mi2_prefs_inactivity_warnings_threshold" />