From bcc94d1391b2771da293c4ea41763f5d50acd9b9 Mon Sep 17 00:00:00 2001 From: Michael Bestas Date: Sun, 29 Nov 2015 14:49:13 +0200 Subject: [PATCH] utils: Introduce ScreenType class Change-Id: I6ddb14d6228565331d52069f4d96f93a9d306b45 --- .../cyanogenmod/internal/util/ScreenType.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/java/org/cyanogenmod/internal/util/ScreenType.java diff --git a/src/java/org/cyanogenmod/internal/util/ScreenType.java b/src/java/org/cyanogenmod/internal/util/ScreenType.java new file mode 100644 index 0000000..23bd9ad --- /dev/null +++ b/src/java/org/cyanogenmod/internal/util/ScreenType.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2015 The CyanogenMod Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.cyanogenmod.internal.util; + +import android.content.Context; +import android.util.DisplayMetrics; +import android.view.DisplayInfo; +import android.view.WindowManager; + +public class ScreenType { + // Device type reference + private static int sDeviceType = -1; + + // Device types + private static final int DEVICE_PHONE = 0; + private static final int DEVICE_HYBRID = 1; + private static final int DEVICE_TABLET = 2; + + private static int getScreenType(Context context) { + if (sDeviceType == -1) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayInfo outDisplayInfo = new DisplayInfo(); + wm.getDefaultDisplay().getDisplayInfo(outDisplayInfo); + int shortSize = Math.min(outDisplayInfo.logicalHeight, outDisplayInfo.logicalWidth); + int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT + / outDisplayInfo.logicalDensityDpi; + if (shortSizeDp < 600) { + // 0-599dp: "phone" UI with a separate status & navigation bar + sDeviceType = DEVICE_PHONE; + } else if (shortSizeDp < 720) { + // 600-719dp: "phone" UI with modifications for larger screens + sDeviceType = DEVICE_HYBRID; + } else { + // 720dp: "tablet" UI with a single combined status & navigation bar + sDeviceType = DEVICE_TABLET; + } + } + return sDeviceType; + } + + public static boolean isPhone(Context context) { + return getScreenType(context) == DEVICE_PHONE; + } + + public static boolean isHybrid(Context context) { + return getScreenType(context) == DEVICE_HYBRID; + } + + public static boolean isTablet(Context context) { + return getScreenType(context) == DEVICE_TABLET; + } +}