mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-22 22:23:44 +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.Dirty, R.string.avoid_unpaved),
|
||||||
new DrivingOption(RoadType.Ferry, R.string.avoid_ferry),
|
new DrivingOption(RoadType.Ferry, R.string.avoid_ferry),
|
||||||
new DrivingOption(RoadType.Motorway, R.string.avoid_motorways),
|
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
|
@NonNull
|
||||||
private final Map<RoadType, Boolean> mInitialDrivingOptionsState = new HashMap<>();
|
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);
|
SwitchCompat tollsBtn = root.findViewById(R.id.avoid_tolls_btn);
|
||||||
tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll));
|
tollsBtn.setChecked(RoutingOptions.hasOption(RoadType.Toll));
|
||||||
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll);
|
CompoundButton.OnCheckedChangeListener tollBtnListener = new ToggleRoutingOptionListener(RoadType.Toll, root);
|
||||||
tollsBtn.setOnCheckedChangeListener(tollBtnListener);
|
tollsBtn.setOnCheckedChangeListener(tollBtnListener);
|
||||||
|
|
||||||
SwitchCompat motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn);
|
SwitchCompat motorwaysBtn = root.findViewById(R.id.avoid_motorways_btn);
|
||||||
motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway));
|
motorwaysBtn.setChecked(RoutingOptions.hasOption(RoadType.Motorway));
|
||||||
CompoundButton.OnCheckedChangeListener motorwayBtnListener = new ToggleRoutingOptionListener(RoadType.Motorway);
|
CompoundButton.OnCheckedChangeListener motorwayBtnListener =
|
||||||
|
new ToggleRoutingOptionListener(RoadType.Motorway, root);
|
||||||
motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener);
|
motorwaysBtn.setOnCheckedChangeListener(motorwayBtnListener);
|
||||||
|
|
||||||
SwitchCompat ferriesBtn = root.findViewById(R.id.avoid_ferries_btn);
|
SwitchCompat ferriesBtn = root.findViewById(R.id.avoid_ferries_btn);
|
||||||
ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry));
|
ferriesBtn.setChecked(RoutingOptions.hasOption(RoadType.Ferry));
|
||||||
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry);
|
CompoundButton.OnCheckedChangeListener ferryBtnListener = new ToggleRoutingOptionListener(RoadType.Ferry, root);
|
||||||
ferriesBtn.setOnCheckedChangeListener(ferryBtnListener);
|
ferriesBtn.setOnCheckedChangeListener(ferryBtnListener);
|
||||||
|
|
||||||
SwitchCompat dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn);
|
SwitchCompat dirtyRoadsBtn = root.findViewById(R.id.avoid_dirty_roads_btn);
|
||||||
dirtyRoadsBtn.setChecked(RoutingOptions.hasOption(RoadType.Dirty));
|
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);
|
dirtyRoadsBtn.setOnCheckedChangeListener(dirtyBtnListener);
|
||||||
|
|
||||||
SwitchCompat stepsBtn = root.findViewById(R.id.avoid_steps_btn);
|
SwitchCompat stepsBtn = root.findViewById(R.id.avoid_steps_btn);
|
||||||
stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps));
|
stepsBtn.setChecked(RoutingOptions.hasOption(RoadType.Steps));
|
||||||
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps);
|
CompoundButton.OnCheckedChangeListener stepsBtnListener = new ToggleRoutingOptionListener(RoadType.Steps, root);
|
||||||
stepsBtn.setOnCheckedChangeListener(stepsBtnListener);
|
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
|
private static class ToggleRoutingOptionListener implements CompoundButton.OnCheckedChangeListener
|
||||||
@@ -119,9 +127,13 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
|
|||||||
@NonNull
|
@NonNull
|
||||||
private final RoadType mRoadType;
|
private final RoadType mRoadType;
|
||||||
|
|
||||||
private ToggleRoutingOptionListener(@NonNull RoadType roadType)
|
@NonNull
|
||||||
|
private final View mRoot;
|
||||||
|
|
||||||
|
private ToggleRoutingOptionListener(@NonNull RoadType roadType, @NonNull View root)
|
||||||
{
|
{
|
||||||
mRoadType = roadType;
|
mRoadType = roadType;
|
||||||
|
mRoot = root;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -131,6 +143,27 @@ public class DrivingOptionsFragment extends BaseMwmToolbarFragment
|
|||||||
RoutingOptions.addOption(mRoadType);
|
RoutingOptions.addOption(mRoadType);
|
||||||
else
|
else
|
||||||
RoutingOptions.removeOption(mRoadType);
|
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"/>
|
android:padding="@dimen/margin_half_double_plus"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<include layout="@layout/item_divider"/>
|
<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
|
<LinearLayout
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:minHeight="@dimen/height_block_base"
|
android:minHeight="@dimen/height_block_base"
|
||||||
|
|||||||
@@ -677,6 +677,7 @@
|
|||||||
<string name="avoid_ferry">Avoid ferries</string>
|
<string name="avoid_ferry">Avoid ferries</string>
|
||||||
<string name="avoid_motorways">Avoid freeways</string>
|
<string name="avoid_motorways">Avoid freeways</string>
|
||||||
<string name="avoid_steps">Avoid stairs</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_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="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>
|
<string name="define_to_avoid_btn">Define roads to avoid</string>
|
||||||
|
|||||||
@@ -7,5 +7,6 @@ public enum RoadType
|
|||||||
Motorway,
|
Motorway,
|
||||||
Ferry,
|
Ferry,
|
||||||
Dirty,
|
Dirty,
|
||||||
Steps
|
Steps,
|
||||||
|
Paved
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ void RoutingOptions::SaveCarOptionsToSettings(RoutingOptions options)
|
|||||||
|
|
||||||
void RoutingOptions::Add(RoutingOptions::Road type)
|
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);
|
m_options |= static_cast<RoadType>(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -67,7 +71,9 @@ RoutingOptionsClassifier::RoutingOptionsClassifier()
|
|||||||
{{"psurface", "unpaved_bad"}, RoutingOptions::Road::Dirty},
|
{{"psurface", "unpaved_bad"}, RoutingOptions::Road::Dirty},
|
||||||
{{"psurface", "unpaved_good"}, RoutingOptions::Road::Dirty},
|
{{"psurface", "unpaved_good"}, RoutingOptions::Road::Dirty},
|
||||||
{{"highway", "steps"}, RoutingOptions::Road::Steps},
|
{{"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));
|
m_data.Reserve(std::size(types));
|
||||||
for (auto const & data : types)
|
for (auto const & data : types)
|
||||||
@@ -108,6 +114,9 @@ RoutingOptions::Road ChooseMainRoutingOptionRoad(RoutingOptions options, bool is
|
|||||||
if (options.Has(RoutingOptions::Road::Steps))
|
if (options.Has(RoutingOptions::Road::Steps))
|
||||||
return RoutingOptions::Road::Steps;
|
return RoutingOptions::Road::Steps;
|
||||||
|
|
||||||
|
if (options.Has(RoutingOptions::Road::Paved))
|
||||||
|
return RoutingOptions::Road::Paved;
|
||||||
|
|
||||||
return RoutingOptions::Road::Usual;
|
return RoutingOptions::Road::Usual;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,6 +141,7 @@ string DebugPrint(RoutingOptions const & routingOptions)
|
|||||||
append(RoutingOptions::Road::Ferry);
|
append(RoutingOptions::Road::Ferry);
|
||||||
append(RoutingOptions::Road::Dirty);
|
append(RoutingOptions::Road::Dirty);
|
||||||
append(RoutingOptions::Road::Steps);
|
append(RoutingOptions::Road::Steps);
|
||||||
|
append(RoutingOptions::Road::Paved);
|
||||||
|
|
||||||
if (wasAppended)
|
if (wasAppended)
|
||||||
ss << " | ";
|
ss << " | ";
|
||||||
@@ -150,6 +160,7 @@ string DebugPrint(RoutingOptions::Road type)
|
|||||||
case RoutingOptions::Road::Ferry: return "ferry";
|
case RoutingOptions::Road::Ferry: return "ferry";
|
||||||
case RoutingOptions::Road::Dirty: return "dirty";
|
case RoutingOptions::Road::Dirty: return "dirty";
|
||||||
case RoutingOptions::Road::Steps: return "steps";
|
case RoutingOptions::Road::Steps: return "steps";
|
||||||
|
case RoutingOptions::Road::Paved: return "paved";
|
||||||
case RoutingOptions::Road::Usual: return "usual";
|
case RoutingOptions::Road::Usual: return "usual";
|
||||||
case RoutingOptions::Road::Max: return "max";
|
case RoutingOptions::Road::Max: return "max";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,9 @@ public:
|
|||||||
Ferry = 1u << 3,
|
Ferry = 1u << 3,
|
||||||
Dirty = 1u << 4,
|
Dirty = 1u << 4,
|
||||||
Steps = 1u << 5,
|
Steps = 1u << 5,
|
||||||
|
Paved = 1u << 6,
|
||||||
|
|
||||||
Max = (1u << 5) + 1
|
Max = (1u << 6) + 1
|
||||||
};
|
};
|
||||||
|
|
||||||
using RoadType = std::underlying_type_t<Road>;
|
using RoadType = std::underlying_type_t<Road>;
|
||||||
|
|||||||
Reference in New Issue
Block a user