diff options
| author | 2021-12-22 02:47:05 +0000 | |
|---|---|---|
| committer | 2021-12-22 02:47:05 +0000 | |
| commit | e1f575dee2e3a9b03882f288b2080518d1b74f0f (patch) | |
| tree | d7c5c93a862ea99945a9e683631b1ac3484f426e | |
| parent | 827dd0bbda47cee4f0427cef6456b7245454cb58 (diff) | |
| parent | f3741120c1336cff854b69fcdb9f510c58a6d5c1 (diff) | |
Merge "Make sure launcher side can animate divider" into sc-v2-dev
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java | 2 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java | 27 |
2 files changed, 22 insertions, 7 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java index 46c4a40191be..8b87df44c52c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java @@ -363,7 +363,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } RemoteAnimationTarget[] onGoingToRecentsLegacy(boolean cancel, RemoteAnimationTarget[] apps) { - if (!isSplitScreenVisible()) return null; + if (apps.length < 2) return null; final SurfaceControl.Builder builder = new SurfaceControl.Builder(new SurfaceSession()) .setContainerLayer() .setName("RecentsAnimationSplitTasks") diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index da78d5e4d244..912e2a46fcbf 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -158,6 +158,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, private boolean mExitSplitScreenOnHide; private boolean mKeyguardOccluded; private boolean mDeviceSleep; + private boolean mIsDividerRemoteAnimating; @StageType private int mDismissTop = NO_DISMISS; @@ -364,6 +365,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio, RemoteAnimationAdapter adapter) { + // Init divider first to make divider leash for remote animation target. + setDividerVisibility(true /* visible */); final WindowContainerTransaction wct = new WindowContainerTransaction(); // Need to add another wrapper here in shell so that we can inject the divider bar // and also manage the process elevation via setRunningRemote @@ -374,12 +377,23 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, final IRemoteAnimationFinishedCallback finishedCallback) { + mIsDividerRemoteAnimating = true; RemoteAnimationTarget[] augmentedNonApps = new RemoteAnimationTarget[nonApps.length + 1]; for (int i = 0; i < nonApps.length; ++i) { augmentedNonApps[i] = nonApps[i]; } augmentedNonApps[augmentedNonApps.length - 1] = getDividerBarLegacyTarget(); + + IRemoteAnimationFinishedCallback wrapCallback = + new IRemoteAnimationFinishedCallback.Stub() { + @Override + public void onAnimationFinished() throws RemoteException { + mIsDividerRemoteAnimating = false; + mSyncQueue.runInSync(t -> applyDividerVisibility(t)); + finishedCallback.onAnimationFinished(); + } + }; try { try { ActivityTaskManager.getService().setRunningRemoteTransitionDelegate( @@ -388,8 +402,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, Slog.e(TAG, "Unable to boost animation thread. This should only happen" + " during unit tests"); } - adapter.getRunner().onAnimationStart(transit, apps, wallpapers, nonApps, - finishedCallback); + adapter.getRunner().onAnimationStart(transit, apps, wallpapers, + augmentedNonApps, wrapCallback); } catch (RemoteException e) { Slog.e(TAG, "Error starting remote animation", e); } @@ -397,6 +411,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, @Override public void onAnimationCancelled() { + mIsDividerRemoteAnimating = false; try { adapter.getRunner().onAnimationCancelled(); } catch (RemoteException e) { @@ -832,7 +847,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, } private void setDividerVisibility(boolean visible) { - if (mDividerVisible == visible) return; + if (mIsDividerRemoteAnimating || mDividerVisible == visible) return; mDividerVisible = visible; if (visible) { mSplitLayout.init(); @@ -880,10 +895,10 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, } private void applyDividerVisibility(SurfaceControl.Transaction t) { + if (mIsDividerRemoteAnimating) return; + final SurfaceControl dividerLeash = mSplitLayout.getDividerLeash(); - if (dividerLeash == null) { - return; - } + if (dividerLeash == null) return; if (mDividerVisible) { t.show(dividerLeash) |