diff --git a/android/src/app/organicmaps/DownloadResourcesLegacyActivity.java b/android/src/app/organicmaps/DownloadResourcesLegacyActivity.java index 7221eef42a..ec0e5d0414 100644 --- a/android/src/app/organicmaps/DownloadResourcesLegacyActivity.java +++ b/android/src/app/organicmaps/DownloadResourcesLegacyActivity.java @@ -1,6 +1,7 @@ package app.organicmaps; import android.annotation.SuppressLint; +import android.app.Dialog; import android.content.Intent; import android.location.Location; import android.os.Bundle; @@ -64,6 +65,9 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity @Nullable private MapTask mMapTaskToForward; + @Nullable + private Dialog mAlertDialog; + @NonNull private ActivityResultLauncher mApiRequest; @@ -244,6 +248,9 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity { super.onPause(); LocationHelper.INSTANCE.removeListener(mLocationListener); + if (mAlertDialog != null && mAlertDialog.isShowing()) + mAlertDialog.dismiss(); + mAlertDialog = null; } private void setDownloadMessage(int bytesToDownload) @@ -432,6 +439,9 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity private void showErrorDialog(int result) { + if (mAlertDialog != null && mAlertDialog.isShowing()) + return; + @StringRes final int titleId; @StringRes final int messageId; @@ -458,7 +468,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity throw new AssertionError("Unexpected result code = " + result); } - new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setTitle(titleId) .setMessage(messageId) .setCancelable(true) @@ -467,6 +477,7 @@ public class DownloadResourcesLegacyActivity extends BaseMwmFragmentActivity setAction(TRY_AGAIN); onTryAgainClicked(); }) + .setOnDismissListener(dialog -> mAlertDialog = null) .show(); } diff --git a/android/src/app/organicmaps/MwmActivity.java b/android/src/app/organicmaps/MwmActivity.java index 43386f123d..55b5932c4b 100644 --- a/android/src/app/organicmaps/MwmActivity.java +++ b/android/src/app/organicmaps/MwmActivity.java @@ -199,6 +199,9 @@ public class MwmActivity extends BaseMwmFragmentActivity @Nullable private Dialog mLocationErrorDialog; + @Nullable + private Dialog mAlertDialog; + @SuppressWarnings("NotNullFieldNotInitialized") @NonNull private ActivityResultLauncher mLocationPermissionRequest; @@ -330,10 +333,12 @@ public class MwmActivity extends BaseMwmFragmentActivity return; } - new MaterialAlertDialogBuilder(MwmActivity.this, R.style.MwmTheme_AlertDialog) + dismissLocationErrorDialog(); + mLocationErrorDialog = new MaterialAlertDialogBuilder(MwmActivity.this, R.style.MwmTheme_AlertDialog) .setMessage(R.string.unknown_current_position) .setCancelable(true) .setPositiveButton(R.string.ok, null) + .setOnDismissListener(dialog -> mLocationErrorDialog = null) .show(); } @@ -457,10 +462,12 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override public void onNoConnectionError() { - new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + dismissAlertDialog(); + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setTitle(R.string.common_check_internet_connection_dialog_title) .setMessage(R.string.common_check_internet_connection_dialog) .setPositiveButton(R.string.ok, null) + .setOnDismissListener(dialog -> mAlertDialog = null) .show(); } @@ -515,9 +522,11 @@ public class MwmActivity extends BaseMwmFragmentActivity startActivity(new Intent(MwmActivity.this, FeatureCategoryActivity.class)); else { - new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + dismissAlertDialog(); + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setTitle(R.string.message_invalid_feature_position) .setPositiveButton(R.string.ok, null) + .setOnDismissListener(dialog -> mAlertDialog = null) .show(); } break; @@ -911,11 +920,13 @@ public class MwmActivity extends BaseMwmFragmentActivity return; } - new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + dismissAlertDialog(); + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setTitle(R.string.downloader_update_maps) .setMessage(R.string.isolines_activation_error_dialog) .setPositiveButton(R.string.ok, (dialog, which) -> startActivity(new Intent(this, DownloaderActivity.class))) .setNegativeButton(R.string.cancel, null) + .setOnDismissListener(dialog -> mAlertDialog = null) .show(); } @@ -1031,6 +1042,8 @@ public class MwmActivity extends BaseMwmFragmentActivity mOnmapDownloader.onPause(); mNavigationController.onActivityPaused(this); pauseLocationInBackground(); + dismissLocationErrorDialog(); + dismissAlertDialog(); super.onPause(); } @@ -1596,11 +1609,13 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override public void onDrivingOptionsBuildError() { - new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + dismissAlertDialog(); + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setTitle(R.string.unable_to_calc_alert_title) .setMessage(R.string.unable_to_calc_alert_subtitle) .setPositiveButton(R.string.settings, (dialog, which) -> DrivingOptionsActivity.start(this)) .setNegativeButton(R.string.cancel, null) + .setOnDismissListener(dialog -> mAlertDialog = null) .show(); } @@ -1608,12 +1623,13 @@ public class MwmActivity extends BaseMwmFragmentActivity public void onShowDisclaimer(@Nullable MapObject startPoint, @Nullable MapObject endPoint) { final StringBuilder builder = new StringBuilder(); - for (int resId : new int[] { R.string.dialog_routing_disclaimer_priority, R.string.dialog_routing_disclaimer_precision, + for (int resId : new int[]{R.string.dialog_routing_disclaimer_priority, R.string.dialog_routing_disclaimer_precision, R.string.dialog_routing_disclaimer_recommendations, R.string.dialog_routing_disclaimer_borders, - R.string.dialog_routing_disclaimer_beware }) - builder.append(MwmApplication.from(this).getString(resId)).append("\n\n"); + R.string.dialog_routing_disclaimer_beware}) + builder.append(getString(resId)).append("\n\n"); - new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) + dismissAlertDialog(); + mAlertDialog = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setTitle(R.string.dialog_routing_disclaimer_title) .setMessage(builder.toString()) .setCancelable(false) @@ -1622,16 +1638,18 @@ public class MwmActivity extends BaseMwmFragmentActivity Config.acceptRoutingDisclaimer(); RoutingController.get().prepare(startPoint, endPoint); }) + .setOnDismissListener(dialog -> mAlertDialog = null) .show(); } @Override public void onSuggestRebuildRoute() { - final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this) + final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this, R.style.MwmTheme_AlertDialog) .setMessage(R.string.p2p_reroute_from_current) .setCancelable(false) - .setNegativeButton(R.string.cancel, null); + .setNegativeButton(R.string.cancel, null) + .setOnDismissListener(dialog -> mAlertDialog = null); final TextView titleView = (TextView)View.inflate(this, R.layout.dialog_suggest_reroute_title, null); titleView.setText(R.string.p2p_only_from_current); @@ -1647,7 +1665,8 @@ public class MwmActivity extends BaseMwmFragmentActivity builder.setPositiveButton(R.string.ok, (dialog, which) -> RoutingController.get().setStartFromMyPosition()); } - builder.show(); + dismissAlertDialog(); + mAlertDialog = builder.show(); } @Override @@ -1660,6 +1679,16 @@ public class MwmActivity extends BaseMwmFragmentActivity showAddStartOrFinishFrame(controller, true); } + /** + * Dismiss the active modal dialog from the screen, if any. + */ + private void dismissAlertDialog() + { + if (mAlertDialog != null && mAlertDialog.isShowing()) + mAlertDialog.dismiss(); + mAlertDialog = null; + } + /** * Dismiss location error dialog from the screen, if any. */ @@ -1780,7 +1809,6 @@ public class MwmActivity extends BaseMwmFragmentActivity */ private void pauseLocationInBackground() { - dismissLocationErrorDialog(); LocationState.nativeRemoveLocationPendingTimeoutListener(); if (!LocationHelper.INSTANCE.isActive())