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
This commit is contained in:
Alex Chau 2021-10-07 14:44:01 +01:00
parent b01c390299
commit 4f140f96e8
1 changed files with 5 additions and 4 deletions

View File

@ -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;
}