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

Commit 4f140f96 authored by Alex Chau's avatar Alex Chau
Browse files

Use displayId to determine CHANGE_ACTIVE_SCREEN

- Currently CHANGE_ACTIVE_SCREEN is dispatched when rotating too, which is incorrect. mScreenSizeDp is different in portrait and landscape, and varies more than swapping width/height due to different insets applied. Therefore, use the change of unique display id as a signal instead.

Fix: 202366729
Test: Rotate device, overview stays
Test: Unfold devices, overview goes away
Change-Id: Id8a7d4a1e237717521bfc5a5a67f23c4ee801c61
parent b01c3902
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ public class DisplayController implements DisplayListener, ComponentCallbacks, S
        }

        int change = 0;
        if (!newInfo.mScreenSizeDp.equals(oldInfo.mScreenSizeDp)) {
        if (!newInfo.displayId.equals(oldInfo.displayId)) {
            change |= CHANGE_ACTIVE_SCREEN;
        }
        if (newInfo.rotation != oldInfo.rotation) {
@@ -296,6 +296,7 @@ public class DisplayController implements DisplayListener, ComponentCallbacks, S

        public final Point currentSize;

        public String displayId;
        public final Set<WindowBounds> supportedBounds = new ArraySet<>();
        private final Map<String, Set<WindowBounds>> mPerDisplayBounds = new ArrayMap<>();
        private final ArrayMap<String, PortraitSize> mInternalDisplays;
@@ -319,17 +320,17 @@ public class DisplayController implements DisplayListener, ComponentCallbacks, S
            currentSize = new Point();
            display.getRealSize(currentSize);

            String myDisplayId = ApiWrapper.getUniqueId(display);
            displayId = ApiWrapper.getUniqueId(display);
            Set<WindowBounds> currentSupportedBounds =
                    getSupportedBoundsForDisplay(display, currentSize);
            mPerDisplayBounds.put(myDisplayId, currentSupportedBounds);
            mPerDisplayBounds.put(displayId, currentSupportedBounds);
            supportedBounds.addAll(currentSupportedBounds);

            if (ApiWrapper.isInternalDisplay(display) && internalDisplays.size() > 1) {
                int displayCount = internalDisplays.size();
                for (int i = 0; i < displayCount; i++) {
                    String displayKey = internalDisplays.keyAt(i);
                    if (TextUtils.equals(myDisplayId, displayKey)) {
                    if (TextUtils.equals(displayId, displayKey)) {
                        continue;
                    }