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:
parent
b01c390299
commit
4f140f96e8
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue