mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-22 14:13:45 +00:00
[routing] Avoid paved roads
Signed-off-by: x7z4w <x7z4w@noreply.codeberg.org>
This commit is contained in:
@@ -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<>();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,6 +59,28 @@
|
||||
android:padding="@dimen/margin_half_double_plus"/>
|
||||
</LinearLayout>
|
||||
<include layout="@layout/item_divider"/>
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:minHeight="@dimen/height_block_base"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingEnd="@dimen/margin_base"
|
||||
android:paddingStart="@dimen/margin_base">
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:text="@string/avoid_paved"
|
||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||
android:layout_width="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:textColor="?android:attr/textColorPrimary"/>
|
||||
<androidx.appcompat.widget.SwitchCompat
|
||||
android:id="@+id/avoid_paved_roads_btn"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="@dimen/margin_half_double_plus"/>
|
||||
</LinearLayout>
|
||||
<include layout="@layout/item_divider"/>
|
||||
<LinearLayout
|
||||
android:orientation="horizontal"
|
||||
android:minHeight="@dimen/height_block_base"
|
||||
|
||||
@@ -677,6 +677,7 @@
|
||||
<string name="avoid_ferry">Avoid ferries</string>
|
||||
<string name="avoid_motorways">Avoid freeways</string>
|
||||
<string name="avoid_steps">Avoid stairs</string>
|
||||
<string name="avoid_paved">Avoid paved roads</string>
|
||||
<string name="unable_to_calc_alert_title">Unable to calculate route</string>
|
||||
<string name="unable_to_calc_alert_subtitle">A route could not be found. This may be caused by your routing options or incomplete OpenStreetMap data. Please change your routing options and retry.</string>
|
||||
<string name="define_to_avoid_btn">Define roads to avoid</string>
|
||||
|
||||
@@ -7,5 +7,6 @@ public enum RoadType
|
||||
Motorway,
|
||||
Ferry,
|
||||
Dirty,
|
||||
Steps
|
||||
Steps,
|
||||
Paved
|
||||
}
|
||||
|
||||
@@ -36,6 +36,10 @@ void RoutingOptions::SaveCarOptionsToSettings(RoutingOptions options)
|
||||
|
||||
void RoutingOptions::Add(RoutingOptions::Road type)
|
||||
{
|
||||
if (type == RoutingOptions::Road::Paved)
|
||||
Remove(RoutingOptions::Road::Dirty);
|
||||
else if (type == RoutingOptions::Road::Dirty)
|
||||
Remove(RoutingOptions::Road::Paved);
|
||||
m_options |= static_cast<RoadType>(type);
|
||||
}
|
||||
|
||||
@@ -67,7 +71,9 @@ RoutingOptionsClassifier::RoutingOptionsClassifier()
|
||||
{{"psurface", "unpaved_bad"}, RoutingOptions::Road::Dirty},
|
||||
{{"psurface", "unpaved_good"}, RoutingOptions::Road::Dirty},
|
||||
{{"highway", "steps"}, RoutingOptions::Road::Steps},
|
||||
{{"highway", "ladder"}, RoutingOptions::Road::Steps}};
|
||||
{{"highway", "ladder"}, RoutingOptions::Road::Steps},
|
||||
{{"psurface", "paved_good"}, RoutingOptions::Road::Paved},
|
||||
{{"psurface", "paved_bad"}, RoutingOptions::Road::Paved}};
|
||||
|
||||
m_data.Reserve(std::size(types));
|
||||
for (auto const & data : types)
|
||||
@@ -108,6 +114,9 @@ RoutingOptions::Road ChooseMainRoutingOptionRoad(RoutingOptions options, bool is
|
||||
if (options.Has(RoutingOptions::Road::Steps))
|
||||
return RoutingOptions::Road::Steps;
|
||||
|
||||
if (options.Has(RoutingOptions::Road::Paved))
|
||||
return RoutingOptions::Road::Paved;
|
||||
|
||||
return RoutingOptions::Road::Usual;
|
||||
}
|
||||
|
||||
@@ -132,6 +141,7 @@ string DebugPrint(RoutingOptions const & routingOptions)
|
||||
append(RoutingOptions::Road::Ferry);
|
||||
append(RoutingOptions::Road::Dirty);
|
||||
append(RoutingOptions::Road::Steps);
|
||||
append(RoutingOptions::Road::Paved);
|
||||
|
||||
if (wasAppended)
|
||||
ss << " | ";
|
||||
@@ -150,6 +160,7 @@ string DebugPrint(RoutingOptions::Road type)
|
||||
case RoutingOptions::Road::Ferry: return "ferry";
|
||||
case RoutingOptions::Road::Dirty: return "dirty";
|
||||
case RoutingOptions::Road::Steps: return "steps";
|
||||
case RoutingOptions::Road::Paved: return "paved";
|
||||
case RoutingOptions::Road::Usual: return "usual";
|
||||
case RoutingOptions::Road::Max: return "max";
|
||||
}
|
||||
|
||||
@@ -19,8 +19,9 @@ public:
|
||||
Ferry = 1u << 3,
|
||||
Dirty = 1u << 4,
|
||||
Steps = 1u << 5,
|
||||
Paved = 1u << 6,
|
||||
|
||||
Max = (1u << 5) + 1
|
||||
Max = (1u << 6) + 1
|
||||
};
|
||||
|
||||
using RoadType = std::underlying_type_t<Road>;
|
||||
|
||||
Reference in New Issue
Block a user