Add-option-to-force-tablet-UI.patch 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. From: Wengling Chen <feiyu2817@gmail.com>
  2. Date: Mon, 1 Feb 2021 19:18:55 +0200
  3. Subject: Add option to force tablet UI
  4. ---
  5. .../android/java/res/xml/accessibility_preferences.xml | 5 +++++
  6. .../accessibility/settings/AccessibilitySettings.java | 10 ++++++++++
  7. .../browser/preferences/ChromePreferenceKeys.java | 1 +
  8. .../preferences/LegacyChromePreferenceKeys.java | 1 +
  9. .../chrome/browser/omnibox/LocationBarCoordinator.java | 2 +-
  10. .../ui/android/strings/android_chrome_strings.grd | 6 ++++++
  11. .../browser/toolbar/top/ToolbarControlContainer.java | 2 +-
  12. components/BUILD.gn | 4 ++--
  13. ui/android/BUILD.gn | 2 ++
  14. .../src/org/chromium/ui/base/DeviceFormFactor.java | 5 +++++
  15. 10 files changed, 34 insertions(+), 4 deletions(-)
  16. diff --git a/chrome/android/java/res/xml/accessibility_preferences.xml b/chrome/android/java/res/xml/accessibility_preferences.xml
  17. --- a/chrome/android/java/res/xml/accessibility_preferences.xml
  18. +++ b/chrome/android/java/res/xml/accessibility_preferences.xml
  19. @@ -29,6 +29,11 @@
  20. android:key="captions"
  21. android:title="@string/accessibility_captions_title"/>
  22. + <org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference
  23. + android:key="force_tablet_ui"
  24. + android:summary="@string/force_tablet_ui_summary"
  25. + android:title="@string/force_tablet_ui_title" />
  26. +
  27. <Preference
  28. android:fragment="org.chromium.chrome.browser.image_descriptions.ImageDescriptionsSettings"
  29. android:key="image_descriptions"
  30. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
  31. --- a/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
  32. +++ b/chrome/android/java/src/org/chromium/chrome/browser/accessibility/settings/AccessibilitySettings.java
  33. @@ -37,6 +37,7 @@ public class AccessibilitySettings
  34. static final String PREF_IMAGE_DESCRIPTIONS = "image_descriptions";
  35. static final String PREF_ACCESSIBILITY_PAGE_ZOOM = "accessibility_page_zoom";
  36. + static final String PREF_FORCE_TABLET_UI = "force_tablet_ui";
  37. private TextScalePreference mTextScalePref;
  38. private ChromeBaseCheckBoxPreference mForceEnableZoomPref;
  39. private boolean mRecordFontSizeChangeOnStop;
  40. @@ -82,6 +83,12 @@ public class AccessibilitySettings
  41. .getBoolean(Pref.READER_FOR_ACCESSIBILITY));
  42. readerForAccessibilityPref.setOnPreferenceChangeListener(this);
  43. + ChromeBaseCheckBoxPreference forceTabletUiPref =
  44. + (ChromeBaseCheckBoxPreference) findPreference(PREF_FORCE_TABLET_UI);
  45. + forceTabletUiPref.setChecked(SharedPreferencesManager.getInstance().readBoolean(
  46. + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false));
  47. + forceTabletUiPref.setOnPreferenceChangeListener(this);
  48. +
  49. ChromeBaseCheckBoxPreference mAccessibilityTabSwitcherPref =
  50. (ChromeBaseCheckBoxPreference) findPreference(
  51. ChromePreferenceKeys.ACCESSIBILITY_TAB_SWITCHER);
  52. @@ -137,6 +144,9 @@ public class AccessibilitySettings
  53. mFontSizePrefs.setUserFontScaleFactor((Float) newValue);
  54. } else if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) {
  55. mFontSizePrefs.setForceEnableZoomFromUser((Boolean) newValue);
  56. + } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) {
  57. + SharedPreferencesManager.getInstance().writeBoolean(
  58. + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, (Boolean) newValue);
  59. } else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) {
  60. UserPrefs.get(Profile.getLastUsedRegularProfile())
  61. .setBoolean(Pref.READER_FOR_ACCESSIBILITY, (Boolean) newValue);
  62. 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
  63. --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
  64. +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceKeys.java
  65. @@ -543,6 +543,7 @@ public final class ChromePreferenceKeys {
  66. public static final String FONT_USER_SET_FORCE_ENABLE_ZOOM = "user_set_force_enable_zoom";
  67. public static final String HISTORY_SHOW_HISTORY_INFO = "history_home_show_info";
  68. + public static final String FLAGS_FORCE_TABLET_UI_ENABLED = "force_tablet_ui_enabled";
  69. /** Keys used to save settings related to homepage. */
  70. public static final String HOMEPAGE_CUSTOM_URI = "homepage_custom_uri";
  71. 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
  72. --- a/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
  73. +++ b/chrome/browser/preferences/android/java/src/org/chromium/chrome/browser/preferences/LegacyChromePreferenceKeys.java
  74. @@ -99,6 +99,7 @@ public class LegacyChromePreferenceKeys {
  75. ChromePreferenceKeys.FLAGS_CACHED_SWAP_PIXEL_FORMAT_TO_FIX_CONVERT_FROM_TRANSLUCENT,
  76. ChromePreferenceKeys.FLAGS_CACHED_TAB_GROUPS_ANDROID_ENABLED,
  77. ChromePreferenceKeys.FONT_USER_FONT_SCALE_FACTOR,
  78. + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED,
  79. ChromePreferenceKeys.FONT_USER_SET_FORCE_ENABLE_ZOOM,
  80. ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
  81. ChromePreferenceKeys.HOMEPAGE_CUSTOM_URI,
  82. 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
  83. --- a/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
  84. +++ b/chrome/browser/ui/android/omnibox/java/src/org/chromium/chrome/browser/omnibox/LocationBarCoordinator.java
  85. @@ -348,7 +348,7 @@ public final class LocationBarCoordinator implements LocationBar, NativeInitObse
  86. // OmniboxSuggestionsDropdownEmbedder implementation
  87. @Override
  88. public boolean isTablet() {
  89. - return DeviceFormFactor.isWindowOnTablet(mWindowAndroid);
  90. + return DeviceFormFactor.isWindowOnTablet(mWindowAndroid) || isTabletLayout();
  91. }
  92. @Override
  93. diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
  94. --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
  95. +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
  96. @@ -1223,6 +1223,12 @@ Your Google account may have other forms of browsing history like searches and a
  97. <message name="IDS_SAFE_BROWSING_NO_PROTECTION_CONFIRMATION_DIALOG_CONFIRM" desc="Message for Safe Browsing no protection confirmation button.">
  98. Turn off
  99. </message>
  100. + <message name="IDS_FORCE_TABLET_UI_SUMMARY" desc="Summary of the preference that allows the user to force chromium to use tablet UI.">
  101. + Open chromium in Tablet Mode
  102. + </message>
  103. + <message name="IDS_FORCE_TABLET_UI_TITLE" desc="Title of the preference that allows the user to update force tablet UI settings.">
  104. + Force Tablet Mode
  105. + </message>
  106. <!-- Accessibility preferences -->
  107. <message name="IDS_PREFS_ACCESSIBILITY" desc="Title of Accessibility settings, which allows the user to change webpage font sizes. [CHAR_LIMIT=32]">
  108. diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
  109. --- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
  110. +++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarControlContainer.java
  111. @@ -109,7 +109,7 @@ public class ToolbarControlContainer extends OptimizedFrameLayout implements Con
  112. // On tablet, draw a fake tab strip and toolbar until the compositor is
  113. // ready to draw the real tab strip. (On phone, the toolbar is made entirely
  114. // of Android views, which are already initialized.)
  115. - setBackgroundResource(R.drawable.toolbar_background);
  116. +// setBackgroundResource(R.drawable.toolbar_background);
  117. }
  118. }
  119. diff --git a/components/BUILD.gn b/components/BUILD.gn
  120. --- a/components/BUILD.gn
  121. +++ b/components/BUILD.gn
  122. @@ -549,7 +549,7 @@ test("components_unittests") {
  123. # On LaCrOS, tests use ash - chrome as a window manager, thus the dependency.
  124. # On other platforms, no components should depend on Chrome.
  125. - if (!is_chromeos_lacros) {
  126. + if (!is_chromeos_lacros && !is_android) {
  127. assert_no_deps = [ "//chrome/*" ]
  128. }
  129. @@ -798,7 +798,7 @@ if (!is_ios) {
  130. # On LaCrOS, tests use ash - chrome as a window manager, thus the dependency.
  131. # On other platforms, no components should depend on Chrome.
  132. - if (!is_chromeos_lacros) {
  133. + if (!is_chromeos_lacros && !is_android) {
  134. assert_no_deps = [ "//chrome/*" ]
  135. }
  136. }
  137. diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn
  138. --- a/ui/android/BUILD.gn
  139. +++ b/ui/android/BUILD.gn
  140. @@ -369,6 +369,8 @@ android_library("ui_no_recycler_view_java") {
  141. ":ui_java_resources",
  142. ":ui_utils_java",
  143. "//base:base_java",
  144. + # dependency for ui_no_recycler_view_java
  145. + "//chrome/browser/preferences:java",
  146. "//components/url_formatter/android:url_formatter_java",
  147. "//third_party/androidx:androidx_annotation_annotation_java",
  148. "//third_party/androidx:androidx_appcompat_appcompat_java",
  149. diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
  150. --- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
  151. +++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
  152. @@ -11,6 +11,8 @@ import androidx.annotation.UiThread;
  153. import org.chromium.base.ContextUtils;
  154. import org.chromium.base.ThreadUtils;
  155. import org.chromium.base.annotations.CalledByNative;
  156. +import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
  157. +import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
  158. import org.chromium.ui.R;
  159. import org.chromium.ui.display.DisplayAndroid;
  160. import org.chromium.ui.display.DisplayUtil;
  161. @@ -60,6 +62,9 @@ public class DeviceFormFactor {
  162. * E.g. http://developer.samsung.com/samsung-dex/testing
  163. */
  164. public static boolean isNonMultiDisplayContextOnTablet(Context context) {
  165. + if (SharedPreferencesManager.getInstance().readBoolean(
  166. + ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false))
  167. + return true;
  168. return detectScreenWidthBucket(context) >= SCREEN_BUCKET_TABLET;
  169. }
  170. --
  171. 2.20.1