From 58e99345a25dafdc9b78ef5a9f18100bdf6517f9 Mon Sep 17 00:00:00 2001 From: Roman Tsisyk Date: Wed, 6 Dec 2023 08:27:03 +0200 Subject: [PATCH] [android] Fix NPE in MwmActivity.showStartPointNotice() Reproduces when the back and start buttons are pressed at the same time. Fixes #6628 Signed-off-by: Roman Tsisyk --- android/app/src/main/java/app/organicmaps/MwmActivity.java | 5 ++++- .../app/organicmaps/routing/RoutingBottomMenuController.java | 5 ++++- .../java/app/organicmaps/routing/RoutingPlanController.java | 4 ++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 582d43c68e..4af8a69f2e 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -1674,6 +1674,9 @@ public class MwmActivity extends BaseMwmFragmentActivity { final RoutingController controller = RoutingController.get(); + if (showAddStartOrFinishFrame(controller, true)) + return false; + // Starting and ending points must be non-null, see {@link #showAddStartOrFinishFrame() }. final MapObject startPoint = Objects.requireNonNull(controller.getStartPoint()); if (startPoint.isMyPosition()) @@ -1705,7 +1708,7 @@ public class MwmActivity extends BaseMwmFragmentActivity Logger.d(LOCATION_TAG, "newMode = " + LocationState.nameOf(newMode)); mMapButtonsViewModel.setMyPositionMode(newMode); RoutingController controller = RoutingController.get(); - if (controller.isPlanning()) + if (controller.isPlanning() || controller.isBuilding() || controller.isErrorEncountered()) showAddStartOrFinishFrame(controller, true); if (newMode == FOLLOW || newMode == FOLLOW_AND_ROTATE) diff --git a/android/app/src/main/java/app/organicmaps/routing/RoutingBottomMenuController.java b/android/app/src/main/java/app/organicmaps/routing/RoutingBottomMenuController.java index a0e4868cc5..968b9147bb 100644 --- a/android/app/src/main/java/app/organicmaps/routing/RoutingBottomMenuController.java +++ b/android/app/src/main/java/app/organicmaps/routing/RoutingBottomMenuController.java @@ -284,7 +284,10 @@ final class RoutingBottomMenuController implements View.OnClickListener { mStart.setText(mContext.getText(R.string.p2p_start)); mStart.setOnClickListener(v -> { - if (mListener != null) + // Ignore the event if the back and start buttons are pressed at the same time. + // See {@link #RoutingPlanController.onUpClick()}. + // https://github.com/organicmaps/organicmaps/issues/6628 + if (mListener != null && RoutingController.get().isPlanning()) mListener.onRoutingStart(); }); } diff --git a/android/app/src/main/java/app/organicmaps/routing/RoutingPlanController.java b/android/app/src/main/java/app/organicmaps/routing/RoutingPlanController.java index ca4e7e8e69..e89156c70a 100644 --- a/android/app/src/main/java/app/organicmaps/routing/RoutingPlanController.java +++ b/android/app/src/main/java/app/organicmaps/routing/RoutingPlanController.java @@ -165,6 +165,10 @@ public class RoutingPlanController extends ToolbarController @Override public void onUpClick() { + // Ignore the event if the back and start buttons are pressed at the same time. + // See {@link #RoutingBottomMenuController.setStartButton()}. + if (RoutingController.get().isNavigating()) + return; RoutingController.get().cancel(); }