migrate "Only on Wifi" preference to "Over Wi-Fi" and "Over data"

This migrates the old "Only on Wifi" checkbox to something similar with the
new preferences layout.
This commit is contained in:
Hans-Christoph Steiner 2018-04-24 18:12:46 +02:00
parent 9c7d97a379
commit 94e5519d23
2 changed files with 42 additions and 9 deletions

View File

@ -1,5 +1,6 @@
package org.fdroid.fdroid;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
@ -193,14 +194,26 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
}
}
/**
* Migrate old preferences to new preferences. These need to be processed
* and committed before {@code preferences.xml} is loaded.
*/
@SuppressLint("ApplySharedPref")
public void migrateOldPreferences() {
SharedPreferences.Editor editor = preferences.edit();
if (migrateUpdateIntervalStringToInt(editor) || migrateOnlyOnWifi(editor)) {
editor.commit();
}
}
/**
* The original preference was a {@link String}, now it must be a {@link Integer}
* since {@link android.support.v7.preference.SeekBarPreference} uses it
* directly.
*/
public void migrateUpdateIntervalStringToInt() {
private boolean migrateUpdateIntervalStringToInt(SharedPreferences.Editor editor) {
if (!preferences.contains(OLD_PREF_UPDATE_INTERVAL)) {
return; // already completed
return false; // already completed
}
int updateInterval = DEFAULT_UPDATE_INTERVAL;
String value = preferences.getString(OLD_PREF_UPDATE_INTERVAL, String.valueOf(24));
@ -219,13 +232,33 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh
} else if ("0".equals(value)) { // never
updateInterval = 0;
}
// TODO migrate OLD_PREF_UPDATE_ON_WIFI_ONLY
preferences.edit()
editor
.putInt(PREF_UPDATE_INTERVAL, updateInterval)
.remove(OLD_PREF_UPDATE_INTERVAL)
.apply();
.remove(OLD_PREF_UPDATE_INTERVAL);
return true;
}
/**
* The original preference was just a "Only on Wifi" checkbox.
*/
private boolean migrateOnlyOnWifi(SharedPreferences.Editor editor) {
if (!preferences.contains(OLD_PREF_UPDATE_ON_WIFI_ONLY)) {
return false; // already completed
}
int wifi;
int data;
if (preferences.getBoolean(OLD_PREF_UPDATE_ON_WIFI_ONLY, true)) {
wifi = OVER_NETWORK_ALWAYS;
data = OVER_NETWORK_NEVER;
} else {
wifi = OVER_NETWORK_ALWAYS;
data = OVER_NETWORK_ON_DEMAND;
}
editor
.putInt(PREF_OVER_WIFI, wifi)
.putInt(PREF_OVER_DATA, data)
.remove(OLD_PREF_UPDATE_ON_WIFI_ONLY);
return true;
}
/**

View File

@ -79,7 +79,7 @@ public class PreferencesFragment extends PreferenceFragment
@Override
public void onCreatePreferences(Bundle bundle, String s) {
Preferences.get().migrateUpdateIntervalStringToInt();
Preferences.get().migrateOldPreferences();
addPreferencesFromResource(R.xml.preferences);
useTorCheckPref = (SwitchPreference) findPreference(Preferences.PREF_USE_TOR);