DeviceUtils.java revision a36e5920737c6adbddd3e43b760e5de8431db6e0
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.content.browser;
6
7import android.content.Context;
8import android.content.pm.PackageManager;
9
10import org.chromium.content.common.CommandLine;
11
12/**
13 * A utility class that has helper methods for device configuration.
14 */
15public class DeviceUtils {
16
17    /**
18     * The minimum width that would classify the device as a tablet.
19     */
20    private static final int MINIMUM_TABLET_WIDTH_DP = 600;
21
22    private static Boolean sIsTv = null;
23    private static Boolean sIsTablet = null;
24
25    /**
26     * @param context Android's context
27     * @return        Whether the app is should treat the device as a tablet for layout.
28     */
29    public static boolean isTablet(Context context) {
30        if (sIsTablet == null) {
31            if (isTv(context)) {
32                sIsTablet = true;
33                return sIsTablet;
34            }
35            int minimumScreenWidthDp = context.getResources().getConfiguration().
36                    smallestScreenWidthDp;
37            sIsTablet = minimumScreenWidthDp >= MINIMUM_TABLET_WIDTH_DP;
38        }
39        return sIsTablet;
40    }
41
42    /**
43     * Checks if the device should be treated as TV. Note that this should be
44     * invoked before {@link #isTablet(Context)} to get the correct result
45     * since they are not orthogonal.
46     *
47     * @param context Android context
48     * @return {@code true} if the device should be treated as TV.
49     */
50    public static boolean isTv(Context context) {
51        if (sIsTv == null) {
52            PackageManager manager = context.getPackageManager();
53            if (manager != null) {
54                sIsTv = manager.hasSystemFeature(PackageManager.FEATURE_TELEVISION);
55                return sIsTv;
56            }
57            sIsTv = false;
58        }
59        return sIsTv;
60    }
61
62    /**
63     * Appends the switch specifying which user agent should be used for this device.
64     * @param context The context for the caller activity.
65     */
66    public static void addDeviceSpecificUserAgentSwitch(Context context) {
67        if (isTablet(context)) {
68            CommandLine.getInstance().appendSwitch(CommandLine.TABLET_UI);
69        } else {
70            CommandLine.getInstance().appendSwitch(CommandLine.USE_MOBILE_UA);
71        }
72    }
73}
74