From 1890f6780023913f2bb66bef2daf0206e7d13aec Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Thu, 30 Apr 2020 12:28:00 -0700 Subject: [PATCH] Overriding density when initializing device-profile as the app-context may not point to the correct density in multi-display Bug: 154665987 Bug: 153293358 Change-Id: I9a95bf314049ce783067f70c735ea29a64388ce5 --- res/values-sw600dp/config.xml | 1 - res/values-sw720dp/config.xml | 1 - res/values/config.xml | 2 -- src/com/android/launcher3/DeviceProfile.java | 24 ++++++++++++------- .../launcher3/util/DefaultDisplay.java | 5 ++-- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/res/values-sw600dp/config.xml b/res/values-sw600dp/config.xml index eb9af97938..09bdaafc1d 100644 --- a/res/values-sw600dp/config.xml +++ b/res/values-sw600dp/config.xml @@ -1,4 +1,3 @@ - true true diff --git a/res/values-sw720dp/config.xml b/res/values-sw720dp/config.xml index 94cffcb551..1f401c49e7 100644 --- a/res/values-sw720dp/config.xml +++ b/res/values-sw720dp/config.xml @@ -1,6 +1,5 @@ true - true diff --git a/res/values/config.xml b/res/values/config.xml index 4f21315fab..603dc91619 100644 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -1,8 +1,6 @@ false - false - false false 153 diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index 47824b27a1..51b21aa795 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -32,6 +32,10 @@ import com.android.launcher3.util.DefaultDisplay; public class DeviceProfile { + private static final float TABLET_MIN_DPS = 600; + private static final float LARGE_TABLET_MIN_DPS = 720; + + public final InvariantDeviceProfile inv; private final DefaultDisplay.Info mInfo; @@ -158,11 +162,12 @@ public class DeviceProfile { } mInfo = info; - Resources res = context.getResources(); // Constants from resources - isTablet = res.getBoolean(R.bool.is_tablet); - isLargeTablet = res.getBoolean(R.bool.is_large_tablet); + float swDPs = Utilities.dpiFromPx( + Math.min(info.smallestSize.x, info.smallestSize.y), info.metrics); + isTablet = swDPs >= TABLET_MIN_DPS; + isLargeTablet = swDPs >= LARGE_TABLET_MIN_DPS; isPhone = !isTablet && !isLargeTablet; aspectRatio = ((float) Math.max(widthPx, heightPx)) / Math.min(widthPx, heightPx); boolean isTallDevice = Float.compare(aspectRatio, TALL_DEVICE_ASPECT_RATIO_THRESHOLD) >= 0; @@ -170,10 +175,10 @@ public class DeviceProfile { // Some more constants this.transposeLayoutWithOrientation = transposeLayoutWithOrientation; - context = getContext(context, isVerticalBarLayout() + context = getContext(context, info, isVerticalBarLayout() ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT); - res = context.getResources(); + final Resources res = context.getResources(); edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin); desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx; @@ -632,10 +637,11 @@ public class DeviceProfile { } } - private static Context getContext(Context c, int orientation) { - Configuration context = new Configuration(c.getResources().getConfiguration()); - context.orientation = orientation; - return c.createConfigurationContext(context); + private static Context getContext(Context c, DefaultDisplay.Info info, int orientation) { + Configuration config = new Configuration(c.getResources().getConfiguration()); + config.orientation = orientation; + config.densityDpi = info.metrics.densityDpi; + return c.createConfigurationContext(config); } /** diff --git a/src/com/android/launcher3/util/DefaultDisplay.java b/src/com/android/launcher3/util/DefaultDisplay.java index f18e411d36..d51f777995 100644 --- a/src/com/android/launcher3/util/DefaultDisplay.java +++ b/src/com/android/launcher3/util/DefaultDisplay.java @@ -15,6 +15,8 @@ */ package com.android.launcher3.util; +import static android.view.Display.DEFAULT_DISPLAY; + import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import android.content.Context; @@ -26,7 +28,6 @@ import android.os.Message; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; -import android.view.WindowManager; import androidx.annotation.VisibleForTesting; @@ -142,7 +143,7 @@ public class DefaultDisplay implements DisplayListener { } private Info(Context context) { - this(context.getSystemService(WindowManager.class).getDefaultDisplay()); + this(context.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY)); } public Info(Display display) {