Fixes the order of the tabs in the tablist

This commit is contained in:
Carmelo Messina 2022-12-29 13:27:23 +01:00
parent a0daaacf6d
commit 2379086afb
No known key found for this signature in database
GPG key ID: 968894BE688289FD

View file

@ -12,81 +12,80 @@ Support for tablet mode is also included.
Original License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
cc/base/features.cc | 4 ++
cc/base/features.cc | 4 +
cc/base/features.h | 1 +
cc/input/browser_controls_offset_manager.cc | 6 +++
cc/trees/layer_tree_host_impl.cc | 3 ++
cc/input/browser_controls_offset_manager.cc | 6 ++
cc/trees/layer_tree_host_impl.cc | 3 +
.../start_surface/StartSurfaceMediator.java | 5 ++
.../tab_management/TabGroupUiCoordinator.java | 7 ++-
.../tab_management/TabGroupUiMediator.java | 50 +++++++++++++++++-
.../tab_management/TabGroupUiProperties.java | 6 ++-
.../tab_management/TabGroupUiToolbarView.java | 18 +++++++
.../tab_management/TabGroupUiViewBinder.java | 3 ++
.../TabListContainerViewBinder.java | 4 ++
.../tab_management/TabListCoordinator.java | 6 +++
.../tab_management/TabListRecyclerView.java | 19 ++++++-
.../tab_management/TabSwitcherMediator.java | 16 ++++++
.../ChromeAccessibilitySettingsDelegate.java | 52 +++++++++++++++++++
.../chrome/browser/app/ChromeActivity.java | 13 +++++
.../tab_management/TabGroupUiCoordinator.java | 7 +-
.../tab_management/TabGroupUiMediator.java | 50 +++++++++++-
.../tab_management/TabGroupUiProperties.java | 6 +-
.../tab_management/TabGroupUiToolbarView.java | 18 +++++
.../tab_management/TabGroupUiViewBinder.java | 3 +
.../tab_management/TabListCoordinator.java | 77 +++++++++++++++++++
.../tab_management/TabListRecyclerView.java | 19 ++++-
.../tab_management/TabSwitcherMediator.java | 19 +++++
.../ChromeAccessibilitySettingsDelegate.java | 52 +++++++++++++
.../chrome/browser/app/ChromeActivity.java | 13 ++++
.../browser/app/flags/ChromeCachedFlags.java | 1 +
.../compositor/CompositorViewHolder.java | 6 +++
.../layouts/LayoutManagerChrome.java | 18 +++++--
.../compositor/CompositorViewHolder.java | 6 ++
.../layouts/LayoutManagerChrome.java | 18 ++++-
.../layouts/LayoutManagerChromeTablet.java | 4 +-
.../layouts/ToolbarSwipeLayout.java | 15 +++++-
.../layouts/ToolbarSwipeLayout.java | 15 +++-
.../overlays/strip/StripLayoutHelper.java | 2 +-
.../strip/StripLayoutHelperManager.java | 36 +++++++++++--
.../scene_layer/StaticTabSceneLayer.java | 8 ++-
.../scene_layer/TabListSceneLayer.java | 14 +++++
.../scene_layer/TabStripSceneLayer.java | 15 +++++-
.../browser/findinpage/FindToolbarTablet.java | 11 ++--
.../fullscreen/BrowserControlsManager.java | 13 +++++
.../messages/MessageContainerCoordinator.java | 17 +++++-
.../strip/StripLayoutHelperManager.java | 36 +++++++--
.../scene_layer/StaticTabSceneLayer.java | 8 +-
.../scene_layer/TabListSceneLayer.java | 14 ++++
.../scene_layer/TabStripSceneLayer.java | 15 +++-
.../browser/findinpage/FindToolbarTablet.java | 11 ++-
.../fullscreen/BrowserControlsManager.java | 13 ++++
.../messages/MessageContainerCoordinator.java | 17 +++-
.../modaldialog/ChromeTabModalPresenter.java | 2 +-
.../chrome/browser/ntp/NewTabPage.java | 13 +++--
.../chrome/browser/ntp/RecentTabsPage.java | 22 ++++++--
.../browser/searchwidget/SearchActivity.java | 13 ++++-
.../chrome/browser/ntp/NewTabPage.java | 13 +++-
.../chrome/browser/ntp/RecentTabsPage.java | 22 +++++-
.../browser/searchwidget/SearchActivity.java | 13 +++-
.../browser/settings/SettingsActivity.java | 5 ++
.../StatusIndicatorCoordinator.java | 10 ++++
.../StatusIndicatorSceneLayer.java | 7 ++-
.../browser/toolbar/ToolbarManager.java | 37 +++++++++++--
.../chrome/browser/ui/BottomContainer.java | 19 +++++++
.../ui/system/StatusBarColorController.java | 9 ++++
.../StatusIndicatorCoordinator.java | 10 +++
.../StatusIndicatorSceneLayer.java | 7 +-
.../browser/toolbar/ToolbarManager.java | 37 +++++++--
.../chrome/browser/ui/BottomContainer.java | 19 +++++
.../ui/system/StatusBarColorController.java | 9 +++
chrome/browser/about_flags.cc | 5 ++
.../scene_layer/tab_strip_scene_layer.cc | 16 ++++--
.../BrowserControlsMarginSupplier.java | 6 +++
.../BrowserControlsStateProvider.java | 6 +++
chrome/browser/flag_descriptions.cc | 4 ++
chrome/browser/flag_descriptions.h | 3 ++
.../flags/android/cached_feature_flags.cc | 18 +++++++
.../scene_layer/tab_strip_scene_layer.cc | 16 +++-
.../BrowserControlsMarginSupplier.java | 6 ++
.../BrowserControlsStateProvider.java | 6 ++
chrome/browser/flag_descriptions.cc | 4 +
chrome/browser/flag_descriptions.h | 3 +
.../flags/android/cached_feature_flags.cc | 18 +++++
.../flags/android/chrome_feature_list.cc | 2 +
.../browser/flags/CachedFeatureFlags.java | 19 +++++++
.../browser/flags/ChromeFeatureList.java | 4 ++
.../chrome/browser/ui/appmenu/AppMenu.java | 30 +++++++++++
.../ui/appmenu/AppMenuHandlerImpl.java | 11 ++++
.../omnibox/LocationBarCoordinator.java | 9 +++-
.../browser/omnibox/UrlBarCoordinator.java | 11 +++-
.../suggestions/AutocompleteCoordinator.java | 18 ++++++-
.../suggestions/AutocompleteMediator.java | 7 ++-
.../OmniboxSuggestionsDropdown.java | 22 +++++++-
.../OmniboxSuggestionsDropdownEmbedder.java | 4 ++
.../strings/android_chrome_strings.grd | 6 +++
.../browser/flags/CachedFeatureFlags.java | 19 +++++
.../browser/flags/ChromeFeatureList.java | 4 +
.../chrome/browser/ui/appmenu/AppMenu.java | 30 ++++++++
.../ui/appmenu/AppMenuHandlerImpl.java | 11 +++
.../omnibox/LocationBarCoordinator.java | 9 ++-
.../browser/omnibox/UrlBarCoordinator.java | 11 ++-
.../suggestions/AutocompleteCoordinator.java | 18 ++++-
.../suggestions/AutocompleteMediator.java | 7 +-
.../OmniboxSuggestionsDropdown.java | 22 +++++-
.../OmniboxSuggestionsDropdownEmbedder.java | 4 +
.../strings/android_chrome_strings.grd | 6 ++
chrome/browser/ui/android/toolbar/BUILD.gn | 1 +
.../toolbar/LocationBarFocusScrimHandler.java | 7 +++
.../bottom/BottomControlsContentDelegate.java | 9 +++-
.../bottom/BottomControlsCoordinator.java | 11 +++-
.../bottom/BottomControlsMediator.java | 9 ++++
.../toolbar/LocationBarFocusScrimHandler.java | 7 ++
.../bottom/BottomControlsContentDelegate.java | 9 ++-
.../bottom/BottomControlsCoordinator.java | 11 ++-
.../bottom/BottomControlsMediator.java | 9 +++
.../bottom/BottomControlsProperties.java | 5 +-
.../bottom/BottomControlsViewBinder.java | 2 +
.../bottom/ScrollingBottomViewSceneLayer.java | 20 ++++++-
.../toolbar/top/ToolbarControlContainer.java | 11 ++++
.../top/TopToolbarOverlayCoordinator.java | 7 +++
.../top/TopToolbarOverlayProperties.java | 8 ++-
.../toolbar/top/TopToolbarSceneLayer.java | 11 +++-
.../res/xml/accessibility_preferences.xml | 4 ++
.../accessibility/AccessibilitySettings.java | 16 ++++++
.../AccessibilitySettingsDelegate.java | 6 +++
.../render_widget_host_view_android.cc | 3 ++
74 files changed, 784 insertions(+), 57 deletions(-)
.../bottom/ScrollingBottomViewSceneLayer.java | 20 ++++-
.../toolbar/top/ToolbarControlContainer.java | 11 +++
.../top/TopToolbarOverlayCoordinator.java | 7 ++
.../top/TopToolbarOverlayProperties.java | 8 +-
.../toolbar/top/TopToolbarSceneLayer.java | 11 ++-
.../res/xml/accessibility_preferences.xml | 4 +
.../accessibility/AccessibilitySettings.java | 16 ++++
.../AccessibilitySettingsDelegate.java | 6 ++
.../render_widget_host_view_android.cc | 3 +
73 files changed, 854 insertions(+), 57 deletions(-)
diff --git a/cc/base/features.cc b/cc/base/features.cc
--- a/cc/base/features.cc
@ -390,31 +389,18 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
}
}
}
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinder.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinder.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinder.java
@@ -21,6 +21,8 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import org.chromium.components.browser_ui.styles.ChromeColors;
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.chrome.browser.flags.CachedFeatureFlags;
+import org.chromium.chrome.browser.flags.ChromeFeatureList;
/**
* ViewBinder for TabListRecyclerView.
@@ -57,6 +59,8 @@ class TabListContainerViewBinder {
params.topMargin = newTopMargin;
view.requestLayout();
} else if (BOTTOM_CONTROLS_HEIGHT == propertyKey) {
+ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM))
+ return;
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
params.bottomMargin = model.get(BOTTOM_CONTROLS_HEIGHT);
view.requestLayout();
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListCoordinator.java
@@ -47,6 +47,9 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.tasks.tab_management;
import static org.chromium.chrome.browser.tasks.tab_management.TabListModel.CardProperties.CARD_TYPE;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -47,6 +48,9 @@ import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
import org.chromium.ui.resources.dynamics.DynamicResourceLoader;
import org.chromium.ui.widget.ViewLookupCachingFrameLayout;
@ -424,16 +410,100 @@ 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;
@@ -255,6 +258,9 @@ public class TabListCoordinator
@@ -95,6 +99,70 @@ public class TabListCoordinator
private boolean mLayoutListenerRegistered;
private @Nullable TabStripSnapshotter mTabStripSnapshotter;
+ public class GridLayoutManagerDockBottom extends GridLayoutManager {
+ Context mContext;
+
+ TabListRecyclerView mRecyclerView;
+
+ int mTopPadding = 99999;
+ int mLastPosition = -1;
+ boolean mIsFirstLayout = true;
+
+ public GridLayoutManagerDockBottom(Context context, int spanCount) {
+ super(context, spanCount);
+ mContext = context;
+ }
+
+ public void setTabListRecyclerView(TabListRecyclerView recyclerView) {
+ mRecyclerView = recyclerView;
+ }
+
+ public void ResetTopPosition() {
+ mIsFirstLayout = true;
+ }
+
+ @Override
+ public int getPaddingTop() {
+ if (mContext.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ mTopPadding = 99999;
+ return 0;
+ }
+ if (mTopPadding == 99999) return super.getPaddingTop();
+ return mTopPadding;
+ }
+
+ @Override
+ public int getPaddingBottom() {
+ return 1;
+ }
+
+ @Override
+ public void scrollToPositionWithOffset(int position, int offset) {
+ mLastPosition = position;
+ super.scrollToPositionWithOffset(position, getPaddingBottom());
+ }
+
+ @Override
+ public void onLayoutCompleted(RecyclerView.State state) {
+ super.onLayoutCompleted(state);
+
+ if (state.isPreLayout()) return;
+ View lastView = findViewByPosition(findFirstVisibleItemPosition());
+ if (lastView != null) {
+ mTopPadding = Math.min(mTopPadding, mRecyclerView.getHeight() - lastView.getHeight());
+ if (mIsFirstLayout) {
+ mIsFirstLayout = false;
+ scrollToPositionWithOffset(mLastPosition, 0);
+ }
+ }
+
+ if (mLastPosition != -1 && mLastPosition >= state.getItemCount()) {
+ ResetTopPosition();
+ scrollToPositionWithOffset(state.getItemCount()-getSpanCount(), 0);
+ }
+ }
+ }
+
/**
* Construct a coordinator for UI that shows a list of tabs.
* @param mode Modes of showing the list of tabs. Can be used in GRID or STRIP.
@@ -255,6 +323,12 @@ public class TabListCoordinator
if (mMode == TabListMode.GRID) {
GridLayoutManager gridLayoutManager =
new GridLayoutManager(context, GRID_LAYOUT_SPAN_COUNT_COMPACT);
+ // invert the order if the toolbar is at bottom
+ if (titleProvider != null && CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM))
+ gridLayoutManager.setReverseLayout(true);
+ if (titleProvider != null && CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM)) {
+ gridLayoutManager =
+ new GridLayoutManagerDockBottom(context, GRID_LAYOUT_SPAN_COUNT_COMPACT);
+ ((GridLayoutManagerDockBottom)gridLayoutManager)
+ .setTabListRecyclerView(mRecyclerView);
+ }
mRecyclerView.setLayoutManager(gridLayoutManager);
mMediator.registerOrientationListener(gridLayoutManager);
mMediator.updateSpanCount(gridLayoutManager,
@@ -434,6 +508,9 @@ public class TabListCoordinator
}
registerLayoutChangeListener();
mRecyclerView.prepareTabSwitcherView();
+ GridLayoutManager glm = (GridLayoutManager) mRecyclerView.getLayoutManager();
+ if (glm instanceof GridLayoutManagerDockBottom)
+ ((GridLayoutManagerDockBottom)glm).ResetTopPosition();
mMediator.prepareTabSwitcherView();
mMediator.registerOnScrolledListener(mRecyclerView);
}
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabListRecyclerView.java
@ -550,6 +620,16 @@ diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser
mContainerViewModel.set(SHADOW_TOP_OFFSET, contentOffset);
}
@@ -744,6 +760,9 @@ class TabSwitcherMediator implements TabSwitcher.Controller, TabListRecyclerView
private void setInitialScrollIndexOffset() {
int offset = mMode == TabListMode.CAROUSEL ? INITIAL_SCROLL_INDEX_OFFSET_CAROUSEL
: INITIAL_SCROLL_INDEX_OFFSET_GTS;
+ if (CachedFeatureFlags.isEnabled(ChromeFeatureList.MOVE_TOP_TOOLBAR_TO_BOTTOM)) {
+ offset = 0;
+ }
int initialPosition = Math.max(
mTabModelSelector.getTabModelFilterProvider().getCurrentTabModelFilter().index()
- offset,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/ChromeAccessibilitySettingsDelegate.java