From 391f372726af62c6d9ba9b221508003c37e8ff8a Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Wed, 17 Nov 2021 16:05:10 -0800 Subject: [PATCH] Ignore ui mode change caused by Morris overlay in PiP When entering PiP from GMM with Morris overlay enabled, there will be a display change callback caused by ui mode change that tend to shift the PiP window. For PiP, such ui mode change from app is not quite relevant and we can simply ignore in PipController. Bug: 201589034 Video: http://recall/-/aaaaaabFQoRHlzixHdtY/dmI3KCeKPAH118BRqnhgNO Test: enter PiP from GMM with Morris overlay, see video Change-Id: I2d72e166fb8de1e503415b5441c03f0685de9573 --- .../com/android/wm/shell/common/DisplayLayout.java | 13 +++++++++++++ .../android/wm/shell/pip/phone/PipController.java | 3 +-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java index 7784665b30318..6f4e22fa8a043 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayLayout.java @@ -93,6 +93,19 @@ public class DisplayLayout { private boolean mReverseDefaultRotation = false; private InsetsState mInsetsState = new InsetsState(); + /** + * Different from {@link #equals(Object)}, this method compares the basic geometry properties + * of two {@link DisplayLayout} objects including width, height, rotation, density and cutout. + * @return {@code true} if the given {@link DisplayLayout} is identical geometry wise. + */ + public boolean isSameGeometry(@NonNull DisplayLayout other) { + return mWidth == other.mWidth + && mHeight == other.mHeight + && mRotation == other.mRotation + && mDensityDpi == other.mDensityDpi + && Objects.equals(mCutout, other.mCutout); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java index 7cfba148a907f..26fd962ea6c56 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java @@ -88,7 +88,6 @@ import com.android.wm.shell.pip.PipUtils; import com.android.wm.shell.transition.Transitions; import java.io.PrintWriter; -import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; @@ -469,7 +468,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb } private void onDisplayChanged(DisplayLayout layout, boolean saveRestoreSnapFraction) { - if (Objects.equals(layout, mPipBoundsState.getDisplayLayout())) { + if (mPipBoundsState.getDisplayLayout().isSameGeometry(layout)) { return; } Runnable updateDisplayLayout = () -> {