Merge "Run keyguard occlusion update after transitions" into udc-dev

This commit is contained in:
Robin Lee
2023-03-31 19:48:57 +00:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 22 deletions

View File

@@ -3573,14 +3573,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
@Override
public int applyKeyguardOcclusionChange() {
if (mKeyguardOccludedChanged) {
if (DEBUG_KEYGUARD) Slog.d(TAG, "transition/occluded changed occluded="
+ mPendingKeyguardOccluded);
if (setKeyguardOccludedLw(mPendingKeyguardOccluded)) {
return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_WALLPAPER;
}
if (DEBUG_KEYGUARD) Slog.d(TAG, "transition/occluded commit occluded="
+ mPendingKeyguardOccluded);
// TODO(b/276433230): Explicitly save before/after for occlude state in each
// Transition so we don't need to update SysUI every time.
if (setKeyguardOccludedLw(mPendingKeyguardOccluded)) {
return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_WALLPAPER;
} else {
return 0;
}
return 0;
}
/**
@@ -3858,6 +3860,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
private boolean setKeyguardOccludedLw(boolean isOccluded) {
if (DEBUG_KEYGUARD) Slog.d(TAG, "setKeyguardOccluded occluded=" + isOccluded);
mKeyguardOccludedChanged = false;
mPendingKeyguardOccluded = isOccluded;
mKeyguardDelegate.setOccluded(isOccluded, true /* notify */);
return mKeyguardDelegate.isShowing();
}

View File

@@ -1056,6 +1056,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
dc.removeImeSurfaceImmediately();
dc.handleCompleteDeferredRemoval();
}
validateKeyguardOcclusion();
validateVisibility();
mState = STATE_FINISHED;
@@ -1215,8 +1216,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
if (mRecentsDisplayId != INVALID_DISPLAY) break;
}
handleNonAppWindowsInTransition(mType, mFlags);
// The callback is only populated for custom activity-level client animations
sendRemoteCallback(mClientAnimationStartCallback);
@@ -1541,19 +1540,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
}
}
private void handleNonAppWindowsInTransition(
@TransitionType int transit, @TransitionFlags int flags) {
if ((flags & TRANSIT_FLAG_KEYGUARD_LOCKED) != 0) {
// If the occlusion changed but the transition isn't an occlude/unocclude transition,
// then we have to notify KeyguardService directly. This can happen if there is
// another ongoing transition when the app changes occlusion OR if the app dies or
// is killed. Both of these are common during tests.
if (transit != TRANSIT_KEYGUARD_OCCLUDE && transit != TRANSIT_KEYGUARD_UNOCCLUDE) {
mController.mAtm.mWindowManager.mPolicy.applyKeyguardOcclusionChange();
}
}
}
private void reportStartReasonsToLogger() {
// Record transition start in metrics logger. We just assume everything is "DRAWN"
// at this point since splash-screen is a presentation (shell) detail.
@@ -2246,6 +2232,13 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
return mainWin.getAttrs().rotationAnimation;
}
private void validateKeyguardOcclusion() {
if ((mFlags & TRANSIT_FLAG_KEYGUARD_LOCKED) != 0) {
mController.mStateValidators.add(
mController.mAtm.mWindowManager.mPolicy::applyKeyguardOcclusionChange);
}
}
private void validateVisibility() {
for (int i = mTargets.size() - 1; i >= 0; --i) {
if (reduceMode(mTargets.get(i).mReadyMode) != TRANSIT_CLOSE) {