Merge "Use isolated display context to get display info" into ub-launcher3-rvc-dev am: a0b0d66e20
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/11969862
Change-Id: Ibb6496b2ed97f782940cdf8f846731ba6a36811a
diff --git a/src/com/android/launcher3/util/DefaultDisplay.java b/src/com/android/launcher3/util/DefaultDisplay.java
index 150fb5b..35788a5 100644
--- a/src/com/android/launcher3/util/DefaultDisplay.java
+++ b/src/com/android/launcher3/util/DefaultDisplay.java
@@ -49,20 +49,25 @@
public static final int CHANGE_ALL = CHANGE_SIZE | CHANGE_ROTATION | CHANGE_FRAME_DELAY;
- private final Context mContext;
+ private final Context mDisplayContext;
private final int mId;
private final ArrayList<DisplayInfoChangeListener> mListeners = new ArrayList<>();
private final Handler mChangeHandler;
private Info mInfo;
private DefaultDisplay(Context context) {
- mContext = context;
- mInfo = new Info(context);
+ DisplayManager dm = context.getSystemService(DisplayManager.class);
+ // Use application context to create display context so that it can have its own Resources.
+ mDisplayContext = context.getApplicationContext().createDisplayContext(
+ dm.getDisplay(DEFAULT_DISPLAY));
+ // Note that the Display object must be obtained from DisplayManager which is associated to
+ // the display context, so the Display is isolated from Activity and Application to provide
+ // the actual state of device that excludes the additional adjustment and override.
+ mInfo = new Info(mDisplayContext);
mId = mInfo.id;
mChangeHandler = new Handler(this::onChange);
- context.getSystemService(DisplayManager.class)
- .registerDisplayListener(this, UI_HELPER_EXECUTOR.getHandler());
+ dm.registerDisplayListener(this, UI_HELPER_EXECUTOR.getHandler());
}
@Override
@@ -78,7 +83,7 @@
}
Info oldInfo = mInfo;
- Info info = new Info(mContext);
+ Info info = new Info(mDisplayContext);
int change = 0;
if (info.hasDifferentSize(oldInfo)) {
@@ -162,8 +167,7 @@
display.getRealSize(realSize);
display.getCurrentSizeRange(smallestSize, largestSize);
- Context defaultDisplayContext = context.createDisplayContext(display);
- metrics = defaultDisplayContext.getResources().getDisplayMetrics();
+ metrics = context.getResources().getDisplayMetrics();
}
private boolean hasDifferentSize(Info info) {