Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1425)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java

Issue 739073002: Upstream DeviceClassManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/ChromeSwitches.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java b/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..34ae41ac891f30d2b481111349a3115ed257034c
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/device/DeviceClassManager.java
@@ -0,0 +1,166 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.device;
+
+import android.content.Context;
+import android.view.accessibility.AccessibilityManager;
+
+import org.chromium.base.ApplicationStatus;
+import org.chromium.base.CommandLine;
+import org.chromium.base.SysUtils;
+import org.chromium.base.TraceEvent;
+import org.chromium.chrome.ChromeSwitches;
+import org.chromium.ui.base.DeviceFormFactor;
+
+/**
+ * This class is used to turn on and off certain features for different types of
+ * devices.
+ */
+public class DeviceClassManager {
+ private static DeviceClassManager sInstance;
+
+ // Set of features that can be enabled/disabled
+ private boolean mEnableSnapshots;
+ private boolean mEnableLayerDecorationCache;
+ private boolean mEnableAccessibilityLayout;
+ private boolean mEnableAnimations;
+ private boolean mEnableInstantSearchClicks;
+ private boolean mEnablePrerendering;
+ private boolean mEnableToolbarSwipe;
+ private boolean mEnableToolbarSwipeInDocumentMode;
+ private boolean mEnableUndo;
+ private final boolean mEnableFullscreen;
+
+ private static DeviceClassManager getInstance() {
+ if (sInstance == null) {
+ sInstance = new DeviceClassManager();
+ }
+ return sInstance;
+ }
+
+ /**
+ * The {@link DeviceClassManager} constructor should be self contained and
+ * rely on system information and command line flags.
+ */
+ private DeviceClassManager() {
+ // Device based configurations.
+ if (SysUtils.isLowEndDevice()) {
+ mEnableSnapshots = false;
+ mEnableLayerDecorationCache = true;
+ mEnableAccessibilityLayout = true;
+ mEnableAnimations = false;
+ mEnablePrerendering = false;
+ mEnableToolbarSwipe = false;
+ mEnableInstantSearchClicks = false;
+ } else {
+ mEnableSnapshots = true;
+ mEnableLayerDecorationCache = true;
+ mEnableAccessibilityLayout = false;
+ mEnableAnimations = true;
+ mEnablePrerendering = true;
+ mEnableToolbarSwipe = true;
+ mEnableInstantSearchClicks = true;
+ }
+
+ if (DeviceFormFactor.isTablet(ApplicationStatus.getApplicationContext())) {
+ mEnableAccessibilityLayout = false;
+ }
+
+ // Flag based configurations.
+ CommandLine commandLine = CommandLine.getInstance();
+ mEnableAccessibilityLayout |= commandLine
+ .hasSwitch(ChromeSwitches.ENABLE_ACCESSIBILITY_TAB_SWITCHER);
+ mEnableFullscreen =
+ !commandLine.hasSwitch(ChromeSwitches.DISABLE_FULLSCREEN);
+ mEnableUndo = commandLine.hasSwitch(ChromeSwitches.ENABLE_HIGH_END_UI_UNDO);
+ mEnableToolbarSwipeInDocumentMode =
+ commandLine.hasSwitch(ChromeSwitches.ENABLE_TOOLBAR_SWIPE_IN_DOCUMENT_MODE);
+
+ // Related features.
+ if (mEnableAccessibilityLayout) {
+ mEnableAnimations = false;
+ }
+
+ if (SysUtils.isLowEndDevice() || mEnableAccessibilityLayout) {
+ mEnableUndo = true;
+ }
+ }
+
+ /**
+ * @return Whether or not we can take screenshots.
+ */
+ public static boolean enableSnapshots() {
+ return getInstance().mEnableSnapshots;
+ }
+
+ /**
+ * @return Whether or not we can use the layer decoration cache.
+ */
+ public static boolean enableLayerDecorationCache() {
+ return getInstance().mEnableLayerDecorationCache;
+ }
+
+ /**
+ * @return Whether or not should use the accessibility tab switcher.
+ */
+ public static boolean enableAccessibilityLayout() {
+ return getInstance().mEnableAccessibilityLayout;
+ }
+
+ /**
+ * @return Whether or not full screen is enabled.
+ */
+ public static boolean enableFullscreen() {
+ return getInstance().mEnableFullscreen;
+ }
+
+ /**
+ * @param context A {@link Context} instance.
+ * @return Whether or not we are showing animations.
+ */
+ public static boolean enableAnimations(Context context) {
+ return getInstance().mEnableAnimations && !isAccessibilityModeEnabled(context);
+ }
+
+ /**
+ * @return Whether or not prerendering is enabled.
+ */
+ public static boolean enablePrerendering() {
+ return getInstance().mEnablePrerendering;
+ }
+
+ /**
+ * @param isDocumentMode Whether or not chrome is in document mode.
+ * @return Whether or not we can use the toolbar swipe.
+ */
+ public static boolean enableToolbarSwipe(boolean isDocumentMode) {
+ return getInstance().mEnableToolbarSwipe
+ && !(isDocumentMode && !getInstance().mEnableToolbarSwipeInDocumentMode);
+ }
+
+ /**
+ * @return Whether or not instant search clicks is enabled.
+ */
+ public static boolean enableInstantSearchClicks() {
+ return getInstance().mEnableInstantSearchClicks;
+ }
+
+ /**
+ * @return Whether or not undo is enabled.
+ */
+ public static boolean enableUndo(Context context) {
+ return getInstance().mEnableUndo || isAccessibilityModeEnabled(context);
+ }
+
+ public static boolean isAccessibilityModeEnabled(Context context) {
+ TraceEvent.begin("DeviceClassManager::isAccessibilityModeEnabled");
+ AccessibilityManager manager = (AccessibilityManager)
+ context.getSystemService(Context.ACCESSIBILITY_SERVICE);
+ boolean enabled = manager != null && manager.isEnabled()
+ && manager.isTouchExplorationEnabled();
+ TraceEvent.end("DeviceClassManager::isAccessibilityModeEnabled");
+ return enabled;
+ }
+}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/ChromeSwitches.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698