From 9e963584b58e4e38052b2ac791937a696fb81238 Mon Sep 17 00:00:00 2001 From: Bill Lin Date: Wed, 27 Jan 2021 13:29:58 +0800 Subject: Reset windows bounds when stop one handed mode So far OHM reset windows bounds when 1) Rotate 2) Unregister(Settings disabled) We want to add 1 more policy: 3) Reset windows when stop one handed mode(animation end/cancel) Test: manual trigger OHM, stop OHM and check visual Test: atest WMShellUnitTests Bug: 178553230 Change-Id: Iba95fa11107fd0fa910685112ca962bca4adde80 --- .../wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java index 1da72f8efbb8..04d1264bdd9d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/onehanded/OneHandedDisplayAreaOrganizer.java @@ -89,6 +89,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { OneHandedAnimationController.OneHandedTransitionAnimator animator) { mAnimationController.removeAnimator(animator.getToken()); if (mAnimationController.isAnimatorsConsumed()) { + resetWindowsOffsetInternal(animator.getTransitionDirection()); finishOffset(animator.getDestinationOffset(), animator.getTransitionDirection()); } @@ -99,6 +100,7 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { OneHandedAnimationController.OneHandedTransitionAnimator animator) { mAnimationController.removeAnimator(animator.getToken()); if (mAnimationController.isAnimatorsConsumed()) { + resetWindowsOffsetInternal(animator.getTransitionDirection()); finishOffset(animator.getDestinationOffset(), animator.getTransitionDirection()); } @@ -205,6 +207,16 @@ public class OneHandedDisplayAreaOrganizer extends DisplayAreaOrganizer { applyTransaction(wct); } + private void resetWindowsOffsetInternal( + @OneHandedAnimationController.TransitionDirection int td) { + if (td == TRANSITION_DIRECTION_TRIGGER) { + return; + } + final WindowContainerTransaction wct = new WindowContainerTransaction(); + resetWindowsOffset(wct); + applyTransaction(wct); + } + private void resetWindowsOffset(WindowContainerTransaction wct) { final SurfaceControl.Transaction tx = mSurfaceControlTransactionFactory.getTransaction(); -- cgit v1.2.3-59-g8ed1b