summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Tony Huang <tonyychuang@google.com> 2021-12-22 02:47:05 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-12-22 02:47:05 +0000
commite1f575dee2e3a9b03882f288b2080518d1b74f0f (patch)
treed7c5c93a862ea99945a9e683631b1ac3484f426e
parent827dd0bbda47cee4f0427cef6456b7245454cb58 (diff)
parentf3741120c1336cff854b69fcdb9f510c58a6d5c1 (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.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java27
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)