diff options
| author | 2020-04-10 23:13:52 +0000 | |
|---|---|---|
| committer | 2020-04-10 23:13:52 +0000 | |
| commit | c3721ac874cb848b78b77d268b09ea2f3d756a93 (patch) | |
| tree | fbff189d14b5c4e7350f5bf967dcd76d7e55c36d | |
| parent | f622ff9add095019a1463379a0aeccc3e9abf917 (diff) | |
| parent | 3c981f6eb7d5c769231700dee91c539f73ec5f88 (diff) | |
Merge "Deprecates the animatingBounds from WM to SysUI" into rvc-dev
9 files changed, 51 insertions, 61 deletions
diff --git a/core/java/android/view/IPinnedStackListener.aidl b/core/java/android/view/IPinnedStackListener.aidl index 071c2593f522..b6ce9f52e0c3 100644 --- a/core/java/android/view/IPinnedStackListener.aidl +++ b/core/java/android/view/IPinnedStackListener.aidl @@ -37,13 +37,9 @@ oneway interface IPinnedStackListener { /** * Called when the window manager has detected a change that would cause the movement bounds - * to be changed (ie. after configuration change, aspect ratio change, etc). It then provides - * the components that allow the listener to calculate the movement bounds itself. - * The {@param animatingBounds} are provided to indicate the current target bounds of the - * pinned stack (the final bounds if animating, the current bounds if not), - * which may be helpful in calculating dependent animation bounds. + * to be changed (ie. after configuration change, aspect ratio change, etc). */ - void onMovementBoundsChanged(in Rect animatingBounds, boolean fromImeAdjustment); + void onMovementBoundsChanged(boolean fromImeAdjustment); /** * Called when window manager decides to adjust the pinned stack bounds because of the IME, or diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/PinnedStackListenerForwarder.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/PinnedStackListenerForwarder.java index 34a0268201f4..4794847d8be1 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/PinnedStackListenerForwarder.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/PinnedStackListenerForwarder.java @@ -18,7 +18,6 @@ package com.android.systemui.shared.system; import android.content.ComponentName; import android.content.pm.ParceledListSlice; -import android.graphics.Rect; import android.view.DisplayInfo; import android.view.IPinnedStackController; import android.view.IPinnedStackListener; @@ -53,9 +52,9 @@ public class PinnedStackListenerForwarder extends IPinnedStackListener.Stub { } @Override - public void onMovementBoundsChanged(Rect animatingBounds, boolean fromImeAdjustment) { + public void onMovementBoundsChanged(boolean fromImeAdjustment) { for (PinnedStackListener listener : mListeners) { - listener.onMovementBoundsChanged(animatingBounds, fromImeAdjustment); + listener.onMovementBoundsChanged(fromImeAdjustment); } } @@ -108,7 +107,7 @@ public class PinnedStackListenerForwarder extends IPinnedStackListener.Stub { public static class PinnedStackListener { public void onListenerRegistered(IPinnedStackController controller) {} - public void onMovementBoundsChanged(Rect animatingBounds, boolean fromImeAdjustment) {} + public void onMovementBoundsChanged(boolean fromImeAdjustment) {} public void onImeVisibilityChanged(boolean imeVisible, int imeHeight) {} diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index d2994aebeb33..a95d6b7a73cd 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -317,17 +317,22 @@ public class PipTaskOrganizer extends TaskOrganizer { /** * TODO(b/152809058): consolidate the display info handling logic in SysUI + * + * @param destinationBoundsOut the current destination bounds will be populated to this param */ @SuppressWarnings("unchecked") - public void onMovementBoundsChanged(boolean fromImeAdjustment, boolean fromShelfAdjustment) { + public void onMovementBoundsChanged(Rect destinationBoundsOut, + boolean fromImeAdjustment, boolean fromShelfAdjustment) { final PipAnimationController.PipTransitionAnimator animator = mPipAnimationController.getCurrentAnimator(); + destinationBoundsOut.set(mLastReportedBounds); if (animator == null || !animator.isRunning() || animator.getTransitionDirection() != TRANSITION_DIRECTION_TO_PIP) { return; } final Rect currentDestinationBounds = animator.getDestinationBounds(); + destinationBoundsOut.set(currentDestinationBounds); if (!fromImeAdjustment && !fromShelfAdjustment && mPipBoundsHandler.getDisplayBounds().contains(currentDestinationBounds)) { // no need to update the destination bounds, bail early @@ -342,6 +347,7 @@ public class PipTaskOrganizer extends TaskOrganizer { animator.updateEndValue(newDestinationBounds); } animator.setDestinationBounds(newDestinationBounds); + destinationBoundsOut.set(newDestinationBounds); } /** diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java index 918c45b52d61..a2667d9a4c74 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipManager.java @@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; import static com.android.systemui.pip.PipAnimationController.TRANSITION_DIRECTION_TO_FULLSCREEN; +import android.annotation.Nullable; import android.app.ActivityManager; import android.app.ActivityTaskManager; import android.app.IActivityManager; @@ -160,9 +161,9 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio } @Override - public void onMovementBoundsChanged(Rect animatingBounds, boolean fromImeAdjustment) { - mHandler.post(() -> updateMovementBounds(animatingBounds, fromImeAdjustment, - false /* fromShelfAdjustment */)); + public void onMovementBoundsChanged(boolean fromImeAdjustment) { + mHandler.post(() -> updateMovementBounds(null /* toBounds */, + fromImeAdjustment, false /* fromShelfAdjustment */)); } @Override @@ -352,17 +353,19 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio mMenuController.onPinnedStackAnimationEnded(); } - private void updateMovementBounds(Rect animatingBounds, boolean fromImeAdjustment, - boolean fromShelfAdjustment) { + private void updateMovementBounds(@Nullable Rect toBounds, + boolean fromImeAdjustment, boolean fromShelfAdjustment) { // Populate inset / normal bounds and DisplayInfo from mPipBoundsHandler before - // passing to mTouchHandler, mTouchHandler would rely on the bounds calculated by - // mPipBoundsHandler with up-to-dated information + // passing to mTouchHandler/mPipTaskOrganizer + final Rect outBounds = new Rect(toBounds); mPipBoundsHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds, - animatingBounds, mTmpDisplayInfo); + outBounds, mTmpDisplayInfo); + // mTouchHandler would rely on the bounds populated from mPipTaskOrganizer + mPipTaskOrganizer.onMovementBoundsChanged(outBounds, + fromImeAdjustment, fromShelfAdjustment); mTouchHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds, - animatingBounds, fromImeAdjustment, fromShelfAdjustment, + outBounds, fromImeAdjustment, fromShelfAdjustment, mTmpDisplayInfo.rotation); - mPipTaskOrganizer.onMovementBoundsChanged(fromImeAdjustment, fromShelfAdjustment); } public void dump(PrintWriter pw) { diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java index 1e9daab4a0b6..ddba9eab7766 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -380,11 +380,18 @@ public class PipTouchHandler { } // Re-calculate the expanded bounds - mNormalBounds = normalBounds; + mNormalBounds.set(normalBounds); Rect normalMovementBounds = new Rect(); mSnapAlgorithm.getMovementBounds(mNormalBounds, insetBounds, normalMovementBounds, bottomOffset); + if (mMovementBounds.isEmpty()) { + // mMovementBounds is not initialized yet and a clean movement bounds without + // bottom offset shall be used later in this function. + mSnapAlgorithm.getMovementBounds(curBounds, insetBounds, mMovementBounds, + 0 /* bottomOffset */); + } + // Calculate the expanded size float aspectRatio = (float) normalBounds.width() / normalBounds.height(); Point displaySize = new Point(); @@ -430,8 +437,8 @@ public class PipTouchHandler { // Update the movement bounds after doing the calculations based on the old movement bounds // above - mNormalMovementBounds = normalMovementBounds; - mExpandedMovementBounds = expandedMovementBounds; + mNormalMovementBounds.set(normalMovementBounds); + mExpandedMovementBounds.set(expandedMovementBounds); mDisplayRotation = displayRotation; mInsetBounds.set(insetBounds); updateMovementBounds(); diff --git a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java index e25bfaab93a9..bab1f39d63e0 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/pip/tv/PipManager.java @@ -208,12 +208,13 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio } @Override - public void onMovementBoundsChanged(Rect animatingBounds, boolean fromImeAdjustment) { + public void onMovementBoundsChanged(boolean fromImeAdjustment) { mHandler.post(() -> { // Populate the inset / normal bounds and DisplayInfo from mPipBoundsHandler first. + final Rect destinationBounds = new Rect(); mPipBoundsHandler.onMovementBoundsChanged(mTmpInsetBounds, mTmpNormalBounds, - animatingBounds, mTmpDisplayInfo); - mDefaultPipBounds.set(animatingBounds); + destinationBounds, mTmpDisplayInfo); + mDefaultPipBounds.set(destinationBounds); }); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchHandlerTest.java b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchHandlerTest.java index 4d7e6aec8aa9..721125409c5a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchHandlerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/pip/phone/PipTouchHandlerTest.java @@ -29,7 +29,6 @@ import android.graphics.Rect; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.util.Size; -import android.view.DisplayInfo; import androidx.test.filters.SmallTest; @@ -59,12 +58,8 @@ import org.mockito.MockitoAnnotations; @SmallTest @TestableLooper.RunWithLooper(setAsMainLooper = true) public class PipTouchHandlerTest extends SysuiTestCase { - private static final int ROUNDING_ERROR_MARGIN = 10; - private static final float DEFAULT_ASPECT_RATIO = 1f; - private static final Rect EMPTY_CURRENT_BOUNDS = null; private PipTouchHandler mPipTouchHandler; - private DisplayInfo mDefaultDisplayInfo; @Mock private IActivityManager mActivityManager; @@ -90,18 +85,17 @@ public class PipTouchHandlerTest extends SysuiTestCase { @Mock private DeviceConfigProxy mDeviceConfigProxy; - private PipSnapAlgorithm mPipSnapAlgorithm; private PipMotionHelper mMotionHelper; private PipResizeGestureHandler mPipResizeGestureHandler; - Rect mInsetBounds; - Rect mMinBounds; - Rect mCurBounds; - boolean mFromImeAdjustment; - boolean mFromShelfAdjustment; - int mDisplayRotation; - + private Rect mInsetBounds; + private Rect mMinBounds; + private Rect mCurBounds; + private boolean mFromImeAdjustment; + private boolean mFromShelfAdjustment; + private int mDisplayRotation; + private int mImeHeight; @Before public void setUp() throws Exception { @@ -121,10 +115,11 @@ public class PipTouchHandlerTest extends SysuiTestCase { mInsetBounds = new Rect(10, 10, 990, 990); // minBounds of 100x100 bottom right corner mMinBounds = new Rect(890, 890, 990, 990); - mCurBounds = new Rect(); + mCurBounds = new Rect(mMinBounds); mFromImeAdjustment = false; mFromShelfAdjustment = false; mDisplayRotation = 0; + mImeHeight = 100; } @Test @@ -162,6 +157,8 @@ public class PipTouchHandlerTest extends SysuiTestCase { @Test public void updateMovementBounds_withImeAdjustment_movesPip() { mFromImeAdjustment = true; + mPipTouchHandler.onImeVisibilityChanged(true /* imeVisible */, mImeHeight); + mPipTouchHandler.onMovementBoundsChanged(mInsetBounds, mMinBounds, mCurBounds, mFromImeAdjustment, mFromShelfAdjustment, mDisplayRotation); diff --git a/services/core/java/com/android/server/wm/ActivityStack.java b/services/core/java/com/android/server/wm/ActivityStack.java index 0f52248eb4dd..a215a6137291 100644 --- a/services/core/java/com/android/server/wm/ActivityStack.java +++ b/services/core/java/com/android/server/wm/ActivityStack.java @@ -3407,18 +3407,6 @@ class ActivityStack extends Task { outBounds.set(mBoundsAnimationSourceHintBounds); } - /** - * @return the final animation bounds if the task stack is currently being animated, or the - * current stack bounds otherwise. - */ - void getAnimationOrCurrentBounds(Rect outBounds) { - if ((mBoundsAnimatingRequested || mBoundsAnimating) && !mBoundsAnimationTarget.isEmpty()) { - getFinalAnimationBounds(outBounds); - return; - } - getBounds(outBounds); - } - /** Bounds of the stack with other system factors taken into consideration. */ void getDimBounds(Rect out) { getBounds(out); diff --git a/services/core/java/com/android/server/wm/PinnedStackController.java b/services/core/java/com/android/server/wm/PinnedStackController.java index 02a27410dc38..56312aa1b0b8 100644 --- a/services/core/java/com/android/server/wm/PinnedStackController.java +++ b/services/core/java/com/android/server/wm/PinnedStackController.java @@ -23,7 +23,6 @@ import android.app.RemoteAction; import android.content.ComponentName; import android.content.pm.ParceledListSlice; import android.content.res.Resources; -import android.graphics.Rect; import android.os.Handler; import android.os.IBinder; import android.os.RemoteException; @@ -285,13 +284,7 @@ class PinnedStackController { return; } try { - final Rect animatingBounds = new Rect(); - final ActivityStack pinnedStack = mDisplayContent.getDefaultTaskDisplayArea() - .getRootPinnedTask(); - if (pinnedStack != null) { - pinnedStack.getAnimationOrCurrentBounds(animatingBounds); - } - mPinnedStackListener.onMovementBoundsChanged(animatingBounds, fromImeAdjustment); + mPinnedStackListener.onMovementBoundsChanged(fromImeAdjustment); } catch (RemoteException e) { Slog.e(TAG_WM, "Error delivering actions changed event.", e); } |