Move navigation bar to bottom: adjust the keyboard size on devices with 3-button navigation (#2543)

This commit is contained in:
Carmelo Messina
2025-12-11 14:34:39 +01:00
parent 6605e1bf7e
commit f1114a452e
@@ -75,7 +75,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../ui/appmenu/AppMenuHandlerImpl.java | 10 ++
.../EdgeToEdgeControllerImpl.java | 1 +
.../ui/edge_to_edge/EdgeToEdgeUtils.java | 2 +
...rredIMEWindowInsetApplicationCallback.java | 17 ++
...rredIMEWindowInsetApplicationCallback.java | 7 +
.../omnibox/LocationBarCoordinator.java | 1 +
...mniboxSuggestionsDropdownEmbedderImpl.java | 32 ++++
.../suggestions/AutocompleteCoordinator.java | 16 ++
@@ -104,7 +104,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../render_widget_host_view_android.cc | 3 +
.../Move-navigation-bar-to-bottom.inc | 17 ++
.../renderer/core/frame/viewport_data.cc | 1 +
91 files changed, 1084 insertions(+), 95 deletions(-)
91 files changed, 1074 insertions(+), 95 deletions(-)
create mode 100644 chrome/browser/hub/internal/android/java/src/org/chromium/chrome/browser/hub/ReversedLinearLayout.java
create mode 100644 cromite_flags/chrome/browser/about_flags_cc/Move-navigation-bar-to-bottom.inc
@@ -2391,7 +2391,7 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
@Override
public void onPrepare(WindowInsetsAnimationCompat animation) {
if ((animation.getTypeMask() & WindowInsetsCompat.Type.ime()) == 0) return;
@@ -121,11 +126,14 @@ public class DeferredIMEWindowInsetApplicationCallback
@@ -121,11 +126,13 @@ public class DeferredIMEWindowInsetApplicationCallback
public WindowInsetsCompat onApplyWindowInsets(
View view, WindowInsetsCompat windowInsetsCompat) {
int newKeyboardHeight = 0;
@@ -2401,27 +2401,10 @@ diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/brow
Insets systemBarInsets =
windowInsetsCompat.getInsets(WindowInsetsCompat.Type.systemBars());
newKeyboardHeight = imeInsets.bottom - systemBarInsets.bottom;
+ if (!hasTappableNavigationBarFromInsets(windowInsetsCompat))
+ mSystemBarInsetsBottom = systemBarInsets.bottom;
+ mSystemBarInsetsBottom = systemBarInsets.bottom;
// Since the ime insets are greater than 0, the keyboard is showing, but its height is
// being suppressed in that this class deliberately wants to avoid application resizing.
@@ -173,6 +181,15 @@ public class DeferredIMEWindowInsetApplicationCallback
return builder.build();
}
+ static boolean hasTappableNavigationBarFromInsets(WindowInsetsCompat insets) {
+ Insets navigationBarInsets = insets.getInsets(WindowInsetsCompat.Type.navigationBars());
+ Insets tappableElementInsets = insets.getInsets(WindowInsetsCompat.Type.tappableElement());
+ // Return whether there is any overlap in navigation bar and tappable element insets.
+ return (navigationBarInsets.bottom > 0 && tappableElementInsets.bottom > 0)
+ || (navigationBarInsets.left > 0 && tappableElementInsets.left > 0)
+ || (navigationBarInsets.right > 0 && tappableElementInsets.right > 0);
+ }
+
private void commitKeyboardHeight(int newKeyboardHeight) {
mKeyboardHeight = newKeyboardHeight;
mDeferredKeyboardHeight = NO_DEFERRED_KEYBOARD_HEIGHT;
diff --git a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
--- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
+++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java