Merge "Call WindowManagerInternal#waitForAllWindowsDrawn for secondary displays" into sc-dev
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 0ce9650..7f325f1 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -413,13 +413,6 @@
volatile boolean mBootAnimationDismissable;
private KeyguardServiceDelegate mKeyguardDelegate;
private boolean mKeyguardBound;
- final Runnable mWindowManagerDrawCallback = new Runnable() {
- @Override
- public void run() {
- if (DEBUG_WAKEUP) Slog.i(TAG, "All windows ready for display!");
- mHandler.sendEmptyMessage(MSG_WINDOW_MANAGER_DRAWN_COMPLETE);
- }
- };
final DrawnListener mKeyguardDrawnCallback = new DrawnListener() {
@Override
public void onDrawn() {
@@ -646,7 +639,7 @@
break;
case MSG_WINDOW_MANAGER_DRAWN_COMPLETE:
if (DEBUG_WAKEUP) Slog.w(TAG, "Setting mWindowManagerDrawComplete");
- finishWindowsDrawn();
+ finishWindowsDrawn(msg.arg1);
break;
case MSG_HIDE_BOOT_MESSAGE:
handleHideBootMessage();
@@ -4308,8 +4301,11 @@
// ... eventually calls finishWindowsDrawn which will finalize our screen turn on
// as well as enabling the orientation change logic/sensor.
- mWindowManagerInternal.waitForAllWindowsDrawn(mWindowManagerDrawCallback,
- WAITING_FOR_DRAWN_TIMEOUT, INVALID_DISPLAY);
+ mWindowManagerInternal.waitForAllWindowsDrawn(() -> {
+ if (DEBUG_WAKEUP) Slog.i(TAG, "All windows ready for every display");
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_WINDOW_MANAGER_DRAWN_COMPLETE,
+ INVALID_DISPLAY, 0));
+ }, WAITING_FOR_DRAWN_TIMEOUT, INVALID_DISPLAY);
}
// Called on the DisplayManager's DisplayPowerController thread.
@@ -4369,6 +4365,11 @@
}
} else {
mScreenOnListeners.put(displayId, screenOnListener);
+ mWindowManagerInternal.waitForAllWindowsDrawn(() -> {
+ if (DEBUG_WAKEUP) Slog.i(TAG, "All windows ready for display: " + displayId);
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_WINDOW_MANAGER_DRAWN_COMPLETE,
+ displayId, 0));
+ }, WAITING_FOR_DRAWN_TIMEOUT, displayId);
}
}
@@ -4409,7 +4410,15 @@
mVrManagerInternal.onScreenStateChanged(isScreenOn);
}
- private void finishWindowsDrawn() {
+ private void finishWindowsDrawn(int displayId) {
+ if (displayId != DEFAULT_DISPLAY && displayId != INVALID_DISPLAY) {
+ final ScreenOnListener screenOnListener = mScreenOnListeners.removeReturnOld(displayId);
+ if (screenOnListener != null) {
+ screenOnListener.onScreenOn();
+ }
+ return;
+ }
+
if (!mDefaultDisplayPolicy.finishWindowsDrawn()) {
return;
}
@@ -4453,14 +4462,6 @@
if (listener != null) {
listener.onScreenOn();
}
-
- for (int i = mScreenOnListeners.size() - 1; i >= 0; i--) {
- final ScreenOnListener screenOnListener = mScreenOnListeners.valueAt(i);
- if (screenOnListener != null) {
- screenOnListener.onScreenOn();
- }
- }
- mScreenOnListeners.clear();
}
if (enableScreen) {