From afb6639d76e8690bca5ab47269ac1c0275e2fc64 Mon Sep 17 00:00:00 2001 From: androiddevkkotlin Date: Sun, 29 Nov 2020 21:43:48 +0200 Subject: [PATCH] Second dialog --- .../RouteOptionsBottomSheet.java | 79 ++++-- .../ElevationDateBottomSheet.java | 234 ++++++++++-------- .../SingleSelectPreferenceBottomSheet.java | 2 +- .../fragments/RouteParametersFragment.java | 37 +-- 4 files changed, 209 insertions(+), 143 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java index d2f01fe4c2..4c54fa47b0 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java @@ -45,14 +45,15 @@ import net.osmand.plus.routepreparationmenu.RoutingOptionsHelper.TimeConditional import net.osmand.plus.routing.RouteProvider; import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.settings.backend.ApplicationMode; +import net.osmand.plus.settings.backend.CommonPreference; import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.settings.bottomsheets.ElevationDateBottomSheet; import net.osmand.plus.settings.fragments.BaseSettingsFragment; import net.osmand.router.GeneralRouter; +import net.osmand.router.GeneralRouter.RoutingParameter; import net.osmand.util.Algorithms; import java.io.File; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -73,13 +74,16 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { @ColorRes private int selectedModeColorId; private boolean currentMuteState; + private boolean currentUseHeightState; private MapActivity mapActivity; - StateChangedListener voiceMuteChangeListener; + private CommonPreference useHeightPref; + private StateChangedListener voiceMuteChangeListener; + private StateChangedListener useHeightChangeListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - app = getMyApplication(); + app = requiredMyApplication(); settings = app.getSettings(); routingHelper = app.getRoutingHelper(); routingOptionsHelper = app.getRoutingOptionsHelper(); @@ -92,16 +96,13 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { updateWhenMuteChanged(); } }; - } - - public void updateWhenMuteChanged() { - if (app != null) { - boolean changedState = app.getSettings().VOICE_MUTE.getModeValue(applicationMode); - if (changedState != currentMuteState) { - currentMuteState = changedState; - updateParameters(); + useHeightChangeListener = new StateChangedListener() { + @Override + public void stateChanged(Boolean change) { + updateWhenUseHeightChanged(); } - } + }; + useHeightPref = settings.getCustomRoutingBooleanProperty(USE_HEIGHT_OBSTACLES, false); } @Override @@ -144,12 +145,17 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { itemWithCompoundButton.setChecked(itemWithCompoundButton.isChecked()); } } + currentUseHeightState = useHeightPref.getModeValue(applicationMode); + currentMuteState = app.getSettings().VOICE_MUTE.getModeValue(applicationMode); + + useHeightPref.addListener(useHeightChangeListener); app.getSettings().VOICE_MUTE.addListener(voiceMuteChangeListener); } @Override public void onPause() { super.onPause(); + useHeightPref.removeListener(useHeightChangeListener); app.getSettings().VOICE_MUTE.removeListener(voiceMuteChangeListener); } @@ -172,6 +178,24 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { } } + public void updateWhenMuteChanged() { + boolean changedState = app.getSettings().VOICE_MUTE.getModeValue(applicationMode); + if (changedState != currentMuteState) { + currentMuteState = changedState; + updateParameters(); + updateMenu(); + } + } + + public void updateWhenUseHeightChanged() { + boolean changedState = useHeightPref.getModeValue(applicationMode); + if (changedState != currentUseHeightState) { + currentUseHeightState = changedState; + updateParameters(); + updateMenu(); + } + } + private BaseBottomSheetItem createMuteSoundItem(final LocalRoutingParameter optionsItem) { boolean active = !routingHelper.getVoiceRouter().isMuteForMode(applicationMode); int selectedModeColor = ContextCompat.getColor(app, selectedModeColorId); @@ -437,27 +461,17 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { builder.setLayoutId(R.layout.bottom_sheet_item_with_switch_56dp); if (parameter.routingParameter != null && parameter.routingParameter.getId().equals(GeneralRouter.USE_SHORTEST_WAY)) { // if short route settings - it should be inverse of fast_route_mode - builder.setChecked(!settings.FAST_ROUTE_MODE.getModeValue(routingHelper.getAppMode())); + builder.setChecked(!settings.FAST_ROUTE_MODE.getModeValue(applicationMode)); } else { builder.setChecked(parameter.isSelected(settings)); } - builder.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - GeneralRouter router = app.getRouter(applicationMode); - List reliefFactorParameters = new ArrayList(); - Map parameters = router.getParameters(); - for (Map.Entry e : parameters.entrySet()) { - GeneralRouter.RoutingParameter routingParameter = e.getValue(); - if (RELIEF_SMOOTHNESS_FACTOR.equals(routingParameter.getGroup())) { - reliefFactorParameters.add(routingParameter); - } - } - if (!reliefFactorParameters.isEmpty() && parameter.getKey().equals(USE_HEIGHT_OBSTACLES)) { - FragmentManager fragmentManager = getFragmentManager(); - if (fragmentManager != null) { - ElevationDateBottomSheet.showInstance(fragmentManager, reliefFactorParameters, applicationMode, RouteOptionsBottomSheet.this, false); + if (USE_HEIGHT_OBSTACLES.equals(parameter.getKey()) && hasReliefParameters()) { + FragmentManager fm = getFragmentManager(); + if (fm != null) { + ElevationDateBottomSheet.showInstance(fm, applicationMode, RouteOptionsBottomSheet.this, false); } } else { applyParameter(item[0], parameter); @@ -473,6 +487,17 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { } } + private boolean hasReliefParameters() { + Map parameters = app.getRouter(applicationMode).getParameters(); + for (Map.Entry e : parameters.entrySet()) { + RoutingParameter routingParameter = e.getValue(); + if (RELIEF_SMOOTHNESS_FACTOR.equals(routingParameter.getGroup())) { + return true; + } + } + return false; + } + private void applyParameter(BottomSheetItemWithCompoundButton bottomSheetItem, LocalRoutingParameter parameter) { routingOptionsHelper.addNewRouteMenuParameter(applicationMode, parameter); boolean selected = !parameter.isSelected(settings); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java index 49785bda09..7bc449448c 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java @@ -4,6 +4,7 @@ import android.content.Context; import android.os.Bundle; import android.view.View; +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -18,172 +19,210 @@ import net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton; import net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem; import net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem; -import net.osmand.plus.routing.RoutingHelper; import net.osmand.plus.settings.backend.ApplicationMode; -import net.osmand.plus.settings.backend.BooleanPreference; +import net.osmand.plus.settings.backend.CommonPreference; +import net.osmand.plus.settings.fragments.ApplyQueryType; import net.osmand.plus.settings.fragments.BaseSettingsFragment; -import net.osmand.plus.settings.fragments.OnPreferenceChanged; +import net.osmand.plus.settings.fragments.OnConfirmPreferenceChange; import net.osmand.router.GeneralRouter.RoutingParameter; import org.apache.commons.logging.Log; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import static net.osmand.AndroidUtils.createCheckedColorStateList; import static net.osmand.plus.settings.bottomsheets.BooleanPreferenceBottomSheet.getCustomButtonView; import static net.osmand.plus.settings.bottomsheets.BooleanPreferenceBottomSheet.updateCustomButtonView; -import static net.osmand.plus.settings.fragments.RouteParametersFragment.setRoutingParameterSelected; +import static net.osmand.plus.settings.fragments.BaseSettingsFragment.APP_MODE_KEY; +import static net.osmand.plus.settings.fragments.RouteParametersFragment.RELIEF_SMOOTHNESS_FACTOR; +import static net.osmand.plus.settings.fragments.RouteParametersFragment.getRoutingParameterTitle; +import static net.osmand.plus.settings.fragments.RouteParametersFragment.isRoutingParameterSelected; +import static net.osmand.plus.settings.fragments.RouteParametersFragment.updateSelectedParameters; import static net.osmand.router.GeneralRouter.USE_HEIGHT_OBSTACLES; public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment { public static final String TAG = ElevationDateBottomSheet.class.getSimpleName(); - private static final Log LOG = PlatformUtil.getLog(ElevationDateBottomSheet.class); private OsmandApplication app; private ApplicationMode appMode; - private List reliefFactorParameters = new ArrayList(); - private static final String SELECTED_ENTRY_INDEX_KEY = "selected_entry_index_key"; + private List parameters; + private CommonPreference useHeightPref; + + private BottomSheetItemWithCompoundButton useHeightButton; + private List reliefFactorButtons = new ArrayList<>(); - private final List reliefFactorButtons = new ArrayList<>(); private int selectedEntryIndex = -1; - public void setAppMode(ApplicationMode appMode) { - this.appMode = appMode; - } + private String on; + private String off; + private int activeColor; + private int disabledColor; + private int appModeColor; - public ApplicationMode getAppMode() { - return appMode != null ? appMode : app.getSettings().getApplicationMode(); + @Override + public void onCreate(Bundle savedInstanceState) { + app = requiredMyApplication(); + if (savedInstanceState != null) { + appMode = ApplicationMode.valueOfStringKey(savedInstanceState.getString(APP_MODE_KEY), null); + } + super.onCreate(savedInstanceState); + + Map routingParameterMap = app.getRouter(appMode).getParameters(); + RoutingParameter parameter = routingParameterMap.get(USE_HEIGHT_OBSTACLES); + if (parameter != null) { + useHeightPref = app.getSettings().getCustomRoutingBooleanProperty(parameter.getId(), parameter.getDefaultBoolean()); + } else { + useHeightPref = app.getSettings().getCustomRoutingBooleanProperty(USE_HEIGHT_OBSTACLES, false); + } + parameters = getReliefParametersForMode(routingParameterMap); + for (int i = 0; i < parameters.size(); i++) { + if (isRoutingParameterSelected(app.getSettings(), appMode, parameters.get(i))) { + selectedEntryIndex = i; + } + } } @Override public void createMenuItems(Bundle savedInstanceState) { - app = requiredMyApplication(); - Context ctx = requireContext(); + Context themedCtx = UiUtilities.getThemedContext(requireContext(), nightMode); + + on = getString(R.string.shared_string_enable); + off = getString(R.string.shared_string_disable); + appModeColor = appMode.getIconColorInfo().getColor(nightMode); + activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic); + disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); + + items.add(new TitleItem(getString(R.string.routing_attr_height_obstacles_name))); + + createUseHeightButton(themedCtx); + int contentPaddingSmall = getResources().getDimensionPixelSize(R.dimen.content_padding_small); + items.add(new DividerSpaceItem(app, contentPaddingSmall)); + items.add(new LongDescriptionItem(getString(R.string.elevation_data))); + items.add(new DividerSpaceItem(app, contentPaddingSmall)); - final BooleanPreference pref = (BooleanPreference) app.getSettings().getCustomRoutingBooleanProperty(USE_HEIGHT_OBSTACLES, false); + createReliefFactorButtons(themedCtx); + } - Context themedCtx = UiUtilities.getThemedContext(ctx, nightMode); - - final String on = getString(R.string.shared_string_enable); - final String off = getString(R.string.shared_string_disable); - final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic); - final int disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); - if (savedInstanceState != null) { - selectedEntryIndex = savedInstanceState.getInt(SELECTED_ENTRY_INDEX_KEY); - } - boolean checked = pref.getModeValue(getAppMode()); - final BottomSheetItemWithCompoundButton[] preferenceBtn = new BottomSheetItemWithCompoundButton[1]; - preferenceBtn[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() + private void createUseHeightButton(Context context) { + boolean checked = useHeightPref.getModeValue(appMode); + useHeightButton = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() + .setCompoundButtonColorId(appModeColor) .setChecked(checked) .setTitle(checked ? on : off) .setTitleColorId(checked ? activeColor : disabledColor) - .setCustomView(getCustomButtonView(app, getAppMode(), checked, nightMode)) + .setCustomView(getCustomButtonView(app, appMode, checked, nightMode)) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - boolean newValue = !pref.getModeValue(getAppMode()); - enableItems(newValue); - Fragment targetFragment = getTargetFragment(); - pref.setModeValue(getAppMode(), newValue); + boolean newValue = !useHeightPref.getModeValue(appMode); + Fragment target = getTargetFragment(); + if (target instanceof OnConfirmPreferenceChange) { + OnConfirmPreferenceChange confirmInterface = (OnConfirmPreferenceChange) target; + if (confirmInterface.onConfirmPreferenceChange(useHeightPref.getId(), newValue, ApplyQueryType.NONE)) { + updateUseHeightButton(useHeightButton, newValue); - preferenceBtn[0].setTitle(newValue ? on : off); - preferenceBtn[0].setChecked(newValue); - preferenceBtn[0].setTitleColorId(newValue ? activeColor : disabledColor); - updateCustomButtonView(app, getAppMode(), v, newValue, nightMode); - - if (targetFragment instanceof OnPreferenceChanged) { - ((OnPreferenceChanged) targetFragment).onPreferenceChanged(pref.getId()); - } - if (targetFragment instanceof BaseSettingsFragment) { - ((BaseSettingsFragment) targetFragment).updateSetting(pref.getId()); + if (target instanceof BaseSettingsFragment) { + ((BaseSettingsFragment) target).updateSetting(useHeightPref.getId()); + } + } + } else { + useHeightPref.setModeValue(appMode, newValue); + updateUseHeightButton(useHeightButton, newValue); } } - }) - .create(); - preferenceBtn[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode)); - items.add(new TitleItem(getString(R.string.routing_attr_height_obstacles_name))); - items.add(preferenceBtn[0]); - items.add(new DividerSpaceItem(getMyApplication(), contentPaddingSmall)); - items.add(new LongDescriptionItem(getString(R.string.elevation_data))); - items.add(new DividerSpaceItem(getMyApplication(), contentPaddingSmall)); + }).create(); + items.add(useHeightButton); + } - for (int i = 0; i < reliefFactorParameters.size(); i++) { - RoutingParameter parameter = reliefFactorParameters.get(i); + private void updateUseHeightButton(BottomSheetItemWithCompoundButton button, boolean newValue) { + enableDisableReliefButtons(newValue); + button.setTitle(newValue ? on : off); + button.setChecked(newValue); + button.setTitleColorId(newValue ? activeColor : disabledColor); + updateCustomButtonView(app, appMode, button.getView(), newValue, nightMode); + } + + private void createReliefFactorButtons(Context context) { + for (int i = 0; i < parameters.size(); i++) { + RoutingParameter parameter = parameters.get(i); final BottomSheetItemWithCompoundButton[] preferenceItem = new BottomSheetItemWithCompoundButton[1]; preferenceItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() .setChecked(i == selectedEntryIndex) - .setButtonTintList(AndroidUtils.createCheckedColorStateList(ctx, R.color.icon_color_default_light, getAppMode().getIconColorInfo().getColor(nightMode))) + .setButtonTintList(createCheckedColorStateList(context, R.color.icon_color_default_light, appModeColor)) .setTitle(getRoutingParameterTitle(app, parameter)) - .setTag(i) .setLayoutId(R.layout.bottom_sheet_item_with_radio_btn_left) + .setTag(i) .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { selectedEntryIndex = (int) preferenceItem[0].getTag(); if (selectedEntryIndex >= 0) { - RoutingParameter parameter = reliefFactorParameters.get(selectedEntryIndex); - - String selectedParameterId = parameter.getId(); - for (RoutingParameter p : reliefFactorParameters) { - String parameterId = p.getId(); - setRoutingParameterSelected(app.getSettings(), appMode, parameterId, p.getDefaultBoolean(), parameterId.equals(selectedParameterId)); - } - recalculateRoute(); - - Fragment targetFragment = getTargetFragment(); - if (targetFragment instanceof OnPreferenceChanged) { - ((OnPreferenceChanged) targetFragment).onPreferenceChanged(pref.getId()); - } + RoutingParameter parameter = parameters.get(selectedEntryIndex); + updateSelectedParameters(app, appMode, parameters, parameter.getId()); } - updateItems(); + updateReliefButtons(); } - }) - .create(); - reliefFactorButtons.add(preferenceItem[0]); + }).create(); items.add(preferenceItem[0]); + reliefFactorButtons.add(preferenceItem[0]); } } - private void recalculateRoute() { - RoutingHelper routingHelper = app.getRoutingHelper(); - if (getAppMode().equals(routingHelper.getAppMode()) - && (routingHelper.isRouteCalculated() || routingHelper.isRouteBeingCalculated())) { - routingHelper.recalculateRouteDueToSettingsChange(); + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString(APP_MODE_KEY, appMode.getStringKey()); + } + + @Override + public void onResume() { + super.onResume(); + updateReliefButtons(); + enableDisableReliefButtons(useHeightButton.isChecked()); + } + + @Override + protected boolean isNightMode(@NonNull OsmandApplication app) { + if (usedOnMap) { + return app.getDaynightHelper().isNightModeForMapControlsForProfile(appMode); + } else { + return !app.getSettings().isLightContentForMode(appMode); } } - private String getRoutingParameterTitle(Context context, RoutingParameter parameter) { - return AndroidUtils.getRoutingStringPropertyName(context, parameter.getId(), parameter.getName()); - } - - private void updateItems() { - for (BaseBottomSheetItem item : reliefFactorButtons) { - if (item instanceof BottomSheetItemWithCompoundButton) { - boolean checked = item.getTag().equals(selectedEntryIndex); - ((BottomSheetItemWithCompoundButton) item).setChecked(checked); + private List getReliefParametersForMode(Map parameters) { + List reliefParameters = new ArrayList<>(); + for (RoutingParameter routingParameter : parameters.values()) { + if (RELIEF_SMOOTHNESS_FACTOR.equals(routingParameter.getGroup())) { + reliefParameters.add(routingParameter); } } + return reliefParameters; } - private void enableItems(boolean enable) { - for (BaseBottomSheetItem item : reliefFactorButtons) { - if (item instanceof BottomSheetItemWithCompoundButton) { - item.getView().setEnabled(enable); - } + private void updateReliefButtons() { + for (BottomSheetItemWithCompoundButton item : reliefFactorButtons) { + item.setChecked(item.getTag().equals(selectedEntryIndex)); } } - public static void showInstance(FragmentManager fm, List reliefFactorParameters, - ApplicationMode appMode, Fragment target, boolean usedOnMap) { + private void enableDisableReliefButtons(boolean enable) { + for (BaseBottomSheetItem item : reliefFactorButtons) { + item.getView().setEnabled(enable); + } + } + + public static void showInstance(FragmentManager fm, ApplicationMode appMode, Fragment target, boolean usedOnMap) { try { - if (fm.findFragmentByTag(ElevationDateBottomSheet.TAG) == null) { + if (!fm.isStateSaved() && fm.findFragmentByTag(ElevationDateBottomSheet.TAG) == null) { ElevationDateBottomSheet fragment = new ElevationDateBottomSheet(); - fragment.setAppMode(appMode); + fragment.appMode = appMode; fragment.setUsedOnMap(usedOnMap); - fragment.reliefFactorParameters.addAll(reliefFactorParameters); fragment.setTargetFragment(target, 0); fragment.show(fm, ScreenTimeoutBottomSheet.TAG); } @@ -191,5 +230,4 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment { LOG.error("showInstance", e); } } -} - +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java index c7ee2da9df..dc673207b2 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java @@ -26,7 +26,7 @@ public class SingleSelectPreferenceBottomSheet extends BasePreferenceBottomSheet public static final String TAG = SingleSelectPreferenceBottomSheet.class.getSimpleName(); - private static final String SELECTED_ENTRY_INDEX_KEY = "selected_entry_index_key"; + public static final String SELECTED_ENTRY_INDEX_KEY = "selected_entry_index_key"; private static final String USE_COLLAPSIBLE_DESCRIPTION = "use_collapsible_description"; private static final int COLLAPSED_DESCRIPTION_LINES = 4; diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java index 223ad25083..f763d99896 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java @@ -90,13 +90,13 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP booleanRoutingPrefListener = new StateChangedListener() { @Override public void stateChanged(Boolean change) { - recalculateRoute(); + recalculateRoute(app, getSelectedAppMode()); } }; customRoutingPrefListener = new StateChangedListener() { @Override public void stateChanged(String change) { - recalculateRoute(); + recalculateRoute(app, getSelectedAppMode()); } }; } @@ -391,7 +391,7 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP FragmentManager fragmentManager = getFragmentManager(); if (fragmentManager != null) { ApplicationMode appMode = getSelectedAppMode(); - ElevationDateBottomSheet.showInstance(fragmentManager, reliefFactorParameters, appMode, this, false); + ElevationDateBottomSheet.showInstance(fragmentManager, appMode, this, false); } } else { super.onDisplayPreferenceDialog(preference); @@ -534,14 +534,8 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP @Override public void onApplyPreferenceChange(String prefId, boolean applyToAllProfiles, Object newValue) { if ((RELIEF_SMOOTHNESS_FACTOR.equals(prefId) || DRIVING_STYLE.equals(prefId)) && newValue instanceof String) { - ApplicationMode appMode = getSelectedAppMode(); - String selectedParameterId = (String) newValue; List routingParameters = DRIVING_STYLE.equals(prefId) ? drivingStyleParameters : reliefFactorParameters; - for (RoutingParameter p : routingParameters) { - String parameterId = p.getId(); - setRoutingParameterSelected(settings, appMode, parameterId, p.getDefaultBoolean(), parameterId.equals(selectedParameterId)); - } - recalculateRoute(); + updateSelectedParameters(app, getSelectedAppMode(), routingParameters, (String) newValue); } else if (ROUTING_SHORT_WAY.equals(prefId) && newValue instanceof Boolean) { applyPreference(ROUTING_SHORT_WAY, applyToAllProfiles, newValue); applyPreference(settings.FAST_ROUTE_MODE.getId(), applyToAllProfiles, !(Boolean) newValue); @@ -568,7 +562,7 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP @Override public void onPreferenceChanged(String prefId) { if (AVOID_ROUTING_PARAMETER_PREFIX.equals(prefId) || PREFER_ROUTING_PARAMETER_PREFIX.equals(prefId)) { - recalculateRoute(); + recalculateRoute(app, getSelectedAppMode()); } } @@ -632,9 +626,9 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP return multiSelectPref; } - private void recalculateRoute() { + private static void recalculateRoute(OsmandApplication app, ApplicationMode mode) { RoutingHelper routingHelper = app.getRoutingHelper(); - if (getSelectedAppMode().equals(routingHelper.getAppMode()) + if (mode.equals(routingHelper.getAppMode()) && (routingHelper.isRouteCalculated() || routingHelper.isRouteBeingCalculated())) { routingHelper.recalculateRouteDueToSettingsChange(); } @@ -648,11 +642,11 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP otherRoutingParameters.clear(); } - private String getRoutingParameterTitle(Context context, RoutingParameter parameter) { + public static String getRoutingParameterTitle(Context context, RoutingParameter parameter) { return AndroidUtils.getRoutingStringPropertyName(context, parameter.getId(), parameter.getName()); } - private boolean isRoutingParameterSelected(OsmandSettings settings, ApplicationMode mode, RoutingParameter parameter) { + public static boolean isRoutingParameterSelected(OsmandSettings settings, ApplicationMode mode, RoutingParameter parameter) { CommonPreference property = settings.getCustomRoutingBooleanProperty(parameter.getId(), parameter.getDefaultBoolean()); if (mode != null) { return property.getModeValue(mode); @@ -661,8 +655,17 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP } } - public static void setRoutingParameterSelected(OsmandSettings settings, ApplicationMode mode, - String parameterId, boolean defaultBoolean, boolean isChecked) { + public static void updateSelectedParameters(OsmandApplication app, ApplicationMode mode, + List parameters, String selectedParameterId) { + for (RoutingParameter p : parameters) { + String parameterId = p.getId(); + setRoutingParameterSelected(app.getSettings(), mode, parameterId, p.getDefaultBoolean(), parameterId.equals(selectedParameterId)); + } + recalculateRoute(app, mode); + } + + private static void setRoutingParameterSelected(OsmandSettings settings, ApplicationMode mode, + String parameterId, boolean defaultBoolean, boolean isChecked) { CommonPreference property = settings.getCustomRoutingBooleanProperty(parameterId, defaultBoolean); if (mode != null) { property.setModeValue(mode, isChecked);