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
This commit is contained in:
Sunny Goyal 2020-04-30 12:28:00 -07:00
parent d75c1da9c7
commit 1890f67800
5 changed files with 18 additions and 15 deletions

View File

@ -1,4 +1,3 @@
<resources> <resources>
<bool name="is_tablet">true</bool>
<bool name="allow_rotation">true</bool> <bool name="allow_rotation">true</bool>
</resources> </resources>

View File

@ -1,6 +1,5 @@
<resources> <resources>
<bool name="config_largeHeap">true</bool> <bool name="config_largeHeap">true</bool>
<bool name="is_large_tablet">true</bool>
<!-- All Apps & Widgets --> <!-- All Apps & Widgets -->
<!-- Out of 100, the percent to shrink the workspace during spring loaded mode. --> <!-- Out of 100, the percent to shrink the workspace during spring loaded mode. -->

View File

@ -1,8 +1,6 @@
<resources> <resources>
<!-- Miscellaneous --> <!-- Miscellaneous -->
<bool name="config_largeHeap">false</bool> <bool name="config_largeHeap">false</bool>
<bool name="is_tablet">false</bool>
<bool name="is_large_tablet">false</bool>
<bool name="allow_rotation">false</bool> <bool name="allow_rotation">false</bool>
<integer name="extracted_color_gradient_alpha">153</integer> <integer name="extracted_color_gradient_alpha">153</integer>

View File

@ -32,6 +32,10 @@ import com.android.launcher3.util.DefaultDisplay;
public class DeviceProfile { public class DeviceProfile {
private static final float TABLET_MIN_DPS = 600;
private static final float LARGE_TABLET_MIN_DPS = 720;
public final InvariantDeviceProfile inv; public final InvariantDeviceProfile inv;
private final DefaultDisplay.Info mInfo; private final DefaultDisplay.Info mInfo;
@ -158,11 +162,12 @@ public class DeviceProfile {
} }
mInfo = info; mInfo = info;
Resources res = context.getResources();
// Constants from resources // Constants from resources
isTablet = res.getBoolean(R.bool.is_tablet); float swDPs = Utilities.dpiFromPx(
isLargeTablet = res.getBoolean(R.bool.is_large_tablet); Math.min(info.smallestSize.x, info.smallestSize.y), info.metrics);
isTablet = swDPs >= TABLET_MIN_DPS;
isLargeTablet = swDPs >= LARGE_TABLET_MIN_DPS;
isPhone = !isTablet && !isLargeTablet; isPhone = !isTablet && !isLargeTablet;
aspectRatio = ((float) Math.max(widthPx, heightPx)) / Math.min(widthPx, heightPx); aspectRatio = ((float) Math.max(widthPx, heightPx)) / Math.min(widthPx, heightPx);
boolean isTallDevice = Float.compare(aspectRatio, TALL_DEVICE_ASPECT_RATIO_THRESHOLD) >= 0; boolean isTallDevice = Float.compare(aspectRatio, TALL_DEVICE_ASPECT_RATIO_THRESHOLD) >= 0;
@ -170,10 +175,10 @@ public class DeviceProfile {
// Some more constants // Some more constants
this.transposeLayoutWithOrientation = transposeLayoutWithOrientation; this.transposeLayoutWithOrientation = transposeLayoutWithOrientation;
context = getContext(context, isVerticalBarLayout() context = getContext(context, info, isVerticalBarLayout()
? Configuration.ORIENTATION_LANDSCAPE ? Configuration.ORIENTATION_LANDSCAPE
: Configuration.ORIENTATION_PORTRAIT); : Configuration.ORIENTATION_PORTRAIT);
res = context.getResources(); final Resources res = context.getResources();
edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin); edgeMarginPx = res.getDimensionPixelSize(R.dimen.dynamic_grid_edge_margin);
desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx; desiredWorkspaceLeftRightMarginPx = isVerticalBarLayout() ? 0 : edgeMarginPx;
@ -632,10 +637,11 @@ public class DeviceProfile {
} }
} }
private static Context getContext(Context c, int orientation) { private static Context getContext(Context c, DefaultDisplay.Info info, int orientation) {
Configuration context = new Configuration(c.getResources().getConfiguration()); Configuration config = new Configuration(c.getResources().getConfiguration());
context.orientation = orientation; config.orientation = orientation;
return c.createConfigurationContext(context); config.densityDpi = info.metrics.densityDpi;
return c.createConfigurationContext(config);
} }
/** /**

View File

@ -15,6 +15,8 @@
*/ */
package com.android.launcher3.util; package com.android.launcher3.util;
import static android.view.Display.DEFAULT_DISPLAY;
import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR; import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import android.content.Context; import android.content.Context;
@ -26,7 +28,6 @@ import android.os.Message;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.util.Log; import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.WindowManager;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
@ -142,7 +143,7 @@ public class DefaultDisplay implements DisplayListener {
} }
private Info(Context context) { private Info(Context context) {
this(context.getSystemService(WindowManager.class).getDefaultDisplay()); this(context.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY));
} }
public Info(Display display) { public Info(Display display) {