Merge "Use isolated display context to get display info" into ub-launcher3-rvc-dev

This commit is contained in:
TreeHugger Robot
2020-06-24 05:25:33 +00:00
committed by Android (Google) Code Review

View File

@@ -49,20 +49,25 @@ public class DefaultDisplay implements DisplayListener {
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 @@ public class DefaultDisplay implements DisplayListener {
}
Info oldInfo = mInfo;
Info info = new Info(mContext);
Info info = new Info(mDisplayContext);
int change = 0;
if (info.hasDifferentSize(oldInfo)) {
@@ -162,8 +167,7 @@ public class DefaultDisplay implements DisplayListener {
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) {