diff --git a/build/patches/Add-option-to-force-tablet-UI.patch b/build/patches/Add-option-to-force-tablet-UI.patch index bdc9fb94..ba960171 100644 --- a/build/patches/Add-option-to-force-tablet-UI.patch +++ b/build/patches/Add-option-to-force-tablet-UI.patch @@ -8,34 +8,36 @@ License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html .../java/res/layout/recent_tabs_page.xml | 2 +- .../java/res/values-sw600dp/dimens.xml | 4 ++-- chrome/android/java/res/values/dimens.xml | 6 ++++- + .../browser/ChromeBaseAppCompatActivity.java | 3 +++ .../chrome/browser/WarmupManager.java | 5 +++- .../settings/AccessibilitySettings.java | 13 ++++++++++ .../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++ .../chrome/browser/app/ChromeActivity.java | 4 +++- .../overlays/strip/StripLayoutHelper.java | 10 ++++++-- - .../strip/StripLayoutHelperManager.java | 6 ++++- + .../strip/StripLayoutHelperManager.java | 5 +++- + .../init/ChromeBrowserInitializer.java | 2 ++ .../tabbed_mode/TabbedRootUiCoordinator.java | 4 +++- .../chrome/browser/ui/RootUiCoordinator.java | 5 +++- chrome/browser/preferences/BUILD.gn | 1 + .../preferences/ChromePreferenceKeys.java | 1 + - .../preferences/ChromeSharedPreferences.java | 8 +++++++ + .../preferences/ChromeSharedPreferences.java | 12 ++++++++++ .../LegacyChromePreferenceKeys.java | 1 + - .../SingleTabSwitcherOnNtpMediator.java | 1 + + .../AppHeaderCoordinator.java | 2 ++ .../omnibox/LocationBarCoordinator.java | 2 +- .../strings/android_chrome_strings.grd | 7 ++++++ .../java/res/layout/control_container.xml | 10 ++++---- .../java/res/layout/toolbar_tablet.xml | 2 +- .../java/res/values-sw600dp/dimens.xml | 5 ++-- - .../toolbar/java/res/values/dimens.xml | 5 ++-- + .../toolbar/java/res/values/dimens.xml | 6 +++-- .../browser/toolbar/ControlContainer.java | 2 +- .../toolbar/top/ToolbarControlContainer.java | 24 ++++++++++++++++++- .../browser/toolbar/top/ToolbarLayout.java | 5 +++- - .../TabStripTransitionCoordinator.java | 2 +- - components/BUILD.gn | 6 ++--- + .../tab_strip/HeightTransitionHandler.java | 2 ++ + .../TabStripTransitionCoordinator.java | 6 ++++- .../res/xml/accessibility_preferences.xml | 5 ++++ .../AccessibilitySettingsDelegate.java | 11 +++++++++ - .../chromium/ui/base/DeviceFormFactor.java | 9 +++++++ - 31 files changed, 157 insertions(+), 30 deletions(-) + .../chromium/ui/base/DeviceFormFactor.java | 14 +++++++++++ + 33 files changed, 175 insertions(+), 27 deletions(-) diff --git a/chrome/android/java/res/layout/custom_tabs_control_container.xml b/chrome/android/java/res/layout/custom_tabs_control_container.xml --- a/chrome/android/java/res/layout/custom_tabs_control_container.xml @@ -93,6 +95,26 @@ diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res 375dp 60dp +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeBaseAppCompatActivity.java +@@ -51,6 +51,7 @@ import org.chromium.chrome.browser.metrics.UmaSessionStats; + import org.chromium.chrome.browser.night_mode.GlobalNightModeStateProviderHolder; + import org.chromium.chrome.browser.night_mode.NightModeStateProvider; + import org.chromium.chrome.browser.night_mode.NightModeUtils; ++import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; + import org.chromium.components.browser_ui.util.AutomotiveUtils; + import org.chromium.ui.display.DisplaySwitches; + import org.chromium.ui.display.DisplayUtil; +@@ -123,6 +124,8 @@ public class ChromeBaseAppCompatActivity extends AppCompatActivity + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(newBase); + ++ ChromeSharedPreferences.warmUp(); ++ + // Make sure the "chrome" split is loaded before checking if ClassLoaders are equal. + SplitChromeApplication.finishPreload(CHROME_SPLIT_NAME); + ClassLoader chromeModuleClassLoader = ChromeBaseAppCompatActivity.class.getClassLoader(); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/WarmupManager.java @@ -232,7 +254,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelperManager.java -@@ -455,11 +455,15 @@ public class StripLayoutHelperManager +@@ -455,7 +455,10 @@ public class StripLayoutHelperManager mIsLayoutOptimizationsEnabled = ToolbarFeatures.isTabStripWindowLayoutOptimizationEnabled(true); @@ -244,11 +266,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/over mHeight = mIsLayoutOptimizationsEnabled ? toolbarManager.getTabStripHeightSupplier().get() / mDensity - : mScrollableStripHeight; -+ - mTopPadding = mHeight - mScrollableStripHeight; - mDesktopWindowStateProvider = desktopWindowStateProvider; - mStripVisibilityStateSupplier = new ObservableSupplierImpl<>(StripVisibilityState.UNKNOWN); +diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java +--- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java ++++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeBrowserInitializer.java +@@ -17,6 +17,7 @@ import org.chromium.base.library_loader.LibraryProcessType; + import org.chromium.base.task.ChainedTasks; + import org.chromium.base.task.TaskTraits; + import org.chromium.chrome.browser.flags.ChromeSwitches; ++import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; + import org.chromium.chrome.browser.profiles.ProfileManager; + import org.chromium.chrome.browser.signin.SigninCheckerProvider; + import org.chromium.components.background_task_scheduler.BackgroundTaskSchedulerFactory; +@@ -107,6 +108,7 @@ public class ChromeBrowserInitializer { + public void handlePreNativeStartupAndLoadLibraries(final BrowserParts parts) { + ThreadUtils.checkUiThread(); + if (parts.isActivityFinishingOrDestroyed()) return; ++ ChromeSharedPreferences.warmUp(); + ProcessInitializationHandler.getInstance().initializePreNative(); + ProcessInitializationHandler.getInstance().initializePreNativeLibraryLoad(); + try (TraceEvent e = TraceEvent.scoped("ChromeBrowserInitializer.preInflationStartup")) { diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java --- a/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabbed_mode/TabbedRootUiCoordinator.java @@ -319,7 +355,7 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro @JNINamespace("android::shared_preferences") public class ChromeSharedPreferences { public static final PreferenceKeyRegistry REGISTRY = -@@ -23,6 +25,12 @@ public class ChromeSharedPreferences { +@@ -23,6 +25,16 @@ public class ChromeSharedPreferences { LegacyChromePreferenceKeys.getPrefixesInUse()) : null); @@ -328,6 +364,10 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro + ChromeSharedPreferences.getInstance().readBoolean( + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)); + } ++ ++ public static void warmUp() { ++ // intentionally empty ++ } + /** * @return The //base SharedPreferencesManager singleton. @@ -343,17 +383,25 @@ diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/bro ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM, ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO, ChromePreferenceKeys.HOMEPAGE_ENABLED, -diff --git a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java ---- a/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java -+++ b/chrome/browser/single_tab/android/java/src/org/chromium/chrome/browser/single_tab/SingleTabSwitcherOnNtpMediator.java -@@ -41,6 +41,7 @@ import org.chromium.components.browser_ui.widget.displaystyle.HorizontalDisplayS - import org.chromium.components.browser_ui.widget.displaystyle.UiConfig; - import org.chromium.components.browser_ui.widget.displaystyle.UiConfig.DisplayStyle; - import org.chromium.components.embedder_support.util.UrlUtilities; +diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java +--- a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java ++++ b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderCoordinator.java +@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; + import org.chromium.chrome.browser.lifecycle.SaveInstanceStateObserver; + import org.chromium.chrome.browser.lifecycle.TopResumedActivityChangedObserver; + import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils.DesktopWindowHeuristicResult; +import org.chromium.ui.base.DeviceFormFactor; - import org.chromium.ui.modelutil.PropertyModel; - import org.chromium.url.GURL; + import org.chromium.ui.InsetObserver; + import org.chromium.ui.InsetsRectProvider; + import org.chromium.ui.util.ColorUtils; +@@ -238,6 +239,7 @@ public class AppHeaderCoordinator + InsetObserver insetObserver, + InsetsRectProvider insetsRectProvider, + @DesktopWindowHeuristicResult int currentResult) { ++ if (DeviceFormFactor.isForceTabletUI()) return DesktopWindowHeuristicResult.IN_DESKTOP_WINDOW; + @DesktopWindowHeuristicResult int newResult; + assert insetObserver.getLastRawWindowInsets() != null 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 @@ -459,7 +507,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/values-sw600dp/dimens.xm diff --git a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml b/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml --- a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml +++ b/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml -@@ -10,8 +10,9 @@ found in the LICENSE file. +@@ -10,8 +10,10 @@ found in the LICENSE file. 10dp @@ -468,6 +516,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml b/chro + 0dp + 40dp + 0dp ++ 2dp 64dp @@ -547,48 +596,48 @@ diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/brow } /** Triggered when the content view for the specified tab has changed. */ +diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java +--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java ++++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/HeightTransitionHandler.java +@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.toolbar.top.ToolbarLayout; + import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripHeightObserver; + import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripTransitionDelegate; + import org.chromium.ui.base.ViewUtils; ++import org.chromium.ui.base.DeviceFormFactor; + import org.chromium.ui.resources.dynamics.DynamicResourceReadyOnceCallback; + + /** +@@ -450,6 +451,7 @@ class HeightTransitionHandler { + if (TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting != null) { + return TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting; + } ++ if (DeviceFormFactor.isForceTabletUI()) return 0; + return TRANSITION_THRESHOLD_DP; + } + } diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/tab_strip/TabStripTransitionCoordinator.java -@@ -151,7 +151,7 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea +@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderState; + import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils; + import org.chromium.chrome.browser.ui.desktop_windowing.DesktopWindowStateProvider; + import org.chromium.chrome.browser.ui.desktop_windowing.DesktopWindowStateProvider.AppHeaderObserver; ++import org.chromium.ui.base.DeviceFormFactor; + import org.chromium.ui.util.TokenHolder; + + /** Class used to manage tab strip visibility and height updates. */ +@@ -151,7 +152,10 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea mTabStripReservedTopPadding = controlContainerView() .getResources() - .getDimensionPixelSize(R.dimen.tab_strip_reserved_top_padding); -+ .getDimensionPixelSize(R.dimen.tab_strip_reserved_top_padding_cromite); ++ .getDimensionPixelSize( ++ DeviceFormFactor.isForceTabletUI() ++ ? R.dimen.tab_strip_reserved_top_padding_tabletui ++ : R.dimen.tab_strip_reserved_top_padding_cromite); mOnLayoutChangedListener = (view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> { -diff --git a/components/BUILD.gn b/components/BUILD.gn ---- a/components/BUILD.gn -+++ b/components/BUILD.gn -@@ -71,7 +71,7 @@ if (is_ios) { - - # Omit Lacros because it allows //components to depend on //chrome, which in - # turn depends on //extensions. --if (!is_chromeos_lacros) { -+if (!is_chromeos_lacros && !is_android) { - disallowed_extension_deps_ = [ - # Components should largely not depend on //extensions. Since // extensions - # is not a component target and is linked with //chrome, depending on most -@@ -877,7 +877,7 @@ test("components_unittests") { - # On other platforms, no components should depend on Chrome. - # Since //chrome depends on //extensions, we also only assert_no_deps on - # extensions targets for non-lacros builds. -- if (!is_chromeos_lacros) { -+ if (!is_chromeos_lacros && !is_android) { - assert_no_deps = [ "//chrome/*" ] - assert_no_deps += disallowed_extension_deps_ - } -@@ -1170,7 +1170,7 @@ if (use_blink) { - # dependency. On other platforms, no components should depend on Chrome. - # Since //chrome depends on //extensions, we also only assert_no_deps on - # extensions targets for non-lacros builds. -- if (!is_chromeos_lacros) { -+ if (!is_chromeos_lacros && !is_android) { - assert_no_deps = [ "//chrome/*" ] - assert_no_deps += disallowed_extension_deps_ - } 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 @@ -639,7 +688,7 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui /** See {@link #setIsTabletForTesting(boolean)}. */ private static Boolean sIsTabletForTesting; -+ private static boolean mForceTabletUI = true; ++ private static boolean mForceTabletUI = false; + public static void setForceTabletUI(boolean forceTabletUI) { + mForceTabletUI = forceTabletUI; + } @@ -650,7 +699,15 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui /** * Each activity could be on a different display, and this will just tell you whether the * display associated with the application context is "tablet sized". Use {@link -@@ -73,6 +81,7 @@ public class DeviceFormFactor { +@@ -43,6 +51,7 @@ public class DeviceFormFactor { + @CalledByNative + @Deprecated + public static boolean isTablet() { ++ if (mForceTabletUI) return true; + if (sIsTabletForTesting != null) { + return sIsTabletForTesting; + } +@@ -73,6 +82,7 @@ public class DeviceFormFactor { * E.g. http://developer.samsung.com/samsung-dex/testing */ public static boolean isNonMultiDisplayContextOnTablet(Context context) { @@ -658,4 +715,36 @@ diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET; } +@@ -108,6 +118,7 @@ public class DeviceFormFactor { + * @return The screen width bucket the device is in (see constants at the top of this class). + */ + private static int detectScreenWidthBucket(Context context) { ++ if (mForceTabletUI) return SCREEN_BUCKET_TABLET; + return context.getResources().getInteger(R.integer.min_screen_width_bucket); + } + +@@ -115,6 +126,7 @@ public class DeviceFormFactor { + ThreadUtils.assertOnUiThread(); + Context context = windowAndroid.getContext().get(); + if (context == null) return 0; ++ if (mForceTabletUI) return SCREEN_BUCKET_TABLET; + return context.getResources().getInteger(R.integer.min_screen_width_bucket); + } + +@@ -124,6 +136,7 @@ public class DeviceFormFactor { + */ + @UiThread + public static int getNonMultiDisplayMinimumTabletWidthPx(Context context) { ++ if (mForceTabletUI) return 0; + return getMinimumTabletWidthPx(DisplayAndroid.getNonMultiDisplay(context)); + } + +@@ -132,6 +145,7 @@ public class DeviceFormFactor { + * layout. + */ + public static int getMinimumTabletWidthPx(DisplayAndroid display) { ++ if (mForceTabletUI) return 0; + return DisplayUtil.dpToPx(display, DeviceFormFactor.MINIMUM_TABLET_WIDTH_DP); + } + } --