Merge "Hold onto occluded change until it's committed" into udc-dev

This commit is contained in:
Robin Lee
2023-03-20 19:28:15 +00:00
committed by Android (Google) Code Review
4 changed files with 18 additions and 20 deletions

View File

@@ -3557,16 +3557,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
mPendingKeyguardOccluded = occluded;
mKeyguardOccludedChanged = true;
} else {
setKeyguardOccludedLw(occluded, true /* notify */);
setKeyguardOccludedLw(occluded);
}
}
@Override
public int applyKeyguardOcclusionChange(boolean notify) {
public int applyKeyguardOcclusionChange() {
if (mKeyguardOccludedChanged) {
if (DEBUG_KEYGUARD) Slog.d(TAG, "transition/occluded changed occluded="
+ mPendingKeyguardOccluded);
if (setKeyguardOccludedLw(mPendingKeyguardOccluded, notify)) {
if (setKeyguardOccludedLw(mPendingKeyguardOccluded)) {
return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_WALLPAPER;
}
}
@@ -3585,8 +3585,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
*/
private int handleTransitionForKeyguardLw(boolean startKeyguardExitAnimation,
boolean notifyOccluded) {
final int redoLayout = applyKeyguardOcclusionChange(notifyOccluded);
if (redoLayout != 0) return redoLayout;
if (notifyOccluded) {
final int redoLayout = applyKeyguardOcclusionChange();
if (redoLayout != 0) return redoLayout;
}
if (startKeyguardExitAnimation) {
if (DEBUG_KEYGUARD) Slog.d(TAG, "Starting keyguard exit animation");
startKeyguardExitAnimation(SystemClock.uptimeMillis());
@@ -3837,20 +3839,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
}
/**
* Updates the occluded state of the Keyguard.
* Updates the occluded state of the Keyguard immediately via
* {@link com.android.internal.policy.IKeyguardService}.
*
* @param isOccluded Whether the Keyguard is occluded by another window.
* @param notify Notify keyguard occlude status change immediately via
* {@link com.android.internal.policy.IKeyguardService}.
* @return Whether the flags have changed and we have to redo the layout.
*/
private boolean setKeyguardOccludedLw(boolean isOccluded, boolean notify) {
private boolean setKeyguardOccludedLw(boolean isOccluded) {
if (DEBUG_KEYGUARD) Slog.d(TAG, "setKeyguardOccluded occluded=" + isOccluded);
mKeyguardOccludedChanged = false;
if (isKeyguardOccluded() == isOccluded) {
return false;
}
mKeyguardDelegate.setOccluded(isOccluded, notify);
mKeyguardDelegate.setOccluded(isOccluded, true /* notify */);
return mKeyguardDelegate.isShowing();
}

View File

@@ -170,10 +170,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants {
void onKeyguardOccludedChangedLw(boolean occluded, boolean waitAppTransition);
/**
* @param notify {@code true} if the status change should be immediately notified via
* {@link com.android.internal.policy.IKeyguardService}
* Commit any queued changes to keyguard occlude status that had been deferred during the
* start of an animation or transition.
*/
int applyKeyguardOcclusionChange(boolean notify);
int applyKeyguardOcclusionChange();
/**
* Interface to the Window Manager state associated with a particular

View File

@@ -1481,9 +1481,9 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
// 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.
final boolean notify = !(transit == TRANSIT_KEYGUARD_OCCLUDE
|| transit == TRANSIT_KEYGUARD_UNOCCLUDE);
mController.mAtm.mWindowManager.mPolicy.applyKeyguardOcclusionChange(notify);
if (transit != TRANSIT_KEYGUARD_OCCLUDE && transit != TRANSIT_KEYGUARD_UNOCCLUDE) {
mController.mAtm.mWindowManager.mPolicy.applyKeyguardOcclusionChange();
}
}
}

View File

@@ -314,7 +314,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy {
}
@Override
public int applyKeyguardOcclusionChange(boolean notify) {
public int applyKeyguardOcclusionChange() {
return 0;
}