701 lines
42 KiB
Diff
701 lines
42 KiB
Diff
From: uazo <uazo@users.noreply.github.com>
|
|
Date: Sun, 5 May 2024 09:34:39 +0000
|
|
Subject: Add option to force tablet UI
|
|
|
|
License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html
|
|
---
|
|
.../layout/custom_tabs_control_container.xml | 2 +-
|
|
.../java/res/layout/recent_tabs_page.xml | 2 +-
|
|
.../java/res/values-sw600dp/dimens.xml | 3 ++-
|
|
chrome/android/java/res/values/dimens.xml | 3 ++-
|
|
.../browser/ChromeBaseAppCompatActivity.java | 3 +++
|
|
.../chrome/browser/WarmupManager.java | 7 +++++--
|
|
.../ChromeAccessibilitySettingsDelegate.java | 19 +++++++++++++++++++
|
|
.../chrome/browser/app/ChromeActivity.java | 5 ++++-
|
|
.../overlays/strip/StripLayoutHelper.java | 1 +
|
|
.../strip/StripLayoutHelperManager.java | 6 +++++-
|
|
.../scene_layer/TabStripSceneLayer.java | 8 ++++++++
|
|
.../init/ChromeBrowserInitializer.java | 2 ++
|
|
.../tabbed_mode/TabbedRootUiCoordinator.java | 4 +++-
|
|
.../chrome/browser/ui/RootUiCoordinator.java | 6 +++++-
|
|
chrome/browser/preferences/BUILD.gn | 1 +
|
|
.../preferences/ChromePreferenceKeys.java | 1 +
|
|
.../preferences/ChromeSharedPreferences.java | 12 ++++++++++++
|
|
.../LegacyChromePreferenceKeys.java | 1 +
|
|
.../ui/desktop_windowing/AppHeaderUtils.java | 2 ++
|
|
.../omnibox/LocationBarCoordinator.java | 2 +-
|
|
.../strings/android_chrome_strings.grd | 7 +++++++
|
|
.../java/res/layout/control_container.xml | 8 ++++----
|
|
.../java/res/layout/toolbar_tablet.xml | 2 +-
|
|
.../java/res/values-sw600dp/dimens.xml | 5 +++--
|
|
.../toolbar/java/res/values/dimens.xml | 6 ++++--
|
|
.../toolbar/top/ToolbarControlContainer.java | 6 ++++++
|
|
.../browser/toolbar/top/ToolbarLayout.java | 5 ++++-
|
|
.../tab_strip/HeightTransitionHandler.java | 2 ++
|
|
.../TabStripTransitionCoordinator.java | 6 +++++-
|
|
.../res/xml/accessibility_preferences.xml | 5 +++++
|
|
.../accessibility/AccessibilitySettings.java | 13 +++++++++++++
|
|
.../AccessibilitySettingsDelegate.java | 2 ++
|
|
.../chromium/ui/base/DeviceFormFactor.java | 14 ++++++++++++++
|
|
33 files changed, 149 insertions(+), 22 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
|
|
+++ b/chrome/android/java/res/layout/custom_tabs_control_container.xml
|
|
@@ -31,7 +31,7 @@ found in the LICENSE file.
|
|
android:id="@+id/find_toolbar_stub"
|
|
android:inflatedId="@+id/find_toolbar"
|
|
android:visibility="gone"
|
|
- android:layout_marginTop="@dimen/tab_strip_height"
|
|
+ android:layout_marginTop="@dimen/tab_strip_height_cromite"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="@dimen/custom_tabs_control_container_height"
|
|
android:layout="@layout/find_toolbar" />
|
|
diff --git a/chrome/android/java/res/layout/recent_tabs_page.xml b/chrome/android/java/res/layout/recent_tabs_page.xml
|
|
--- a/chrome/android/java/res/layout/recent_tabs_page.xml
|
|
+++ b/chrome/android/java/res/layout/recent_tabs_page.xml
|
|
@@ -11,7 +11,7 @@ found in the LICENSE file.
|
|
android:id="@+id/history_navigation"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
- android:paddingTop="@dimen/tab_strip_height" >
|
|
+ android:paddingTop="@dimen/tab_strip_height_cromite" >
|
|
|
|
<org.chromium.chrome.browser.ntp.NativePageRootFrameLayout
|
|
android:id="@+id/recent_tabs_root"
|
|
diff --git a/chrome/android/java/res/values-sw600dp/dimens.xml b/chrome/android/java/res/values-sw600dp/dimens.xml
|
|
--- a/chrome/android/java/res/values-sw600dp/dimens.xml
|
|
+++ b/chrome/android/java/res/values-sw600dp/dimens.xml
|
|
@@ -14,7 +14,8 @@ found in the LICENSE file.
|
|
<dimen name="compositor_tab_title_text_size">14sp</dimen>
|
|
|
|
<!-- Full Screen Dimensions -->
|
|
- <dimen name="control_container_height">96dp</dimen>
|
|
+ <dimen name="control_container_height_cromite">96dp</dimen>
|
|
+ <dimen name="control_container_height_tabletui">56dp</dimen>
|
|
|
|
<!-- NTP dimensions -->
|
|
<dimen name="ntp_search_box_transition_start_offset">60dp</dimen>
|
|
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml
|
|
--- a/chrome/android/java/res/values/dimens.xml
|
|
+++ b/chrome/android/java/res/values/dimens.xml
|
|
@@ -116,7 +116,8 @@ found in the LICENSE file.
|
|
<dimen name="signin_screen_top_padding">50dp</dimen>
|
|
|
|
<!-- Should match toolbar_height_no_shadow -->
|
|
- <dimen name="control_container_height">@dimen/default_action_bar_height</dimen>
|
|
+ <dimen name="control_container_height_cromite">@dimen/default_action_bar_height</dimen>
|
|
+ <dimen name="control_container_height_tabletui">56dp</dimen>
|
|
<dimen name="custom_tabs_control_container_height">@dimen/default_action_bar_height</dimen>
|
|
|
|
<!-- Find in Page dimensions -->
|
|
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
|
|
@@ -65,6 +65,7 @@ import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeController;
|
|
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeControllerCreator;
|
|
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeFieldTrialImpl;
|
|
import org.chromium.chrome.browser.ui.edge_to_edge.EdgeToEdgeUtils;
|
|
+import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
|
|
import org.chromium.chrome.browser.ui.edge_to_edge.SimpleEdgeToEdgeController;
|
|
import org.chromium.components.browser_ui.styles.SemanticColorUtils;
|
|
import org.chromium.components.browser_ui.util.AutomotiveUtils;
|
|
@@ -154,6 +155,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
|
|
@@ -64,6 +64,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer;
|
|
import org.chromium.components.embedder_support.util.UrlConstants;
|
|
import org.chromium.content_public.browser.WebContents;
|
|
import org.chromium.ui.LayoutInflaterUtils;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.base.WindowAndroid;
|
|
import org.chromium.ui.display.DisplayUtil;
|
|
import org.chromium.url.GURL;
|
|
@@ -475,8 +476,10 @@ public class WarmupManager {
|
|
ControlContainer controlContainer = mainView.findViewById(R.id.control_container);
|
|
|
|
if (toolbarId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) {
|
|
- controlContainer.initWithToolbar(
|
|
- toolbarId, R.dimen.custom_tabs_control_container_height);
|
|
+ controlContainer.initWithToolbar(toolbarId,
|
|
+ DeviceFormFactor.isForceTabletUI()
|
|
+ ? R.dimen.control_container_height_tabletui
|
|
+ : R.dimen.custom_tabs_control_container_height);
|
|
}
|
|
return mainView;
|
|
} catch (InflateException e) {
|
|
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
|
|
@@ -67,6 +67,25 @@ public class ChromeAccessibilitySettingsDelegate implements AccessibilitySetting
|
|
}
|
|
}
|
|
|
|
+ private static class ForceTabletUIDelegate implements BooleanPreferenceDelegate {
|
|
+ @Override
|
|
+ public boolean getValue() {
|
|
+ return ChromeSharedPreferences.getInstance().readBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setValue(boolean value) {
|
|
+ ChromeSharedPreferences.getInstance().writeBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, value);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public BooleanPreferenceDelegate getForceTabletUIDelegate() {
|
|
+ return new ForceTabletUIDelegate();
|
|
+ }
|
|
+
|
|
private final Profile mProfile;
|
|
|
|
/**
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
|
|
@@ -850,7 +850,10 @@ public abstract class ChromeActivity extends AsyncInitializationActivity
|
|
// Inflate the correct toolbar layout for the device.
|
|
int toolbarLayoutId = getToolbarLayoutId();
|
|
if (toolbarLayoutId != ActivityUtils.NO_RESOURCE_ID && controlContainer != null) {
|
|
- controlContainer.initWithToolbar(toolbarLayoutId, getToolbarLayoutHeightResId());
|
|
+ controlContainer.initWithToolbar(toolbarLayoutId,
|
|
+ DeviceFormFactor.isForceTabletUI()
|
|
+ ? R.dimen.control_container_height_tabletui
|
|
+ : getToolbarLayoutHeightResId());
|
|
}
|
|
onInitialLayoutInflationComplete();
|
|
}
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/overlays/strip/StripLayoutHelper.java
|
|
@@ -138,6 +138,7 @@ import org.chromium.components.tab_group_sync.TabGroupSyncService;
|
|
import org.chromium.components.tab_group_sync.TriggerSource;
|
|
import org.chromium.components.tab_groups.TabGroupColorId;
|
|
import org.chromium.ui.accessibility.AccessibilityState;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.base.LocalizationUtils;
|
|
import org.chromium.ui.base.WindowAndroid;
|
|
import org.chromium.ui.util.ColorUtils;
|
|
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
|
|
@@ -118,6 +118,7 @@ import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateMa
|
|
import org.chromium.components.browser_ui.styles.SemanticColorUtils;
|
|
import org.chromium.components.browser_ui.widget.gesture.BackPressHandler;
|
|
import org.chromium.content_public.browser.LoadUrlParams;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.base.LocalizationUtils;
|
|
import org.chromium.ui.base.PageTransition;
|
|
import org.chromium.ui.base.WindowAndroid;
|
|
@@ -584,7 +585,10 @@ public class StripLayoutHelperManager
|
|
mIsHeaderCustomizationSupported =
|
|
ToolbarFeatures.isAppHeaderCustomizationSupported(
|
|
/* isTablet= */ true, DisplayUtil.isContextInDefaultDisplay(mContext));
|
|
- mScrollableStripHeight = res.getDimension(R.dimen.tab_strip_height) / mDensity;
|
|
+ mScrollableStripHeight =
|
|
+ (DeviceFormFactor.isForceTabletUI()
|
|
+ ? res.getDimension(R.dimen.tab_strip_height_tabletui)
|
|
+ : res.getDimension(R.dimen.tab_strip_height_cromite)) / mDensity;
|
|
mHeight =
|
|
mIsHeaderCustomizationSupported
|
|
? toolbarManager.getTabStripHeightSupplier().get() / mDensity
|
|
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java
|
|
--- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java
|
|
+++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/scene_layer/TabStripSceneLayer.java
|
|
@@ -124,6 +124,14 @@ public class TabStripSceneLayer extends SceneOverlayLayer {
|
|
if (mNativePtr == 0) return;
|
|
final boolean visible = yOffset > -layoutHelper.getHeight();
|
|
|
|
+ if (DeviceFormFactor.isNonMultiDisplayContextOnTablet(ContextUtils.getApplicationContext())) {
|
|
+ TintedCompositorButton newTabButton = layoutHelper.getNewTabButton();
|
|
+ if (newTabButton.isVisible()) {
|
|
+ rightPaddingDp += newTabButton.getWidth() + layoutHelper.getNewTabBtnVisualOffset()
|
|
+ + StripLayoutGroupTitle.REORDER_BACKGROUND_PADDING_END;
|
|
+ }
|
|
+ }
|
|
+
|
|
// This will hide the tab strips if necessary.
|
|
TabStripSceneLayerJni.get()
|
|
.beginBuildingFrame(mNativePtr, visible, resourceManager, layerTitleCache);
|
|
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
|
|
@@ -18,6 +18,7 @@ import org.chromium.base.task.TaskTraits;
|
|
import org.chromium.build.annotations.NullMarked;
|
|
import org.chromium.build.annotations.Nullable;
|
|
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;
|
|
@@ -110,6 +111,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
|
|
@@ -934,7 +934,9 @@ public class TabbedRootUiCoordinator extends RootUiCoordinator {
|
|
|
|
@Override
|
|
public int getControlContainerHeightResource() {
|
|
- return R.dimen.control_container_height;
|
|
+ if (DeviceFormFactor.isForceTabletUI())
|
|
+ return R.dimen.control_container_height_tabletui;
|
|
+ return R.dimen.control_container_height_cromite;
|
|
}
|
|
|
|
@Override
|
|
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
|
|
@@ -135,6 +135,8 @@ 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.pdf.PdfPage;
|
|
+import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
|
|
+import org.chromium.chrome.browser.preferences.ChromeSharedPreferences;
|
|
import org.chromium.chrome.browser.profiles.Profile;
|
|
import org.chromium.chrome.browser.quick_delete.QuickDeleteController;
|
|
import org.chromium.chrome.browser.quick_delete.QuickDeleteDelegateImpl;
|
|
@@ -2096,7 +2098,9 @@ public class RootUiCoordinator
|
|
|
|
protected int getFindToolbarStub() {
|
|
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;
|
|
}
|
|
return stubId;
|
|
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
|
|
@@ -27,6 +27,7 @@ android_library("java") {
|
|
"//components/cached_flags: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
|
|
@@ -413,6 +413,7 @@ public final class ChromePreferenceKeys {
|
|
/** Whether the app-specific history info text was already seen by users. */
|
|
public static final String HISTORY_APP_SPECIFIC_INFO_SEEN =
|
|
"Chrome.History.AppSpecificInfoSeen";
|
|
+ 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
|
|
@@ -14,6 +14,8 @@ import org.chromium.build.annotations.NullMarked;
|
|
import org.chromium.build.annotations.Nullable;
|
|
import org.chromium.build.annotations.OptimizeAsNonNull;
|
|
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
+
|
|
@JNINamespace("android::shared_preferences")
|
|
@NullMarked
|
|
public class ChromeSharedPreferences {
|
|
@@ -26,6 +28,16 @@ public class ChromeSharedPreferences {
|
|
LegacyChromePreferenceKeys.getPrefixesInUse())
|
|
: null);
|
|
|
|
+ static {
|
|
+ DeviceFormFactor.setForceTabletUI(
|
|
+ ChromeSharedPreferences.getInstance().readBoolean(
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED, false));
|
|
+ }
|
|
+
|
|
+ public static void warmUp() {
|
|
+ // intentionally empty
|
|
+ }
|
|
+
|
|
/**
|
|
* @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
|
|
@@ -56,6 +56,7 @@ public class LegacyChromePreferenceKeys {
|
|
ChromePreferenceKeys.FIRST_RUN_FLOW_COMPLETE,
|
|
ChromePreferenceKeys.FIRST_RUN_FLOW_SIGNIN_SETUP,
|
|
ChromePreferenceKeys.FIRST_RUN_LIGHTWEIGHT_FLOW_COMPLETE,
|
|
+ ChromePreferenceKeys.FLAGS_FORCE_TABLET_UI_ENABLED,
|
|
ChromePreferenceKeys.FIRST_RUN_SKIP_WELCOME_PAGE,
|
|
ChromePreferenceKeys.HISTORY_SHOW_HISTORY_INFO,
|
|
ChromePreferenceKeys.HOMEPAGE_ENABLED,
|
|
diff --git a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java
|
|
--- a/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java
|
|
+++ b/chrome/browser/ui/android/desktop_windowing/java/src/org/chromium/chrome/browser/ui/desktop_windowing/AppHeaderUtils.java
|
|
@@ -20,6 +20,7 @@ import org.chromium.build.annotations.Nullable;
|
|
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
|
|
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher.ActivityState;
|
|
import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.display.DisplayUtil;
|
|
import org.chromium.ui.insets.InsetsRectProvider;
|
|
|
|
@@ -169,6 +170,7 @@ public class AppHeaderUtils {
|
|
*/
|
|
static @DesktopWindowHeuristicResult int checkIsInDesktopWindow(
|
|
InsetsRectProvider insetsRectProvider, Context context) {
|
|
+ if (DeviceFormFactor.isForceTabletUI()) return DesktopWindowHeuristicResult.IN_DESKTOP_WINDOW;
|
|
@DesktopWindowHeuristicResult int newResult;
|
|
|
|
boolean isOnExternalDisplay = !DisplayUtil.isContextInDefaultDisplay(context);
|
|
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
|
|
@@ -1050,7 +1050,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
|
|
@@ -1635,6 +1635,13 @@ Your Google account may have other forms of browsing history like searches and a
|
|
Privacy guide explanation closed
|
|
</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/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml b/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml
|
|
--- a/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml
|
|
+++ b/chrome/browser/ui/android/toolbar/java/res/layout/control_container.xml
|
|
@@ -9,7 +9,7 @@ found in the LICENSE file.
|
|
android:id="@+id/control_container"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
- android:minHeight="@dimen/control_container_height">
|
|
+ android:minHeight="@dimen/control_container_height_cromite">
|
|
|
|
<view
|
|
class="org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer$ToolbarViewResourceCoordinatorLayout"
|
|
@@ -20,7 +20,7 @@ found in the LICENSE file.
|
|
<ViewStub
|
|
android:id="@+id/toolbar_stub"
|
|
android:layout_width="match_parent"
|
|
- android:layout_marginTop="@dimen/tab_strip_height"
|
|
+ android:layout_marginTop="@dimen/tab_strip_height_cromite"
|
|
android:layout_marginBottom="@dimen/toolbar_hairline_height"
|
|
android:layout_height="@dimen/toolbar_height_no_shadow" />
|
|
|
|
@@ -30,13 +30,13 @@ found in the LICENSE file.
|
|
android:layout_height="wrap_content"
|
|
android:layout_gravity="bottom"
|
|
app:layout_anchorGravity="bottom"
|
|
- />
|
|
+ android:layout_marginTop="@dimen/control_container_height_cromite" />
|
|
|
|
<ViewStub
|
|
android:id="@+id/find_toolbar_stub"
|
|
android:inflatedId="@+id/find_toolbar"
|
|
android:visibility="gone"
|
|
- android:layout_marginTop="@dimen/tab_strip_height"
|
|
+ android:layout_marginTop="@dimen/tab_strip_height_cromite"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="@dimen/toolbar_height_no_shadow"
|
|
android:layout="@layout/find_toolbar" />
|
|
diff --git a/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml b/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml
|
|
--- a/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml
|
|
+++ b/chrome/browser/ui/android/toolbar/java/res/layout/toolbar_tablet.xml
|
|
@@ -14,7 +14,7 @@ found in the LICENSE file.
|
|
android:id="@+id/toolbar"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="@dimen/toolbar_height_no_shadow"
|
|
- android:layout_marginTop="@dimen/tab_strip_height"
|
|
+ android:layout_marginTop="@dimen/tab_strip_height_tabletui"
|
|
android:background="@macro/default_bg_color"
|
|
>
|
|
|
|
diff --git a/chrome/browser/ui/android/toolbar/java/res/values-sw600dp/dimens.xml b/chrome/browser/ui/android/toolbar/java/res/values-sw600dp/dimens.xml
|
|
--- a/chrome/browser/ui/android/toolbar/java/res/values-sw600dp/dimens.xml
|
|
+++ b/chrome/browser/ui/android/toolbar/java/res/values-sw600dp/dimens.xml
|
|
@@ -7,6 +7,7 @@ found in the LICENSE file.
|
|
|
|
<resources>
|
|
<!-- Tab Strip Dimensions -->
|
|
- <dimen name="tab_strip_height">40dp</dimen>
|
|
- <dimen name="tab_strip_reserved_top_padding">2dp</dimen>
|
|
+ <dimen name="tab_strip_height_cromite">40dp</dimen>
|
|
+ <dimen name="tab_strip_height_tabletui">40dp</dimen>
|
|
+ <dimen name="tab_strip_reserved_top_padding_cromite">2dp</dimen>
|
|
</resources>
|
|
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,10 @@ found in the LICENSE file.
|
|
<dimen name="toolbar_tab_count_text_size_2_digit">9dp</dimen>
|
|
|
|
<!-- Tab Strip Dimensions -->
|
|
- <dimen name="tab_strip_height">0dp</dimen>
|
|
- <dimen name="tab_strip_reserved_top_padding">0dp</dimen>
|
|
+ <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>
|
|
<dimen name="ntp_search_box_height_tall">72dp</dimen>
|
|
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
|
|
--- 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
|
|
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.toolbar.top;
|
|
import static org.chromium.build.NullUtil.assumeNonNull;
|
|
|
|
import android.content.Context;
|
|
+import android.content.res.Resources;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Color;
|
|
import android.graphics.PorterDuff;
|
|
@@ -176,6 +177,11 @@ public class ToolbarControlContainer extends OptimizedFrameLayout
|
|
@Initializer
|
|
public void initWithToolbar(int toolbarLayoutId, int toolbarLayoutHeightResId) {
|
|
try (TraceEvent te = TraceEvent.scoped("ToolbarControlContainer.initWithToolbar")) {
|
|
+ if (DeviceFormFactor.isForceTabletUI() && toolbarLayoutHeightResId != 0) {
|
|
+ toolbarLayoutHeightResId = R.dimen.control_container_height_tabletui;
|
|
+ Resources res = getContext().getResources();
|
|
+ setMinimumHeight((int) res.getDimension(toolbarLayoutHeightResId));
|
|
+ }
|
|
mToolbarContainer = findViewById(R.id.toolbar_container);
|
|
mToolbarLayoutHeight = getResources().getDimensionPixelSize(toolbarLayoutHeightResId);
|
|
ViewStub toolbarStub = findViewById(R.id.toolbar_stub);
|
|
diff --git a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
|
|
--- a/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
|
|
+++ b/chrome/browser/ui/android/toolbar/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarLayout.java
|
|
@@ -67,6 +67,7 @@ import org.chromium.chrome.browser.util.BrowserUiUtils.ModuleTypeOnStartAndNtp;
|
|
import org.chromium.components.feature_engagement.Tracker;
|
|
import org.chromium.ui.base.ViewUtils;
|
|
import org.chromium.ui.util.MotionEventUtils;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.util.TokenHolder;
|
|
import org.chromium.url.GURL;
|
|
|
|
@@ -599,7 +600,9 @@ public abstract class ToolbarLayout extends FrameLayout
|
|
* @see Toolbar#getTabStripHeight()
|
|
*/
|
|
public int getTabStripHeightFromResource() {
|
|
- return getResources().getDimensionPixelSize(R.dimen.tab_strip_height);
|
|
+ if (DeviceFormFactor.isForceTabletUI())
|
|
+ return getResources().getDimensionPixelSize(R.dimen.tab_strip_height_tabletui);
|
|
+ return getResources().getDimensionPixelSize(R.dimen.tab_strip_height_cromite);
|
|
}
|
|
|
|
/** 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
|
|
@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.toolbar.ControlContainer;
|
|
import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripTransitionDelegate;
|
|
import org.chromium.chrome.browser.toolbar.top.tab_strip.TabStripTransitionCoordinator.TabStripTransitionHandler;
|
|
import org.chromium.ui.base.ViewUtils;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
import org.chromium.ui.resources.dynamics.DynamicResourceReadyOnceCallback;
|
|
import org.chromium.ui.util.TokenHolder;
|
|
|
|
@@ -514,6 +515,7 @@ class HeightTransitionHandler {
|
|
|
|
/** Get the min screen width (in dp) required for the tab strip to become visible. */
|
|
private static int getScreenWidthThresholdDp() {
|
|
+ if (DeviceFormFactor.isForceTabletUI()) return 0;
|
|
if (TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting != null) {
|
|
return TabStripTransitionCoordinator.sHeightTransitionThresholdForTesting;
|
|
}
|
|
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
|
|
@@ -25,6 +25,7 @@ import org.chromium.chrome.browser.ui.desktop_windowing.AppHeaderUtils;
|
|
import org.chromium.components.browser_ui.desktop_windowing.AppHeaderState;
|
|
import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager;
|
|
import org.chromium.components.browser_ui.desktop_windowing.DesktopWindowStateManager.AppHeaderObserver;
|
|
+import org.chromium.ui.base.DeviceFormFactor;
|
|
|
|
/**
|
|
* Class used to manage tab strip visibility and height updates.
|
|
@@ -171,7 +172,10 @@ public class TabStripTransitionCoordinator implements ComponentCallbacks, AppHea
|
|
mTabStripReservedTopPadding =
|
|
controlContainerView()
|
|
.getResources()
|
|
- .getDimensionPixelSize(R.dimen.tab_strip_reserved_top_padding);
|
|
+ .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/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
|
|
@@ -46,6 +46,11 @@ found in the LICENSE file.
|
|
android:summary="@string/caret_browsing_summary"
|
|
android:title="@string/caret_browsing_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
|
|
@@ -39,6 +39,7 @@ import org.chromium.content_public.browser.ContentFeatureMap;
|
|
import org.chromium.ui.base.UiAndroidFeatureList;
|
|
|
|
import org.chromium.chrome.browser.settings.ChromeBaseSettingsFragment;
|
|
+import org.chromium.components.browser_ui.accessibility.AccessibilitySettingsDelegate.BooleanPreferenceDelegate;
|
|
|
|
/** Fragment to keep track of all the accessibility related preferences. */
|
|
@NullMarked
|
|
@@ -80,6 +81,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment
|
|
}
|
|
};
|
|
|
|
+ private BooleanPreferenceDelegate mForceTabletUIDelegate;
|
|
+ static final String PREF_FORCE_TABLET_UI = "force_tablet_ui";
|
|
+
|
|
private PageZoomPreference mPageZoomDefaultZoomPref;
|
|
private ChromeSwitchPreference mPageZoomIncludeOSAdjustment;
|
|
private ChromeSwitchPreference mPageZoomAlwaysShowPref;
|
|
@@ -167,6 +171,12 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment
|
|
readerEnableLinks.setOnPreferenceChangeListener(this);
|
|
}
|
|
|
|
+ ChromeSwitchPreference forceTabletUiPref =
|
|
+ (ChromeSwitchPreference) findPreference(PREF_FORCE_TABLET_UI);
|
|
+ mForceTabletUIDelegate = mDelegate.getForceTabletUIDelegate();
|
|
+ forceTabletUiPref.setChecked(mForceTabletUIDelegate.getValue());
|
|
+ forceTabletUiPref.setOnPreferenceChangeListener(this);
|
|
+
|
|
Preference captions = findPreference(PREF_CAPTIONS);
|
|
captions.setOnPreferenceClickListener(
|
|
preference -> {
|
|
@@ -262,6 +272,9 @@ public class AccessibilitySettings extends ChromeBaseSettingsFragment
|
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
if (PREF_FORCE_ENABLE_ZOOM.equals(preference.getKey())) {
|
|
mDelegate.getForceEnableZoomAccessibilityDelegate().setValue((Boolean) newValue);
|
|
+ } else if (PREF_FORCE_TABLET_UI.equals(preference.getKey())) {
|
|
+ mForceTabletUIDelegate.setValue((Boolean) newValue);
|
|
+ mDelegate.requestRestart(getActivity());
|
|
} else if (PREF_READER_FOR_ACCESSIBILITY.equals(preference.getKey())) {
|
|
boolean readerModeEnabled = (Boolean) newValue;
|
|
mDelegate.getReaderAccessibilityDelegate().setValue(readerModeEnabled);
|
|
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
|
|
@@ -42,6 +42,8 @@ public interface AccessibilitySettingsDelegate {
|
|
*/
|
|
BrowserContextHandle getBrowserContextHandle();
|
|
|
|
+ BooleanPreferenceDelegate getForceTabletUIDelegate();
|
|
+
|
|
/**
|
|
* @return boolean value specifying if the Image Descriptions user setting should be shown.
|
|
*/
|
|
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
|
|
@@ -87,6 +87,14 @@ public class DeviceFormFactor {
|
|
/** See {@link #setIsTabletForTesting(boolean)}. */
|
|
private static @Nullable Boolean sIsTabletForTesting;
|
|
|
|
+ private static boolean mForceTabletUI = false;
|
|
+ public static void setForceTabletUI(boolean forceTabletUI) {
|
|
+ mForceTabletUI = forceTabletUI;
|
|
+ }
|
|
+ public static boolean isForceTabletUI() {
|
|
+ return mForceTabletUI;
|
|
+ }
|
|
+
|
|
/**
|
|
* 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
|
|
@@ -95,6 +103,7 @@ public class DeviceFormFactor {
|
|
@CalledByNative
|
|
@Deprecated
|
|
public static boolean isTablet() {
|
|
+ if (mForceTabletUI) return true;
|
|
if (sIsTabletForTesting != null) {
|
|
return sIsTabletForTesting;
|
|
}
|
|
@@ -125,6 +134,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;
|
|
}
|
|
|
|
@@ -159,6 +169,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);
|
|
}
|
|
|
|
@@ -166,6 +177,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);
|
|
}
|
|
|
|
@@ -175,6 +187,7 @@ public class DeviceFormFactor {
|
|
*/
|
|
@UiThread
|
|
public static int getNonMultiDisplayMinimumTabletWidthPx(Context context) {
|
|
+ if (mForceTabletUI) return 0;
|
|
return getMinimumTabletWidthPx(DisplayAndroid.getNonMultiDisplay(context));
|
|
}
|
|
|
|
@@ -183,6 +196,7 @@ public class DeviceFormFactor {
|
|
* layout.
|
|
*/
|
|
public static int getMinimumTabletWidthPx(DisplayAndroid display) {
|
|
+ if (mForceTabletUI) return 0;
|
|
return DisplayUtil.dpToPx(display, DeviceFormFactor.MINIMUM_TABLET_WIDTH_DP);
|
|
}
|
|
}
|
|
--
|