Move navigation bar to bottom: fixed top tabs half cut off in landscape mode (#1610)

This commit is contained in:
Carmelo Messina
2025-04-22 17:37:11 +02:00
parent b126700f3c
commit 290c0f8863
@@ -22,7 +22,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../tab_management/TabGroupUiProperties.java | 5 +
.../tab_management/TabGroupUiToolbarView.java | 17 ++
.../tab_management/TabGroupUiViewBinder.java | 3 +
.../tab_management/TabListCoordinator.java | 162 +++++++++++++++++-
.../tab_management/TabListCoordinator.java | 158 +++++++++++++++++-
.../TabListEmptyCoordinator.java | 17 +-
.../tab_management/TabSwitcherPaneBase.java | 9 +
.../browser/feed/FeedSurfaceCoordinator.java | 4 +
@@ -32,7 +32,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../layouts/LayoutManagerChromeTablet.java | 4 +-
.../layouts/ToolbarSwipeLayout.java | 14 +-
.../overlays/strip/ScrollDelegate.java | 2 +-
.../strip/StripLayoutHelperManager.java | 38 +++-
.../strip/StripLayoutHelperManager.java | 38 ++++-
.../scene_layer/StaticTabSceneLayer.java | 7 +-
.../scene_layer/TabListSceneLayer.java | 8 +
.../scene_layer/TabStripSceneLayer.java | 20 ++-
@@ -84,7 +84,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../bottom/BottomControlsMediator.java | 20 ++-
.../bottom/BottomControlsProperties.java | 6 +-
.../bottom/BottomControlsViewBinder.java | 2 +
.../bottom/ScrollingBottomViewSceneLayer.java | 19 +-
.../bottom/ScrollingBottomViewSceneLayer.java | 19 ++-
.../toolbar/top/ToolbarControlContainer.java | 9 +
.../top/TopToolbarOverlayCoordinator.java | 10 ++
.../top/TopToolbarOverlayProperties.java | 8 +-
@@ -94,7 +94,7 @@ License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
.../AccessibilitySettingsDelegate.java | 8 +
.../render_widget_host_view_android.cc | 3 +
.../Move-navigation-bar-to-bottom.inc | 17 ++
81 files changed, 1039 insertions(+), 77 deletions(-)
81 files changed, 1035 insertions(+), 77 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
@@ -425,7 +425,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
@@ -131,6 +139,128 @@ public class TabListCoordinator
@@ -131,6 +139,124 @@ public class TabListCoordinator
private int mAwaitingTabId = Tab.INVALID_TAB_ID;
private @TabActionState int mTabActionState;
@@ -490,10 +490,6 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
+
+ @Override
+ public int getPaddingTop() {
+ if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ mTopPadding = MAX_TOP_PADDING;
+ return 0;
+ }
+ if (mTopPadding == MAX_TOP_PADDING) return super.getPaddingTop();
+ return mTopPadding;
+ }
@@ -554,7 +550,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
/**
* Construct a coordinator for UI that shows a list of tabs.
*
@@ -348,6 +478,12 @@ public class TabListCoordinator
@@ -348,6 +474,12 @@ public class TabListCoordinator
checkAwaitingLayout();
}
};
@@ -567,7 +563,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
mRecyclerView.setLayoutManager(gridLayoutManager);
mMediator.registerOrientationListener(gridLayoutManager);
mMediator.updateSpanCount(
@@ -357,7 +493,7 @@ public class TabListCoordinator
@@ -357,7 +489,7 @@ public class TabListCoordinator
Rect frame = new Rect();
mActivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
updateGridCardLayout(frame.width());
@@ -576,7 +572,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
LinearLayoutManager layoutManager =
new LinearLayoutManager(
activity,
@@ -372,6 +508,25 @@ public class TabListCoordinator
@@ -372,6 +504,25 @@ public class TabListCoordinator
}
};
mRecyclerView.setLayoutManager(layoutManager);
@@ -602,7 +598,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
}
mMediator.setRecyclerViewItemAnimationToggle(mRecyclerView::setDisableItemAnimations);
}
@@ -392,7 +547,7 @@ public class TabListCoordinator
@@ -392,7 +543,7 @@ public class TabListCoordinator
if (hasEmptyView) {
mTabListEmptyCoordinator =
new TabListEmptyCoordinator(
@@ -611,7 +607,7 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
}
configureRecyclerViewTouchHelpers();
@@ -680,6 +835,9 @@ public class TabListCoordinator
@@ -680,6 +831,9 @@ public class TabListCoordinator
void prepareTabSwitcherPaneView() {
registerLayoutChangeListener();
mRecyclerView.setupCustomItemAnimator();
@@ -1185,8 +1181,8 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scen
+ }
+ }
// This will hide the tab strips if necessary.
TabStripSceneLayerJni.get()
if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(ContextUtils.getApplicationContext())) {
TintedCompositorButton newTabButton = layoutHelper.getNewTabButton();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/findinpage/FindToolbarTablet.java
@@ -1865,7 +1861,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
#include "chrome/browser/android/webapk/webapk_features.h"
#include "chrome/browser/browser_features.h"
#include "chrome/browser/flags/android/chrome_session_state.h"
@@ -296,6 +297,8 @@ const base::Feature* const kFeaturesExposedToJava[] = {
@@ -295,6 +296,8 @@ const base::Feature* const kFeaturesExposedToJava[] = {
&kNavBarColorMatchesTabBackground,
&kNewTabSearchEngineUrlAndroid,
&kNewTabPageAndroidTriggerForPrerender2,
@@ -1877,7 +1873,7 @@ diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browse
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -415,6 +415,10 @@ public abstract class ChromeFeatureList {
@@ -414,6 +414,10 @@ public abstract class ChromeFeatureList {
public static final String NEW_TAB_PAGE_ANDROID_TRIGGER_FOR_PRERENDER2 =
"NewTabPageAndroidTriggerForPrerender2";
public static final String NOTIFICATION_ONE_TAP_UNSUBSCRIBE = "NotificationOneTapUnsubscribe";
@@ -1888,7 +1884,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
public static final String NOTIFICATION_PERMISSION_VARIANT = "NotificationPermissionVariant";
public static final String NOTIFICATION_PERMISSION_BOTTOM_SHEET =
"NotificationPermissionBottomSheet";
@@ -802,6 +806,10 @@ public abstract class ChromeFeatureList {
@@ -801,6 +805,10 @@ public abstract class ChromeFeatureList {
PRICE_INSIGHTS, /* defaultValue= */ false, /* defaultValueInTests= */ true);
public static final CachedFlag sOptimizationGuidePushNotifications =
newCachedFlag(OPTIMIZATION_GUIDE_PUSH_NOTIFICATIONS, true);
@@ -1899,7 +1895,7 @@ diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/f
public static final CachedFlag sPaintPreviewDemo = newCachedFlag(PAINT_PREVIEW_DEMO, false);
public static final CachedFlag sPostGetMyMemoryStateToBackground =
newCachedFlag(POST_GET_MEMORY_PRESSURE_TO_BACKGROUND, true);
@@ -957,6 +965,8 @@ public abstract class ChromeFeatureList {
@@ -956,6 +964,8 @@ public abstract class ChromeFeatureList {
sPriceChangeModule,
sPriceInsights,
sOptimizationGuidePushNotifications,
@@ -2930,7 +2926,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/TopToolbarSceneLayer.java
@@ -16,6 +16,7 @@ import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar.Drawing
@@ -15,6 +15,7 @@ import org.chromium.components.browser_ui.widget.ClipDrawableProgressBar.Drawing
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.resources.ResourceManager;
@@ -2938,7 +2934,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
/** A SceneLayer to render the top toolbar. This is the "view" piece of the top toolbar overlay. */
@JNINamespace("android")
@@ -41,6 +42,13 @@ class TopToolbarSceneLayer extends SceneOverlayLayer {
@@ -40,6 +41,13 @@ class TopToolbarSceneLayer extends SceneOverlayLayer {
/** Push all information about the texture to native at once. */
private void pushProperties(PropertyModel model) {
if (mResourceManagerSupplier.get() == null) return;
@@ -2952,7 +2948,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
TopToolbarSceneLayerJni.get()
.updateToolbarLayer(
mNativePtr,
@@ -51,7 +59,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer {
@@ -50,7 +58,7 @@ class TopToolbarSceneLayer extends SceneOverlayLayer {
model.get(TopToolbarOverlayProperties.URL_BAR_RESOURCE_ID),
model.get(TopToolbarOverlayProperties.URL_BAR_COLOR),
model.get(TopToolbarOverlayProperties.X_OFFSET),
@@ -2964,9 +2960,9 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow
diff --git a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
--- a/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
+++ b/components/browser_ui/accessibility/android/java/res/xml/accessibility_preferences.xml
@@ -60,4 +60,12 @@ found in the LICENSE file.
android:key="image_descriptions"
android:title="@string/image_descriptions_settings_title" />
@@ -66,4 +66,12 @@ found in the LICENSE file.
app:featureName="disable-pull-to-refresh-effect"
app:needRestart="true" />
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+ android:key="move_toolbar_bottom"