From c6c0d0da5c17dc69f67223bb7fc67e5f47427a98 Mon Sep 17 00:00:00 2001 From: Cheng Shi Date: Thu, 9 Jun 2022 09:09:56 +0000 Subject: [PATCH] Fix the problem that the turn_screen_on Activity does not draw. A phone call came when the screen was off, displayState may change from Display.STATE_OFF to STATE_ON before registerDisplayListener, which causes ViewRootImpl.mAttachInfo.mDisplayState of InCallActivity to remain Display.STATE_OFF, which causes performDraw to return directly. So we should update ViewRootImpl.mAttachInfo.mDisplayState after registerDisplayListener. Bug: 235446909 Test: pass existing Change-Id: I60b2da453da0ac5c4df6e5a1040defe4bfe726ec --- core/java/android/view/ViewRootImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index f163530f997bb..e9f3e51b6d85c 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1100,7 +1100,6 @@ public final class ViewRootImpl implements ViewParent, if (mView == null) { mView = view; - mAttachInfo.mDisplayState = mDisplay.getState(); mDisplayInstallOrientation = mDisplay.getInstallOrientation(); mViewLayoutDirectionInitial = mView.getRawLayoutDirection(); mFallbackEventHandler.setView(view); @@ -1312,6 +1311,9 @@ public final class ViewRootImpl implements ViewParent, } registerListeners(); + // We should update mAttachInfo.mDisplayState after registerDisplayListener + // because displayState might be changed before registerDisplayListener. + mAttachInfo.mDisplayState = mDisplay.getState(); if ((res & WindowManagerGlobal.ADD_FLAG_USE_BLAST) != 0) { mUseBLASTAdapter = true; }