Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 043cd4f6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Use isolated display context to get display info" into rvc-dev am: 7f5a670c am: f58ec22c

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/11969858

Change-Id: I5e53f6458f9a35e655c41be013d61e5bee5ee8f4
parents 0e93463f f58ec22c
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -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) {