From 47f3322b90b38860e6735352ca848cc86d4b9c4a Mon Sep 17 00:00:00 2001 From: Nick Chameyev Date: Wed, 8 Feb 2023 12:29:57 +0000 Subject: [PATCH] [Unfold transition] Hide invisible workspaces during animation Enables clipToPadding property for the workspace view so it clips the views coming from the outside of the workspace. Bug: 267670594 Test: manual test by folding and unfolding with several pages on a foldable device Change-Id: Ibcb6ecd1ce784a66fdee35969b7f460bbb32f638 --- .../BaseUnfoldMoveFromCenterAnimator.java | 38 ++++++++++++------- .../UnfoldMoveFromCenterHotseatAnimator.java | 5 ++- ...UnfoldMoveFromCenterWorkspaceAnimator.java | 9 +++-- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java b/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java index 543ca897a2..2a8bfa269d 100644 --- a/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java +++ b/quickstep/src/com/android/quickstep/util/BaseUnfoldMoveFromCenterAnimator.java @@ -100,22 +100,34 @@ public abstract class BaseUnfoldMoveFromCenterAnimator implements TransitionProg mMoveFromCenterAnimation.registerViewForAnimation(view); } - protected void disableClipping(ViewGroup view) { + /** + * Sets clipToPadding for the view which then could be restored to the original value + * using {@link BaseUnfoldMoveFromCenterAnimator#restoreClippings} method call + * @param view view to set the property + * @param clipToPadding value of the property + */ + protected void setClipToPadding(ViewGroup view, boolean clipToPadding) { mOriginalClipToPadding.put(view, view.getClipToPadding()); - mOriginalClipChildren.put(view, view.getClipChildren()); - view.setClipToPadding(false); - view.setClipChildren(false); + view.setClipToPadding(clipToPadding); } - protected void restoreClipping(ViewGroup view) { - final Boolean originalClipToPadding = mOriginalClipToPadding.get(view); - if (originalClipToPadding != null) { - view.setClipToPadding(originalClipToPadding); - } - final Boolean originalClipChildren = mOriginalClipChildren.get(view); - if (originalClipChildren != null) { - view.setClipChildren(originalClipChildren); - } + /** + * Sets clipChildren for the view which then could be restored to the original value + * using {@link BaseUnfoldMoveFromCenterAnimator#restoreClippings} method call + * @param view view to set the property + * @param clipChildren value of the property + */ + protected void setClipChildren(ViewGroup view, boolean clipChildren) { + mOriginalClipChildren.put(view, view.getClipChildren()); + view.setClipChildren(clipChildren); + } + + /** + * Restores original clip properties after their modifications + */ + protected void restoreClippings() { + mOriginalClipToPadding.forEach(ViewGroup::setClipToPadding); + mOriginalClipChildren.forEach(ViewGroup::setClipChildren); } private class UnfoldMoveFromCenterRotationListener implements diff --git a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java index 01a997a451..70a12d6435 100644 --- a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java +++ b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterHotseatAnimator.java @@ -41,7 +41,8 @@ public class UnfoldMoveFromCenterHotseatAnimator extends BaseUnfoldMoveFromCente Hotseat hotseat = mLauncher.getHotseat(); ViewGroup hotseatIcons = hotseat.getShortcutsAndWidgets(); - disableClipping(hotseat); + setClipChildren(hotseat, false); + setClipToPadding(hotseat, false); for (int i = 0; i < hotseatIcons.getChildCount(); i++) { View child = hotseatIcons.getChildAt(i); @@ -51,7 +52,7 @@ public class UnfoldMoveFromCenterHotseatAnimator extends BaseUnfoldMoveFromCente @Override public void onTransitionFinished() { - restoreClipping(mLauncher.getHotseat()); + restoreClippings(); super.onTransitionFinished(); } } diff --git a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java index 95a4b8f2e2..7da103ee58 100644 --- a/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java +++ b/quickstep/src/com/android/quickstep/util/UnfoldMoveFromCenterWorkspaceAnimator.java @@ -47,7 +47,8 @@ public class UnfoldMoveFromCenterWorkspaceAnimator extends BaseUnfoldMoveFromCen final CellLayout cellLayout = (CellLayout) page; ShortcutAndWidgetContainer itemsContainer = cellLayout .getShortcutsAndWidgets(); - disableClipping(cellLayout); + setClipChildren(cellLayout, false); + setClipToPadding(cellLayout, false); for (int i = 0; i < itemsContainer.getChildCount(); i++) { View child = itemsContainer.getChildAt(i); @@ -55,13 +56,13 @@ public class UnfoldMoveFromCenterWorkspaceAnimator extends BaseUnfoldMoveFromCen } }); - disableClipping(workspace); + setClipChildren(workspace, false); + setClipToPadding(workspace, true); } @Override public void onTransitionFinished() { - restoreClipping(mLauncher.getWorkspace()); - mLauncher.getWorkspace().forEachVisiblePage(page -> restoreClipping((CellLayout) page)); + restoreClippings(); super.onTransitionFinished(); } }