Clear last focus of previous display when reparenting
Assume 2 displays:
D0 contains activities A, X
D1 contains an activity B
The update order of focus is from top to bottom. When reparenting
X from D0 to D1, and D1 becomes the top display:
1) D1: X gains focus, B loses focus
2) D0: A gains focus, X loses focus
That results the top activity X on top display 0 does not have focus
(the state in client side view root).
Bug: 119664976
Test: atest DisplayContentTests#testClearLastFocusWhenReparentingFocusedWindow
Test: atest WindowFocusTests
Change-Id: I5bf3546cde3ac6d4be45d1a971cda033663cc919
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index c1655bc..228ece5 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -549,6 +549,18 @@
}
@Test
+ public void testClearLastFocusWhenReparentingFocusedWindow() {
+ final DisplayContent defaultDisplay = mWm.getDefaultDisplayContentLocked();
+ final WindowState window = createWindow(null /* parent */, TYPE_BASE_APPLICATION,
+ defaultDisplay, "window");
+ defaultDisplay.mLastFocus = window;
+ mDisplayContent.mCurrentFocus = window;
+ mDisplayContent.reParentWindowToken(window.mToken);
+
+ assertNull(defaultDisplay.mLastFocus);
+ }
+
+ @Test
public void testGetPreferredOptionsPanelGravityFromDifferentDisplays() {
final DisplayContent portraitDisplay = createNewDisplay();
portraitDisplay.mInitialDisplayHeight = 2000;