diff --git a/android/app/src/main/java/app/organicmaps/MwmActivity.java b/android/app/src/main/java/app/organicmaps/MwmActivity.java index 06dfac9715..9c9bdfcc10 100644 --- a/android/app/src/main/java/app/organicmaps/MwmActivity.java +++ b/android/app/src/main/java/app/organicmaps/MwmActivity.java @@ -904,6 +904,9 @@ public class MwmActivity extends BaseMwmFragmentActivity public void startLocationToPoint(final @Nullable MapObject endPoint) { closeFloatingPanels(); + if (isFullscreen()) + setFullscreen(false); + if (LocationState.getMode() == LocationState.NOT_FOLLOW_NO_POSITION) { // Calls onMyPositionModeChanged(PENDING_POSITION). @@ -1221,7 +1224,6 @@ public class MwmActivity extends BaseMwmFragmentActivity @SuppressWarnings("unused") public void onPlacePageActivated(@NonNull PlacePageData data) { - setFullscreen(false); // This will open the place page mPlacePageViewModel.setMapObject((MapObject) data); } @@ -1244,14 +1246,17 @@ public class MwmActivity extends BaseMwmFragmentActivity setFullscreen(!isFullscreen()); if (isFullscreen()) + { + closePlacePage(); showFullscreenToastIfNeeded(); + } } private void setFullscreen(boolean isFullscreen) { if (RoutingController.get().isNavigating() - || RoutingController.get().isBuilding() - || RoutingController.get().isPlanning()) + || RoutingController.get().isBuilding() + || RoutingController.get().isPlanning()) return; mMapButtonsViewModel.setButtonsHidden(isFullscreen); @@ -2023,6 +2028,7 @@ public class MwmActivity extends BaseMwmFragmentActivity return; closeFloatingPanels(); + setFullscreen(false); RoutingController.get().start(); } diff --git a/android/app/src/main/java/app/organicmaps/util/UiUtils.java b/android/app/src/main/java/app/organicmaps/util/UiUtils.java index fcd8943097..6f47739a33 100644 --- a/android/app/src/main/java/app/organicmaps/util/UiUtils.java +++ b/android/app/src/main/java/app/organicmaps/util/UiUtils.java @@ -14,6 +14,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.Window; +import android.view.WindowManager; import android.widget.Button; import android.widget.TextView; @@ -229,15 +230,29 @@ public final class UiUtils public static void setFullscreen(@NonNull Activity activity, boolean fullscreen) { final Window window = activity.getWindow(); - final View decorView = window.getDecorView(); - WindowInsetsControllerCompat wic = Objects.requireNonNull(WindowCompat.getInsetsController(window, decorView)); - if (fullscreen) + + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.R) { - wic.hide(WindowInsetsCompat.Type.systemBars()); - wic.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); + // On older versions of Android there is layout issue on exit from fullscreen mode. + // For such versions we use old-style fullscreen mode. + // See https://github.com/organicmaps/organicmaps/pull/8551 for details + if (fullscreen) + window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + else + window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } else - wic.show(WindowInsetsCompat.Type.systemBars()); + { + final View decorView = window.getDecorView(); + WindowInsetsControllerCompat wic = Objects.requireNonNull(WindowCompat.getInsetsController(window, decorView)); + if (fullscreen) + { + wic.hide(WindowInsetsCompat.Type.systemBars()); + wic.setSystemBarsBehavior(WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); + } + else + wic.show(WindowInsetsCompat.Type.systemBars()); + } } public static void setupTransparentStatusBar(@NonNull Activity activity)