Merge pull request #8369 from osmandapp/preferences_improvements

Fix creating custom modes
This commit is contained in:
max-klaus 2020-01-31 18:30:57 +03:00 committed by GitHub
commit a7a39bf821
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 13 deletions

View file

@ -520,9 +520,9 @@ public class ApplicationMode {
String parent = settings.PARENT_APP_MODE.getValue(profilePreferences, null); String parent = settings.PARENT_APP_MODE.getValue(profilePreferences, null);
int order = settings.APP_MODE_ORDER.getValue(profilePreferences, values.size()); int order = settings.APP_MODE_ORDER.getValue(profilePreferences, values.size());
ApplicationModeBuilder builder = createCustomMode(valueOfStringKey(parent, CAR), appModeKey); ApplicationModeBuilder builder = createCustomMode(valueOfStringKey(parent, CAR), appModeKey, app);
builder.setOrder(order); builder.setOrder(order);
builder.customReg(app); builder.customReg();
} }
} }
@ -573,7 +573,7 @@ public class ApplicationMode {
mode.setNavigationIcon(builder.navigationIcon); mode.setNavigationIcon(builder.navigationIcon);
mode.setOrder(builder.order); mode.setOrder(builder.order);
} else { } else {
mode = builder.customReg(app); mode = builder.customReg();
initRegVisibility(); initRegVisibility();
} }
reorderAppModes(); reorderAppModes();
@ -586,8 +586,8 @@ public class ApplicationMode {
return gson.fromJson(json, ApplicationModeBean.class); return gson.fromJson(json, ApplicationModeBean.class);
} }
public static ApplicationModeBuilder fromModeBean(ApplicationModeBean modeBean) { public static ApplicationModeBuilder fromModeBean(OsmandApplication app, ApplicationModeBean modeBean) {
ApplicationModeBuilder builder = createCustomMode(valueOfStringKey(modeBean.parent, null), modeBean.stringKey); ApplicationModeBuilder builder = createCustomMode(valueOfStringKey(modeBean.parent, null), modeBean.stringKey, app);
builder.setUserProfileName(modeBean.userProfileName); builder.setUserProfileName(modeBean.userProfileName);
builder.setIconResName(modeBean.iconName); builder.setIconResName(modeBean.iconName);
builder.setIconColor(modeBean.iconColor); builder.setIconColor(modeBean.iconColor);
@ -667,8 +667,10 @@ public class ApplicationMode {
return builder; return builder;
} }
public static ApplicationModeBuilder createCustomMode(ApplicationMode parent, String stringKey) { public static ApplicationModeBuilder createCustomMode(ApplicationMode parent, String stringKey, OsmandApplication app) {
return create(parent, -1, stringKey); ApplicationModeBuilder builder = create(parent, -1, stringKey);
builder.getApplicationMode().app = app;
return builder;
} }
public static class ApplicationModeBuilder { public static class ApplicationModeBuilder {
@ -694,11 +696,9 @@ public class ApplicationMode {
return applicationMode; return applicationMode;
} }
private ApplicationMode customReg(OsmandApplication app) { private ApplicationMode customReg() {
values.add(applicationMode); values.add(applicationMode);
applicationMode.app = app;
ApplicationMode parent = applicationMode.parentAppMode; ApplicationMode parent = applicationMode.parentAppMode;
applicationMode.minDistanceForTurn = parent.minDistanceForTurn; applicationMode.minDistanceForTurn = parent.minDistanceForTurn;
applicationMode.arrivalDistance = parent.arrivalDistance; applicationMode.arrivalDistance = parent.arrivalDistance;

View file

@ -35,6 +35,7 @@ import net.osmand.map.TileSourceManager;
import net.osmand.map.TileSourceManager.TileSourceTemplate; import net.osmand.map.TileSourceManager.TileSourceTemplate;
import net.osmand.osm.io.NetworkUtils; import net.osmand.osm.io.NetworkUtils;
import net.osmand.plus.ApplicationMode.ApplicationModeBean; import net.osmand.plus.ApplicationMode.ApplicationModeBean;
import net.osmand.plus.ApplicationMode.ApplicationModeBuilder;
import net.osmand.plus.access.AccessibilityMode; import net.osmand.plus.access.AccessibilityMode;
import net.osmand.plus.access.RelativeDirectionStyle; import net.osmand.plus.access.RelativeDirectionStyle;
import net.osmand.plus.api.SettingsAPI; import net.osmand.plus.api.SettingsAPI;
@ -292,7 +293,8 @@ public class OsmandSettings {
List<ApplicationModeBean> customProfiles = gson.fromJson(json, t); List<ApplicationModeBean> customProfiles = gson.fromJson(json, t);
if (!Algorithms.isEmpty(customProfiles)) { if (!Algorithms.isEmpty(customProfiles)) {
for (ApplicationModeBean modeBean : customProfiles) { for (ApplicationModeBean modeBean : customProfiles) {
ApplicationMode.saveProfile(ApplicationMode.fromModeBean(modeBean), ctx); ApplicationModeBuilder builder = ApplicationMode.fromModeBean(ctx, modeBean);
ApplicationMode.saveProfile(builder, ctx);
} }
} }
} }

View file

@ -446,7 +446,7 @@ public class SettingsHelper {
void readFromJson(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException { void readFromJson(@NonNull OsmandApplication app, @NonNull JSONObject json) throws JSONException {
String appModeJson = json.getString("appMode"); String appModeJson = json.getString("appMode");
modeBean = ApplicationMode.fromJson(appModeJson); modeBean = ApplicationMode.fromJson(appModeJson);
builder = ApplicationMode.fromModeBean(modeBean); builder = ApplicationMode.fromModeBean(app, modeBean);
ApplicationMode appMode = builder.getApplicationMode(); ApplicationMode appMode = builder.getApplicationMode();
if (!appMode.isCustomProfile()) { if (!appMode.isCustomProfile()) {
appMode = ApplicationMode.valueOfStringKey(appMode.getStringKey(), appMode); appMode = ApplicationMode.valueOfStringKey(appMode.getStringKey(), appMode);

View file

@ -655,7 +655,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment {
} }
if (isNew) { if (isNew) {
ApplicationMode.ApplicationModeBuilder builder = ApplicationMode ApplicationMode.ApplicationModeBuilder builder = ApplicationMode
.createCustomMode(changedProfile.parent, changedProfile.stringKey) .createCustomMode(changedProfile.parent, changedProfile.stringKey, app)
.setIconResName(ProfileIcons.getResStringByResId(changedProfile.iconRes)) .setIconResName(ProfileIcons.getResStringByResId(changedProfile.iconRes))
.setUserProfileName(changedProfile.name.trim()) .setUserProfileName(changedProfile.name.trim())
.setRoutingProfile(changedProfile.routingProfile) .setRoutingProfile(changedProfile.routingProfile)