[routing] Avoid paved roads

Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
This commit is contained in:
x7z4w
2025-09-26 13:20:57 +00:00
committed by Yannik Bloscheck
parent a4909a0554
commit 90c12003bd
7 changed files with 80 additions and 10 deletions

View File

@@ -32,7 +32,8 @@ public class DrivingOptionsScreen extends BaseMapScreen
new DrivingOption(RoadType.Dirty, R.string.avoid_unpaved),
new DrivingOption(RoadType.Ferry, R.string.avoid_ferry),
new DrivingOption(RoadType.Motorway, R.string.avoid_motorways),
new DrivingOption(RoadType.Steps, R.string.avoid_steps)};
new DrivingOption(RoadType.Steps, R.string.avoid_steps),
new DrivingOption(RoadType.Paved, R.string.avoid_paved)};
@NonNull
private final Map<RoadType, Boolean> mInitialDrivingOptionsState = new HashMap<>();

View File

@@ -90,28 +90,36 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
{
SwitchCompat tollsBtn = root.findViewById(R.id.avoid_tolls_btn);
tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll));
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll);
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll, root);
tollsBtn.setOnCheckedChangeListener(tollBtnListener);
SwitchCompat motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn);
motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway));
CompoundButton.OnCheckedChangeListener motorwayBtnListener = new ToggleRoutingOptionListener(RoadType.Motorway);
CompoundButton.OnCheckedChangeListener motorwayBtnListener =
new ToggleRoutingOptionListener(RoadType.Motorway, root);
motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener);
SwitchCompat ferriesBtn = root.findViewById(R.id.avoid_ferries_btn);
ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry));
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry);
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry, root);
ferriesBtn.setOnCheckedChangeListener(ferryBtnListener);
SwitchCompat dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn);
dirtyRoadsBtn.setChecked(RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty);
dirtyRoadsBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Paved) || RoutingOptions.hasOption(RoadType.Dirty));
CompoundButton.OnCheckedChangeListener dirtyBtnListener = new ToggleRoutingOptionListener(RoadType.Dirty, root);
dirtyRoadsBtn.setOnCheckedChangeListener(dirtyBtnListener);
SwitchCompat stepsBtn = root.findViewById(R.id.avoid_steps_btn);
stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps));
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps);
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps, root);
stepsBtn.setOnCheckedChangeListener(stepsBtnListener);
SwitchCompat pavedBtn = root.findViewById(R.id.avoid_paved_roads_btn);
pavedBtn.setChecked(RoutingOptions.hasOption(RoadType.Paved));
pavedBtn.setEnabled(!RoutingOptions.hasOption(RoadType.Dirty) || RoutingOptions.hasOption(RoadType.Paved));
CompoundButton.OnCheckedChangeListener pavedBtnListener = new ToggleRoutingOptionListener(RoadType.Paved, root);
pavedBtn.setOnCheckedChangeListener(pavedBtnListener);
}
private static class ToggleRoutingOptionListener implements CompoundButton.OnCheckedChangeListener
@@ -119,9 +127,13 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
@NonNull
private final RoadType mRoadType;
private ToggleRoutingOptionListener(@NonNull RoadType roadType)
@NonNull
private final View mRoot;
private ToggleRoutingOptionListener(@NonNull RoadType roadType, @NonNull View root)
{
mRoadType = roadType;
mRoot = root;
}
@Override
@@ -131,6 +143,27 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
RoutingOptions.addOption(mRoadType);
else
RoutingOptions.removeOption(mRoadType);
SwitchCompat dirtyRoadsBtn = mRoot.findViewById(R.id.avoid_dirty_roads_btn);
SwitchCompat pavedBtn = mRoot.findViewById(R.id.avoid_paved_roads_btn);
if (mRoadType == RoadType.Dirty)
{
pavedBtn.setEnabled(!isChecked);
if (isChecked)
{
pavedBtn.setChecked(false);
dirtyRoadsBtn.setEnabled(true);
}
}
else if (mRoadType == RoadType.Paved)
{
dirtyRoadsBtn.setEnabled(!isChecked);
if (isChecked)
{
dirtyRoadsBtn.setChecked(false);
pavedBtn.setEnabled(true);
}
}
}
}
}