Fix app mode params migration
This commit is contained in:
parent
366c6657b7
commit
440411001e
3 changed files with 61 additions and 47 deletions
|
@ -621,7 +621,7 @@ public class ApplicationMode {
|
|||
return order;
|
||||
}
|
||||
|
||||
public void setOrder(OsmandApplication app, int order) {
|
||||
public void setOrder(int order) {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
|
@ -637,15 +637,17 @@ public class ApplicationMode {
|
|||
private static void initModesParams(OsmandApplication app) {
|
||||
OsmandSettings settings = app.getSettings();
|
||||
for (ApplicationMode mode : allPossibleValues()) {
|
||||
mode.routingProfile = settings.ROUTING_PROFILE.getModeValue(mode);
|
||||
mode.routeService = settings.ROUTE_SERVICE.getModeValue(mode);
|
||||
mode.defaultSpeed = settings.DEFAULT_SPEED.getModeValue(mode);
|
||||
updateAppModeIcon(app, settings.ICON_RES_NAME.getModeValue(mode), mode);
|
||||
mode.iconColor = settings.ICON_COLOR.getModeValue(mode);
|
||||
mode.minDistanceForTurn = settings.MIN_DISTANCE_FOR_TURN.getModeValue(mode);
|
||||
mode.arrivalDistance = settings.ARRIVAL_DISTANCE.getModeValue(mode);
|
||||
mode.offRouteDistance = settings.OFF_ROUTE_DISTANCE.getModeValue(mode);
|
||||
mode.userProfileName = settings.USER_PROFILE_NAME.getModeValue(mode);
|
||||
mode.navigationIcon = settings.NAVIGATION_ICON.getModeValue(mode);
|
||||
mode.locationIcon = settings.LOCATION_ICON.getModeValue(mode);
|
||||
// mode.order = settings.APP_MODE_ORDER.getModeValue(mode);
|
||||
mode.iconColor = settings.ICON_COLOR.getModeValue(mode);
|
||||
updateAppModeIcon(app, settings.ICON_RES_NAME.getModeValue(mode), mode);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -664,7 +666,7 @@ public class ApplicationMode {
|
|||
|
||||
private static void updateAppModesOrder(OsmandApplication app) {
|
||||
for (int i = 0; i < values.size(); i++) {
|
||||
values.get(i).setOrder(app, i);
|
||||
values.get(i).setOrder(i);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -717,7 +719,6 @@ public class ApplicationMode {
|
|||
settings.USER_PROFILE_NAME.setModeValue(mode, modeBean.userProfileName);
|
||||
settings.ROUTING_PROFILE.setModeValue(mode, modeBean.routingProfile);
|
||||
settings.ROUTE_SERVICE.setModeValue(mode, modeBean.routeService);
|
||||
// settings.APP_MODE_ORDER.setModeValue(mode, modeBean.order);
|
||||
if (modeBean.locIcon != null) {
|
||||
settings.LOCATION_ICON.setModeValue(mode, modeBean.locIcon);
|
||||
}
|
||||
|
@ -738,50 +739,46 @@ public class ApplicationMode {
|
|||
Type t = new TypeToken<ArrayList<ApplicationModeBean>>() {
|
||||
}.getType();
|
||||
List<ApplicationModeBean> customProfiles = gson.fromJson(app.getSettings().CUSTOM_APP_PROFILES.get(), t);
|
||||
List<String> customModesKeys = new ArrayList<>();
|
||||
if (!Algorithms.isEmpty(customProfiles)) {
|
||||
for (ApplicationModeBean m : customProfiles) {
|
||||
customModesKeys.add(m.stringKey);
|
||||
ApplicationMode parentMode = valueOfStringKey(m.parent, CAR);
|
||||
createCustomMode(parentMode, m.userProfileName, m.stringKey)
|
||||
ApplicationModeBuilder builder = createCustomMode(parentMode, m.userProfileName, m.stringKey)
|
||||
.setRouteService(m.routeService)
|
||||
.setRoutingProfile(m.routingProfile)
|
||||
.icon(app, m.iconName)
|
||||
.setColor(m.iconColor)
|
||||
.locationIcon(m.locIcon)
|
||||
.navigationIcon(m.navIcon)
|
||||
.setOrder(m.order)
|
||||
.customReg();
|
||||
.setOrder(m.order);
|
||||
saveProfile(builder, app);
|
||||
}
|
||||
}
|
||||
settings.CUSTOM_APP_MODES_KEYS.set(gson.toJson(customModesKeys));
|
||||
settings.CUSTOM_APP_PROFILES.resetToDefault();
|
||||
}
|
||||
}
|
||||
|
||||
private static void saveAppModesToSettings(OsmandSettings settings) {
|
||||
List<ApplicationModeBean> modeBeans = createApplicationModeBeans(getCustomValues());
|
||||
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
|
||||
settings.CUSTOM_APP_PROFILES.set(gson.toJson(modeBeans));
|
||||
}
|
||||
|
||||
private static List<ApplicationModeBean> createApplicationModeBeans(List<ApplicationMode> applicationModes) {
|
||||
List<ApplicationModeBean> modeBeans = new ArrayList<>();
|
||||
for (ApplicationMode mode : applicationModes) {
|
||||
ApplicationModeBean mb = new ApplicationModeBean();
|
||||
mb.userProfileName = mode.userProfileName;
|
||||
mb.iconColor = mode.iconColor;
|
||||
mb.iconName = mode.iconResName;
|
||||
mb.parent = mode.parentAppMode != null ? mode.parentAppMode.getStringKey() : null;
|
||||
mb.stringKey = mode.stringKey;
|
||||
mb.routeService = mode.routeService;
|
||||
mb.routingProfile = mode.routingProfile;
|
||||
mb.order = mode.order;
|
||||
mb.locIcon = mode.locationIcon;
|
||||
mb.navIcon = mode.navigationIcon;
|
||||
modeBeans.add(mb);
|
||||
if (settings.CUSTOM_APP_MODES_KEYS.isSet()) {
|
||||
Set<String> customModesKeys = settings.getCustomAppModesKeys();
|
||||
for (String appModeKey : customModesKeys) {
|
||||
Object profilePreferences = settings.getProfilePreferences(appModeKey);
|
||||
String parent = settings.PARENT_APP_MODE.getValue(profilePreferences, null);
|
||||
String userProfileName = settings.USER_PROFILE_NAME.getValue(profilePreferences, "");
|
||||
createCustomMode(valueOfStringKey(parent, CAR), userProfileName, appModeKey).customReg();
|
||||
}
|
||||
}
|
||||
return modeBeans;
|
||||
}
|
||||
|
||||
private static boolean saveCustomAppModesToSettings(OsmandSettings settings) {
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
Iterator<ApplicationMode> it = ApplicationMode.getCustomValues().iterator();
|
||||
while (it.hasNext()) {
|
||||
stringBuilder.append(it.next().getStringKey());
|
||||
if (it.hasNext()) {
|
||||
stringBuilder.append(",");
|
||||
}
|
||||
}
|
||||
if (!stringBuilder.toString().equals(settings.CUSTOM_APP_MODES_KEYS.get())) {
|
||||
return settings.CUSTOM_APP_MODES_KEYS.set(stringBuilder.toString());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static ApplicationMode saveProfile(ApplicationModeBuilder builder, OsmandApplication app) {
|
||||
|
@ -799,9 +796,9 @@ public class ApplicationMode {
|
|||
mode.setIconColor(app, builder.applicationMode.iconColor);
|
||||
mode.setLocationIcon(app, builder.applicationMode.locationIcon);
|
||||
mode.setNavigationIcon(app, builder.applicationMode.navigationIcon);
|
||||
mode.setOrder(app, builder.applicationMode.order);
|
||||
mode.setOrder(builder.applicationMode.order);
|
||||
|
||||
saveAppModesToSettings(app.getSettings());
|
||||
saveCustomAppModesToSettings(app.getSettings());
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
@ -818,7 +815,7 @@ public class ApplicationMode {
|
|||
settings.APPLICATION_MODE.resetToDefault();
|
||||
}
|
||||
cachedFilteredValues.removeAll(modes);
|
||||
saveAppModesToSettings(app.getSettings());
|
||||
saveCustomAppModesToSettings(app.getSettings());
|
||||
}
|
||||
|
||||
public static boolean changeProfileAvailability(ApplicationMode mode, boolean isSelected, OsmandApplication app) {
|
||||
|
|
|
@ -30,9 +30,6 @@ import net.osmand.map.ITileSource;
|
|||
import net.osmand.map.TileSourceManager;
|
||||
import net.osmand.map.TileSourceManager.TileSourceTemplate;
|
||||
import net.osmand.osm.io.NetworkUtils;
|
||||
import net.osmand.plus.profiles.LocationIcon;
|
||||
import net.osmand.plus.profiles.NavigationIcon;
|
||||
import net.osmand.plus.profiles.ProfileIconColors;
|
||||
import net.osmand.plus.access.AccessibilityMode;
|
||||
import net.osmand.plus.access.RelativeDirectionStyle;
|
||||
import net.osmand.plus.api.SettingsAPI;
|
||||
|
@ -42,6 +39,9 @@ import net.osmand.plus.dialogs.RateUsBottomSheetDialogFragment;
|
|||
import net.osmand.plus.helpers.SearchHistoryHelper;
|
||||
import net.osmand.plus.mapillary.MapillaryPlugin;
|
||||
import net.osmand.plus.mapmarkers.CoordinateInputFormats.Format;
|
||||
import net.osmand.plus.profiles.LocationIcon;
|
||||
import net.osmand.plus.profiles.NavigationIcon;
|
||||
import net.osmand.plus.profiles.ProfileIconColors;
|
||||
import net.osmand.plus.render.RendererRegistry;
|
||||
import net.osmand.plus.routing.RouteProvider.RouteService;
|
||||
import net.osmand.plus.voice.CommandPlayer;
|
||||
|
@ -218,11 +218,16 @@ public class OsmandSettings {
|
|||
}
|
||||
|
||||
public static String getSharedPreferencesName(ApplicationMode mode) {
|
||||
String modeKey = mode != null ? mode.getStringKey() : null;
|
||||
return getSharedPreferencesNameForKey(modeKey);
|
||||
}
|
||||
|
||||
public static String getSharedPreferencesNameForKey(String modeKey) {
|
||||
String sharedPreferencesName = !Algorithms.isEmpty(CUSTOM_SHARED_PREFERENCES_NAME) ? CUSTOM_SHARED_PREFERENCES_NAME : SHARED_PREFERENCES_NAME;
|
||||
if (mode == null) {
|
||||
if (modeKey == null) {
|
||||
return sharedPreferencesName;
|
||||
} else {
|
||||
return sharedPreferencesName + "." + mode.getStringKey().toLowerCase();
|
||||
return sharedPreferencesName + "." + modeKey.toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -301,6 +306,10 @@ public class OsmandSettings {
|
|||
return settingsAPI.getPreferenceObject(getSharedPreferencesName(mode));
|
||||
}
|
||||
|
||||
public Object getProfilePreferences(String modeKey) {
|
||||
return settingsAPI.getPreferenceObject(getSharedPreferencesNameForKey(modeKey));
|
||||
}
|
||||
|
||||
public OsmandPreference getPreference(String key) {
|
||||
return registeredPreferences.get(key);
|
||||
}
|
||||
|
@ -1560,8 +1569,6 @@ public class OsmandSettings {
|
|||
LOCATION_ICON.setModeDefaultValue(ApplicationMode.SKI, LocationIcon.BICYCLE);
|
||||
}
|
||||
|
||||
// public final CommonPreference<Integer> APP_MODE_ORDER = new IntPreference("app_mode_order", 0).makeProfile().cache();
|
||||
|
||||
public final OsmandPreference<Float> SWITCH_MAP_DIRECTION_TO_COMPASS =
|
||||
new FloatPreference("speed_for_map_to_direction_of_movement", 0f).makeProfile();
|
||||
|
||||
|
@ -3392,6 +3399,16 @@ public class OsmandSettings {
|
|||
public final CommonPreference<String> CUSTOM_APP_MODES_KEYS =
|
||||
new StringPreference("custom_app_modes_keys", "").makeGlobal().cache();
|
||||
|
||||
public Set<String> getCustomAppModesKeys() {
|
||||
String appModesKeys = CUSTOM_APP_MODES_KEYS.get();
|
||||
StringTokenizer toks = new StringTokenizer(appModesKeys, ",");
|
||||
Set<String> res = new LinkedHashSet<String>();
|
||||
while (toks.hasMoreTokens()) {
|
||||
res.add(toks.nextToken());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public enum DayNightMode {
|
||||
AUTO(R.string.daynight_mode_auto, R.drawable.ic_action_map_sunset),
|
||||
DAY(R.string.daynight_mode_day, R.drawable.ic_action_map_day),
|
||||
|
|
|
@ -166,7 +166,7 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
|
|||
if (order == null) {
|
||||
order = mode.getOrder();
|
||||
}
|
||||
mode.setOrder(app, order);
|
||||
mode.setOrder(order);
|
||||
}
|
||||
ApplicationMode.reorderAppModes(app);
|
||||
mapActivity.onBackPressed();
|
||||
|
|
Loading…
Reference in a new issue