summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinson Chung <winsonc@google.com>2020-05-29 21:18:22 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-05-29 21:18:22 +0000
commit30d7f640f61e2a068be75075e33b5ef69b455ccb (patch)
tree5f7fe113db09d82ab1595ee00ac421ab709f1f5b
parent65b8fd06be562946a2b4747006c5fc0be7cec793 (diff)
parent1298d2b7601383ad6e9c6964e939f6bfbd7093e2 (diff)
Merge "Mirror task visibility on task org leash" into rvc-dev am: 1298d2b760
Change-Id: If7b85abd5c2f5356688f2d2575df6ac8870fbc3d
-rw-r--r--core/java/android/window/ITaskOrganizer.aidl3
-rw-r--r--core/java/android/window/TaskOrganizer.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java1
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java10
4 files changed, 18 insertions, 1 deletions
diff --git a/core/java/android/window/ITaskOrganizer.aidl b/core/java/android/window/ITaskOrganizer.aidl
index 67465252d38e..abca136c347e 100644
--- a/core/java/android/window/ITaskOrganizer.aidl
+++ b/core/java/android/window/ITaskOrganizer.aidl
@@ -27,7 +27,8 @@ import android.window.WindowContainerToken;
oneway interface ITaskOrganizer {
/**
* A callback when the Task is available for the registered organizer. The client is responsible
- * for releasing the SurfaceControl in the callback.
+ * for releasing the SurfaceControl in the callback. For non-root tasks, the leash may initially
+ * be hidden so it is up to the organizer to show this task.
*
* @param taskInfo The information about the Task that's available
* @param leash A persistent leash for this Task.
diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java
index 1f5e53369cd8..502680de9bcf 100644
--- a/core/java/android/window/TaskOrganizer.java
+++ b/core/java/android/window/TaskOrganizer.java
@@ -59,6 +59,11 @@ public class TaskOrganizer extends WindowOrganizer {
}
}
+ /**
+ * Called when a task with the registered windowing mode can be controlled by this task
+ * organizer. For non-root tasks, the leash may initially be hidden so it is up to the organizer
+ * to show this task.
+ */
@BinderThread
public void onTaskAppeared(@NonNull ActivityManager.RunningTaskInfo taskInfo,
@NonNull SurfaceControl leash) {}
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
index b593bb4a85b0..2be49c8bfeda 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
@@ -340,6 +340,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements
final SurfaceControl.Transaction tx =
mSurfaceControlTransactionFactory.getTransaction();
tx.setAlpha(mLeash, 0f);
+ tx.show(mLeash);
tx.apply();
return;
}
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 83105c2f8696..1da1d116b938 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -98,11 +98,14 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
final ITaskOrganizer mTaskOrganizer;
final Consumer<Runnable> mDeferTaskOrgCallbacksConsumer;
+ private final SurfaceControl.Transaction mTransaction;
+
TaskOrganizerCallbacks(WindowManagerService wm, ITaskOrganizer taskOrg,
Consumer<Runnable> deferTaskOrgCallbacksConsumer) {
mService = wm;
mDeferTaskOrgCallbacksConsumer = deferTaskOrgCallbacksConsumer;
mTaskOrganizer = taskOrg;
+ mTransaction = wm.mTransactionFactory.get();
}
IBinder getBinder() {
@@ -110,10 +113,17 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
}
void onTaskAppeared(Task task) {
+ final boolean visible = task.isVisible();
final RunningTaskInfo taskInfo = task.getTaskInfo();
mDeferTaskOrgCallbacksConsumer.accept(() -> {
try {
SurfaceControl outSurfaceControl = new SurfaceControl(task.getSurfaceControl());
+ if (!task.mCreatedByOrganizer && !visible) {
+ // To prevent flashes, we hide the task prior to sending the leash to the
+ // task org if the task has previously hidden (ie. when entering PIP)
+ mTransaction.hide(outSurfaceControl);
+ mTransaction.apply();
+ }
mTaskOrganizer.onTaskAppeared(taskInfo, outSurfaceControl);
} catch (RemoteException e) {
Slog.e(TAG, "Exception sending onTaskAppeared callback", e);