mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Introduce GBPrefsMigrator
This commit is contained in:
@@ -89,7 +89,7 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.Weather;
|
||||
import nodomain.freeyourgadget.gadgetbridge.model.weather.WeatherCacheManager;
|
||||
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55;
|
||||
import nodomain.freeyourgadget.gadgetbridge.prefs.GBPrefsMigrator;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.NotificationCollectorMonitorService;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.BondingUtil;
|
||||
@@ -118,9 +118,6 @@ public class GBApplication extends Application {
|
||||
private static final Lock dbLock = new ReentrantLock();
|
||||
private static DeviceService deviceService;
|
||||
private static SharedPreferences sharedPrefs;
|
||||
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 LimitedQueue<Integer, String> mIDSenderLookup = new LimitedQueue<>(16);
|
||||
private static GBPrefs prefs;
|
||||
@@ -294,13 +291,7 @@ public class GBApplication extends Application {
|
||||
// slf4j may be implicitly initialized before we properly configured it.
|
||||
setupLogging(isFileLoggingEnabled());
|
||||
|
||||
if (getPrefsFileVersion() != CURRENT_PREFS_VERSION) {
|
||||
migratePrefs(getPrefsFileVersion());
|
||||
}
|
||||
|
||||
// Uncomment the line below to force a device key migration, after you updated
|
||||
// the devicetype.json file
|
||||
//migrateDeviceTypes();
|
||||
migratePrefsIfNeeded();
|
||||
|
||||
setupExceptionHandler(prefs.getBoolean("crash_notification", isDebug()));
|
||||
|
||||
@@ -743,25 +734,9 @@ public class GBApplication extends Application {
|
||||
return result;
|
||||
}
|
||||
|
||||
private int getPrefsFileVersion() {
|
||||
try {
|
||||
return Integer.parseInt(sharedPrefs.getString(PREFS_VERSION, "0")); //0 is legacy
|
||||
} catch (Exception e) {
|
||||
//in version 1 this was an int
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
protected void migratePrefs(int oldVersion) {
|
||||
SharedPreferences.Editor editor = sharedPrefs.edit();
|
||||
|
||||
if (oldVersion < 55) {
|
||||
new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor);
|
||||
}
|
||||
|
||||
editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION));
|
||||
editor.apply();
|
||||
protected void migratePrefsIfNeeded() {
|
||||
GBPrefsMigrator.migratePrefsIfNeeded(sharedPrefs);
|
||||
}
|
||||
|
||||
public static SharedPreferences getDeviceSpecificSharedPrefs(CharSequence deviceIdentifier) {
|
||||
|
||||
+2
-1
@@ -7,13 +7,14 @@ import androidx.preference.PreferenceCategory
|
||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication
|
||||
import nodomain.freeyourgadget.gadgetbridge.R
|
||||
import nodomain.freeyourgadget.gadgetbridge.activities.debug.preferences.PreferenceManagerActivity
|
||||
import nodomain.freeyourgadget.gadgetbridge.prefs.GBPrefsMigrator
|
||||
|
||||
class PreferencesDebugFragment : AbstractDebugFragment() {
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.debug_preferences_preferences, rootKey)
|
||||
|
||||
findPreference<Preference>(PREF_DEBUG_PREFERENCES_VERSION)!!.summary = GBApplication.getPrefs().getString(
|
||||
GBApplication.PREFS_VERSION,
|
||||
GBPrefsMigrator.PREFS_VERSION,
|
||||
getString(R.string.unknown)
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package nodomain.freeyourgadget.gadgetbridge.prefs;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.Log;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.prefs.migrators.PreferenceMigrator55;
|
||||
|
||||
public class GBPrefsMigrator {
|
||||
private static final String TAG = "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;
|
||||
|
||||
public static void migratePrefsIfNeeded(final SharedPreferences sharedPrefs) {
|
||||
final int oldVersion = getPrefsFileVersion(sharedPrefs);
|
||||
if (oldVersion != CURRENT_PREFS_VERSION) {
|
||||
Log.i(TAG, "Migrating preferences from " + oldVersion + " to " + CURRENT_PREFS_VERSION);
|
||||
|
||||
final SharedPreferences.Editor editor = sharedPrefs.edit();
|
||||
|
||||
// Create new migrator classes as needed, one per version
|
||||
if (oldVersion < 55) {
|
||||
new PreferenceMigrator55().migrate(oldVersion, sharedPrefs, editor);
|
||||
}
|
||||
|
||||
editor.putString(PREFS_VERSION, Integer.toString(CURRENT_PREFS_VERSION));
|
||||
editor.apply();
|
||||
}
|
||||
}
|
||||
|
||||
private static int getPrefsFileVersion(final SharedPreferences sharedPrefs) {
|
||||
try {
|
||||
return Integer.parseInt(sharedPrefs.getString(PREFS_VERSION, "0")); //0 is legacy
|
||||
} catch (final Exception e) {
|
||||
//in version 1 this was an int
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,7 @@ import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||
|
||||
public class GBTestApplication extends GBApplication {
|
||||
@Override
|
||||
protected void migratePrefs(final int oldVersion) {
|
||||
protected void migratePrefsIfNeeded() {
|
||||
// In tests, do not migrate preferences
|
||||
// FIXME: This is not ideal. In tests, do not migrate preferences. We should be able to initialize
|
||||
// the database before the application is created so that this works and is actually testable., but
|
||||
|
||||
Reference in New Issue
Block a user