forked from upstream-mirrors/OpenTracks
Added profiles for custom layouts.
Users can add severals custom layouts and select one of them in recording fragment. The last selected layout is the one that will be use in the next recording. Fixes #938.
This commit is contained in:
@@ -1,34 +1,73 @@
|
||||
package de.dennisguse.opentracks.settings;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import de.dennisguse.opentracks.R;
|
||||
import de.dennisguse.opentracks.util.CsvLayoutUtils;
|
||||
|
||||
class PreferencesOpenHelper {
|
||||
|
||||
private static final int PREFERENCES_VERSION = 1;
|
||||
private final int version;
|
||||
|
||||
private PreferencesOpenHelper() {
|
||||
private PreferencesOpenHelper(int version) {
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
static PreferencesOpenHelper newInstance() {
|
||||
return new PreferencesOpenHelper();
|
||||
static PreferencesOpenHelper newInstance(int version) {
|
||||
return new PreferencesOpenHelper(version);
|
||||
}
|
||||
|
||||
void checkForUpgrade() {
|
||||
void check() {
|
||||
int lastVersion = PreferencesUtils.getInt(R.string.prefs_last_version_key, 0);
|
||||
if (PREFERENCES_VERSION > lastVersion) {
|
||||
if (version > lastVersion) {
|
||||
onUpgrade();
|
||||
} else if (version < lastVersion) {
|
||||
onDowngrade();
|
||||
}
|
||||
}
|
||||
|
||||
private void onUpgrade() {
|
||||
PreferencesUtils.setInt(R.string.prefs_last_version_key, PREFERENCES_VERSION);
|
||||
switch (PREFERENCES_VERSION) {
|
||||
case 1:
|
||||
upgradeFrom0to1();
|
||||
PreferencesUtils.setInt(R.string.prefs_last_version_key, version);
|
||||
for (int i = 1; i <= version; i++) {
|
||||
switch (i) {
|
||||
case 1:
|
||||
upgradeFrom0to1();
|
||||
break;
|
||||
case 2:
|
||||
upgradeFrom1to2();
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Not implemented: upgrade to " + version);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void upgradeFrom0to1() {
|
||||
PreferencesUtils.setString(R.string.stats_custom_layout_fields_key, PreferencesUtils.buildDefaultLayout());
|
||||
String preferenceValue = PreferencesUtils.getString(R.string.stats_custom_layouts_key, "");
|
||||
if (preferenceValue.isEmpty()) {
|
||||
PreferencesUtils.setString(R.string.stats_custom_layouts_key, PreferencesUtils.buildDefaultLayout());
|
||||
}
|
||||
}
|
||||
|
||||
private void upgradeFrom1to2() {
|
||||
String csvVersion1CustomLayout = PreferencesUtils.getString(R.string.stats_custom_layouts_key, PreferencesUtils.buildDefaultLayout());
|
||||
ArrayList<String> parts = new ArrayList<>();
|
||||
Collections.addAll(parts, csvVersion1CustomLayout.split(CsvLayoutUtils.ITEM_SEPARATOR));
|
||||
|
||||
if (parts.size() < 2) {
|
||||
PreferencesUtils.setString(R.string.stats_custom_layouts_key, PreferencesUtils.buildDefaultLayout());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!parts.get(1).matches("\\d+")) {
|
||||
parts.add(1, String.valueOf(PreferencesUtils.getLayoutColumnsByDefault()));
|
||||
}
|
||||
PreferencesUtils.setString(R.string.stats_custom_layouts_key, parts.stream().collect(Collectors.joining(CsvLayoutUtils.ITEM_SEPARATOR)));
|
||||
}
|
||||
|
||||
private void onDowngrade() {
|
||||
PreferencesUtils.setString(R.string.stats_custom_layouts_key, PreferencesUtils.buildDefaultLayout());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user