290 lines
17 KiB
Diff
290 lines
17 KiB
Diff
From: Wengling Chen <feiyu2817@gmail.com>
|
|
Date: Mon, 1 Feb 2021 19:18:55 +0200
|
|
Subject: Add option to force tablet UI
|
|
|
|
License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
|
|
---
|
|
.../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++++++
|
|
.../browser/tasks/ReturnToChromeUtil.java | 4 +++-
|
|
.../chrome/browser/ui/RootUiCoordinator.java | 5 ++++-
|
|
chrome/browser/preferences/BUILD.gn | 1 +
|
|
.../preferences/ChromePreferenceKeys.java | 1 +
|
|
.../preferences/ChromeSharedPreferences.java | 8 ++++++++
|
|
.../LegacyChromePreferenceKeys.java | 1 +
|
|
.../omnibox/LocationBarCoordinator.java | 2 +-
|
|
.../strings/android_chrome_strings.grd | 7 +++++++
|
|
components/BUILD.gn | 6 +++---
|
|
.../res/xml/accessibility_preferences.xml | 5 +++++
|
|
.../accessibility/AccessibilitySettings.java | 10 ++++++++++
|
|
.../AccessibilitySettingsDelegate.java | 2 ++
|
|
.../chromium/ui/base/DeviceFormFactor.java | 6 ++++++
|
|
14 files changed, 71 insertions(+), 6 deletions(-)
|
|
|
|
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
|
|
@@ -94,6 +94,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
|
|
return new TextSizeContrastAccessibilityDelegate(getBrowserContextHandle());
|
|
}
|
|
|
|
+ private static class ForceTabletUIDelegate implements BooleanPreferenceDelegate {
|
|
+ @Override
|
|
+ public boolean isEnabled() {
|
|
+ return ChromeSharedPreferences.getInstance().readBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setEnabled(boolean value) {
|
|
+ ChromeSharedPreferences.getInstance().writeBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, value);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public BooleanPreferenceDelegate getForceTabletUIDelegate() {
|
|
+ return new ForceTabletUIDelegate();
|
|
+ }
|
|
+
|
|
@Override
|
|
public void addExtraPreferences(PreferenceFragmentCompat fragment) {
|
|
if (ImageDescriptionsController.getInstance().shouldShowImageDescriptionsMenuItem()) {
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
|
|
@@ -979,7 +979,9 @@ public final class ReturnToChromeUtil {
|
|
|
|
public static boolean isScrollableMvtEnabled(Context context) {
|
|
boolean isSurfacePolishEnabled = ChromeFeatureList.sSurfacePolish.isEnabled();
|
|
- if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(context)) {
|
|
+ if (!DeviceFormFactor.isNonMultiDisplayContextOnTablet(context) ||
|
|
+ ChromeSharedPreferences.getInstance().readBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) {
|
|
// On phones, parameter SURFACE_POLISH_SCROLLABLE_MVT is checked when feature flag
|
|
// surface polish is enabled; otherwise, feature flag
|
|
// SHOW_SCROLLABLE_MVT_ON_NTP_PHONE_ANDROID is checked.
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ui/RootUiCoordinator.java
|
|
@@ -98,6 +98,7 @@ import org.chromium.chrome.browser.paint_preview.DemoPaintPreview;
|
|
import org.chromium.chrome.browser.password_manager.ManagePasswordsReferrer;
|
|
import org.chromium.chrome.browser.password_manager.PasswordManagerLauncher;
|
|
import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
|
|
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
import org.chromium.chrome.browser.price_tracking.PriceTrackingButtonController;
|
|
import org.chromium.chrome.browser.profiles.Profile;
|
|
import org.chromium.chrome.browser.profiles.ProfileManager;
|
|
@@ -1595,7 +1596,9 @@ public class RootUiCoordinator
|
|
if (!mSupportsFindInPageSupplier.getAsBoolean()) return;
|
|
|
|
int stubId = R.id.find_toolbar_stub;
|
|
- if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity)) {
|
|
+ if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(mActivity) &&
|
|
+ !ChromeSharedPreferences.getInstance().readBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false)) {
|
|
stubId = R.id.find_toolbar_tablet_stub;
|
|
}
|
|
mFindToolbarManager =
|
|
diff --git a/chrome/browser/preferences/BUILD.gn b/chrome/browser/preferences/BUILD.gn
|
|
--- a/chrome/browser/preferences/BUILD.gn
|
|
+++ b/chrome/browser/preferences/BUILD.gn
|
|
@@ -26,6 +26,7 @@ android_library("java") {
|
|
"//components/browser_ui/site_settings/android:constants_java",
|
|
"//third_party/androidx:androidx_annotation_annotation_java",
|
|
"//third_party/jni_zero:jni_zero_java",
|
|
+ "//ui/android:ui_java",
|
|
]
|
|
|
|
srcjar_deps = [
|
|
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
|
|
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
|
|
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
|
|
@@ -270,6 +270,7 @@ public final class ChromePreferenceKeys {
|
|
AccessibilityConstants.FONT_USER_SET_FORCE_ENABLE_ZOOM;
|
|
|
|
public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info";
|
|
+ public static final String FLAGS_FORCE_TABLET_UI_ENABLED = "force_tablet_ui_enabled";
|
|
|
|
/** Keys used to save settings related to homepage. */
|
|
public static final String DEPRECATED_HOMEPAGE_CUSTOM_URI = "homepage_custom_uri";
|
|
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java
|
|
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java
|
|
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromeSharedPreferences.java
|
|
@@ -11,6 +11,8 @@ import org.chromium.base.shared_preferences.PreferenceKeyRegistry;
|
|
import org.chromium.base.shared_preferences.SharedPreferencesManager;
|
|
import org.chromium.build.BuildConfig;
|
|
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
+
|
|
@JNINamespace("android::shared_preferences")
|
|
public class ChromeSharedPreferences {
|
|
public static final PreferenceKeyRegistry REGISTRY =
|
|
@@ -22,6 +24,12 @@ public class ChromeSharedPreferences {
|
|
LegacyChromePreferenceKeys.getPrefixesInUse())
|
|
: null);
|
|
|
|
+ static {
|
|
+ DeviceFormFactor.setForceTabletUI(
|
|
+ ChromeSharedPreferences.getInstance().readBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false));
|
|
+ }
|
|
+
|
|
/**
|
|
* @return The //base SharedPreferencesManager singleton.
|
|
*/
|
|
diff --git a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
|
|
--- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
|
|
+++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
|
|
@@ -58,6 +58,7 @@ public class LegacyChromePreferenceKeys {
|
|
ChromePreferenceKeys.FIRST_RUN_LIGHTWEIGHT_FLOW_COMPLETE,
|
|
ChromePreferenceKeys.FIRST_RUN_SKIP_WELCOME_PAGE,
|
|
ChromePreferenceKeys.FONT_USER_FONT_SCALE_FACTOR,
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED,
|
|
ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM,
|
|
ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
|
|
ChromePreferenceKeys.HOMEPAGE_ENABLED,
|
|
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
|
|
@@ -771,7 +771,7 @@ public class LocationBarCoordinator
|
|
}
|
|
|
|
private boolean isTabletWindow() {
|
|
- return DeviceFormFactor.isWindowOnTablet(mWindowAndroid);
|
|
+ return DeviceFormFactor.isWindowOnTablet(mWindowAndroid) || isTabletLayout();
|
|
}
|
|
|
|
/* package */ LocationBarMediator getMediatorForTesting() {
|
|
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
|
|
@@ -1564,6 +1564,13 @@ Your Google account may have other forms of browsing history like searches and a
|
|
Manage third-party cookies and tracking protections
|
|
</message>
|
|
|
|
+ <message name="IDS_FORCE_TABLET_UI_SUMMARY" desc="Summary of the preference that allows the user to force chromium to use tablet UI.">
|
|
+ Open chromium in Tablet Mode
|
|
+ </message>
|
|
+ <message name="IDS_FORCE_TABLET_UI_TITLE" desc="Title of the preference that allows the user to update force tablet UI settings.">
|
|
+ Force Tablet Mode
|
|
+ </message>
|
|
+
|
|
<!-- Safety check -->
|
|
<message name="IDS_PREFS_SAFETY_CHECK" desc="Title of the Safety check element in settings, allowing the user to check multiple areas of browser safety. [CHAR_LIMIT=32]">
|
|
Safety check
|
|
diff --git a/components/BUILD.gn b/components/BUILD.gn
|
|
--- a/components/BUILD.gn
|
|
+++ b/components/BUILD.gn
|
|
@@ -69,7 +69,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
|
|
@@ -831,7 +831,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_
|
|
}
|
|
@@ -1113,7 +1113,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
|
|
@@ -40,6 +40,11 @@ found in the LICENSE file.
|
|
android:summary="@string/reader_for_accessibility_summary"
|
|
android:title="@string/reader_for_accessibility_title" />
|
|
|
|
+ <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
|
|
+ android:key="force_tablet_ui"
|
|
+ android:summary="@string/force_tablet_ui_summary"
|
|
+ android:title="@string/force_tablet_ui_title" />
|
|
+
|
|
<Preference
|
|
android:key="captions"
|
|
android:title="@string/accessibility_captions_title"/>
|
|
diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
|
|
--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
|
|
+++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettings.java
|
|
@@ -32,6 +32,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
|
|
public static final String PREF_CAPTIONS = "captions";
|
|
public static final String PREF_ZOOM_INFO = "zoom_info";
|
|
|
|
+ private BooleanPreferenceDelegate mForceTabletUIDelegate;
|
|
+ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui";
|
|
private TextScalePreference mTextScalePref;
|
|
private PageZoomPreference mPageZoomDefaultZoomPref;
|
|
private ChromeSwitchPreference mPageZoomIncludeOSAdjustment;
|
|
@@ -129,6 +131,12 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
|
|
getPreferenceScreen().removePreference(readerForAccessibilityPref);
|
|
}
|
|
|
|
+ ChromeSwitchPreference forceTabletUiPref =
|
|
+ (ChromeSwitchPreference) findPreference(PREF_FORCE_TABLET_UI);
|
|
+ mForceTabletUIDelegate = mDelegate.getForceTabletUIDelegate();
|
|
+ forceTabletUiPref.setChecked(mForceTabletUIDelegate.isEnabled());
|
|
+ forceTabletUiPref.setOnPreferenceChangeListener(this);
|
|
+
|
|
Preference captions = findPreference(PREF_CAPTIONS);
|
|
captions.setOnPreferenceClickListener(
|
|
preference -> {
|
|
@@ -190,6 +198,8 @@ public class AccessibilitySettings extends PreferenceFragmentCompat
|
|
mFontSizePrefs.setUserFontScaleFactor((Float) newValue);
|
|
} else if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) {
|
|
mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue);
|
|
+ } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) {
|
|
+ mForceTabletUIDelegate.setEnabled((Boolean) newValue);
|
|
} else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) {
|
|
if (mReaderForAccessibilityDelegate != null) {
|
|
mReaderForAccessibilityDelegate.setEnabled((Boolean) newValue);
|
|
diff --git a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
|
|
--- a/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
|
|
+++ b/components/browser_ui/accessibility/android/java/src/org/chromium/components/browser_ui/accessibility/AccessibilitySettingsDelegate.java
|
|
@@ -52,6 +52,8 @@ public interface AccessibilitySettingsDelegate {
|
|
*/
|
|
IntegerPreferenceDelegate getTextSizeContrastAccessibilityDelegate();
|
|
|
|
+ BooleanPreferenceDelegate getForceTabletUIDelegate();
|
|
+
|
|
/**
|
|
* Allows the embedder to add more preferences to the preference screen.
|
|
*
|
|
diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
|
|
--- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
|
|
+++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
|
|
@@ -31,6 +31,11 @@ public class DeviceFormFactor {
|
|
/** Matches the value set in res/values-sw720dp/values.xml */
|
|
private static final int SCREEN_BUCKET_LARGET_TABLET = 3;
|
|
|
|
+ private static boolean mForceTabletUI;
|
|
+ public static void setForceTabletUI(boolean forceTabletUI) {
|
|
+ mForceTabletUI = forceTabletUI;
|
|
+ }
|
|
+
|
|
/**
|
|
* 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".
|
|
@@ -56,6 +61,7 @@ public class DeviceFormFactor {
|
|
* E.g. http://developer.samsung.com/samsung-dex/testing
|
|
*/
|
|
public static boolean isNonMultiDisplayContextOnTablet(Context context) {
|
|
+ if (mForceTabletUI) return true;
|
|
return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET;
|
|
}
|
|
|
|
--
|