Add option to force tablet UI: fix initialization of ChromeSharedPreferences (#1565)

fix tab strip display (#1421)
This commit is contained in:
Carmelo Messina
2024-10-20 19:00:09 +02:00
parent 00f5239a3c
commit 3512484e44
+148 -59
View File
@@ -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
<!-- Find in Page dimensions -->
<dimen name="find_in_page_popup_width">375dp</dimen>
<dimen name="find_in_page_popup_height">60dp</dimen>
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.
<dimen name="toolbar_tab_count_text_size_2_digit">10dp</dimen>
<!-- Tab Strip Dimensions -->
@@ -468,6 +516,7 @@ diff --git a/chrome/browser/ui/android/toolbar/java/res/values/dimens.xml b/chro
+ <dimen name="tab_strip_height_cromite">0dp</dimen>
+ <dimen name="tab_strip_height_tabletui">40dp</dimen>
+ <dimen name="tab_strip_reserved_top_padding_cromite">0dp</dimen>
+ <dimen name="tab_strip_reserved_top_padding_tabletui">2dp</dimen>
<dimen name="ntp_search_box_height">64dp</dimen>
@@ -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);
}
}
--