From e11ad96453f0f2c81a54d31e3dac78812d5623db Mon Sep 17 00:00:00 2001 From: Wei Sheng Shih Date: Thu, 22 Oct 2020 12:08:18 +0000 Subject: [PATCH] Revert "Have createRootTask return TaskAppearInfo" Revert "ARC++ changes to mirror changes to createRootTask" Revert submission 12855635-create-root-task Reason for revert: b/171369770 Reverted Changes: Iabf090caa:ARC++ changes to mirror changes to createRootTask I5948e6234:Have createRootTask return TaskAppearInfo Fixes: 171369770 Bug: 169266958 Change-Id: Iee1cf0b30e368987931f928de8c691640e18286a --- api/test-current.txt | 2 +- .../window/ITaskOrganizerController.aidl | 8 +-- core/java/android/window/TaskOrganizer.java | 2 +- .../Shell/res/raw/wm_shell_protolog.json | 6 -- .../android/wm/shell/ShellTaskOrganizer.java | 14 ---- .../splitscreen/SplitScreenTaskOrganizer.java | 70 +++++++++++-------- .../server/wm/TaskOrganizerController.java | 12 +--- .../android/server/wm/ActivityStackTests.java | 22 +----- .../server/wm/WindowOrganizerTests.java | 29 ++------ .../android/server/wm/WindowTestsBase.java | 4 +- 10 files changed, 54 insertions(+), 115 deletions(-) diff --git a/api/test-current.txt b/api/test-current.txt index 8bf8c64c5c559..3b1e02d056224 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -2372,7 +2372,7 @@ package android.window { public class TaskOrganizer extends android.window.WindowOrganizer { ctor public TaskOrganizer(); - method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.TaskAppearedInfo createRootTask(int, int); + method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.app.ActivityManager.RunningTaskInfo createRootTask(int, int); method @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public boolean deleteRootTask(@NonNull android.window.WindowContainerToken); method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public java.util.List getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]); method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.WindowContainerToken getImeTarget(int); diff --git a/core/java/android/window/ITaskOrganizerController.aidl b/core/java/android/window/ITaskOrganizerController.aidl index b5a11b1a8136c..3a84c1f98ce68 100644 --- a/core/java/android/window/ITaskOrganizerController.aidl +++ b/core/java/android/window/ITaskOrganizerController.aidl @@ -39,12 +39,8 @@ interface ITaskOrganizerController { */ void unregisterTaskOrganizer(ITaskOrganizer organizer); - /** - * Creates a persistent root task in WM for a particular windowing-mode. - * {@link TaskOrganizer#onTaskAppeared} won't be called since we are returning - * {@link TaskAppearedInfo} here. - */ - TaskAppearedInfo createRootTask(int displayId, int windowingMode); + /** Creates a persistent root task in WM for a particular windowing-mode. */ + ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode); /** Deletes a persistent root task in WM */ boolean deleteRootTask(in WindowContainerToken task); diff --git a/core/java/android/window/TaskOrganizer.java b/core/java/android/window/TaskOrganizer.java index 8a58db90d375d..6c739bed35a45 100644 --- a/core/java/android/window/TaskOrganizer.java +++ b/core/java/android/window/TaskOrganizer.java @@ -104,7 +104,7 @@ public class TaskOrganizer extends WindowOrganizer { /** Creates a persistent root task in WM for a particular windowing-mode. */ @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) @Nullable - public TaskAppearedInfo createRootTask(int displayId, int windowingMode) { + public ActivityManager.RunningTaskInfo createRootTask(int displayId, int windowingMode) { try { return mTaskOrganizerController.createRootTask(displayId, windowingMode); } catch (RemoteException e) { diff --git a/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json b/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json index 02bf385047259..3f6ca0fc52462 100644 --- a/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json +++ b/libs/WindowManager/Shell/res/raw/wm_shell_protolog.json @@ -31,12 +31,6 @@ "group": "WM_SHELL_TASK_ORG", "at": "com\/android\/wm\/shell\/ShellTaskOrganizer.java" }, - "-1312360667": { - "message": "createRootTask() displayId=%d winMode=%d listener=%s", - "level": "VERBOSE", - "group": "WM_SHELL_TASK_ORG", - "at": "com\/android\/wm\/shell\/ShellTaskOrganizer.java" - }, "-880817403": { "message": "Task vanished taskId=%d", "level": "VERBOSE", diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java index 28cf8a1910832..cbc1c8d6d3102 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/ShellTaskOrganizer.java @@ -137,20 +137,6 @@ public class ShellTaskOrganizer extends TaskOrganizer { } } - public TaskAppearedInfo createRootTask( - int displayId, int windowingMode, TaskListener listener) { - synchronized (mLock) { - ProtoLog.v(WM_SHELL_TASK_ORG, "createRootTask() displayId=%d winMode=%d listener=%s", - displayId, windowingMode, listener.toString()); - final TaskAppearedInfo info = super.createRootTask(displayId, windowingMode); - - // Add the listener and send the task appeared signal - mTaskListeners.put(info.getTaskInfo().taskId, listener); - onTaskAppeared(info); - return info; - } - } - /** * Adds a listener for a specific task id. */ diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java index 0a1aadc90a620..f763d6d714c44 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTaskOrganizer.java @@ -33,7 +33,6 @@ import android.util.Log; import android.view.Display; import android.view.SurfaceControl; import android.view.SurfaceSession; -import android.window.TaskAppearedInfo; import androidx.annotation.NonNull; @@ -69,15 +68,10 @@ class SplitScreenTaskOrganizer implements ShellTaskOrganizer.TaskListener { void init() throws RemoteException { synchronized (this) { try { - final TaskAppearedInfo primary = mTaskOrganizer.createRootTask( - Display.DEFAULT_DISPLAY, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, this); - final TaskAppearedInfo secondary = mTaskOrganizer.createRootTask( - Display.DEFAULT_DISPLAY, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, this); - mPrimary = primary.getTaskInfo(); - mPrimarySurface = primary.getLeash(); - mSecondary = secondary.getTaskInfo(); - mSecondarySurface = secondary.getLeash(); - enableSplitScreenSupportIfNeeded(); + mPrimary = mTaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY, + WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); + mSecondary = mTaskOrganizer.createRootTask(Display.DEFAULT_DISPLAY, + WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); } catch (Exception e) { // teardown to prevent callbacks mTaskOrganizer.removeListener(this); @@ -98,29 +92,43 @@ class SplitScreenTaskOrganizer implements ShellTaskOrganizer.TaskListener { mSplitScreenController.mTransactionPool.release(t); } - private void enableSplitScreenSupportIfNeeded() { - if (mSplitScreenSupported || mPrimarySurface == null || mSecondarySurface == null) return; + @Override + public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { + synchronized (this) { + if (mPrimary == null || mSecondary == null) { + Log.w(TAG, "Received onTaskAppeared before creating root tasks " + taskInfo); + return; + } - mSplitScreenSupported = true; + if (taskInfo.token.equals(mPrimary.token)) { + mPrimarySurface = leash; + } else if (taskInfo.token.equals(mSecondary.token)) { + mSecondarySurface = leash; + } - // Initialize dim surfaces: - mPrimaryDim = new SurfaceControl.Builder(mSurfaceSession) - .setParent(mPrimarySurface).setColorLayer() - .setName("Primary Divider Dim") - .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared") - .build(); - mSecondaryDim = new SurfaceControl.Builder(mSurfaceSession) - .setParent(mSecondarySurface).setColorLayer() - .setName("Secondary Divider Dim") - .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared") - .build(); - SurfaceControl.Transaction t = getTransaction(); - t.setLayer(mPrimaryDim, Integer.MAX_VALUE); - t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f}); - t.setLayer(mSecondaryDim, Integer.MAX_VALUE); - t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f}); - t.apply(); - releaseTransaction(t); + if (!mSplitScreenSupported && mPrimarySurface != null && mSecondarySurface != null) { + mSplitScreenSupported = true; + + // Initialize dim surfaces: + mPrimaryDim = new SurfaceControl.Builder(mSurfaceSession) + .setParent(mPrimarySurface).setColorLayer() + .setName("Primary Divider Dim") + .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared") + .build(); + mSecondaryDim = new SurfaceControl.Builder(mSurfaceSession) + .setParent(mSecondarySurface).setColorLayer() + .setName("Secondary Divider Dim") + .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared") + .build(); + SurfaceControl.Transaction t = getTransaction(); + t.setLayer(mPrimaryDim, Integer.MAX_VALUE); + t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f}); + t.setLayer(mSecondaryDim, Integer.MAX_VALUE); + t.setColor(mSecondaryDim, new float[]{0f, 0f, 0f}); + t.apply(); + releaseTransaction(t); + } + } } @Override diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 6486b78eb6016..6504f00905e73 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -389,10 +389,6 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } void onTaskAppeared(ITaskOrganizer organizer, Task task) { - // Don't send onTaskAppeared signal for task created by organizer since we will return it in - // the creation call. - if (task.mCreatedByOrganizer) return; - final TaskOrganizerState state = mTaskOrganizerStates.get(organizer.asBinder()); state.addTask(task); } @@ -405,7 +401,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { } @Override - public TaskAppearedInfo createRootTask(int displayId, int windowingMode) { + public RunningTaskInfo createRootTask(int displayId, int windowingMode) { enforceStackPermission("createRootTask()"); final long origId = Binder.clearCallingIdentity(); try { @@ -422,11 +418,7 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { true /* createdByOrganizer */); RunningTaskInfo out = task.getTaskInfo(); mLastSentTaskInfos.put(task, out); - final TaskOrganizerState state = - mTaskOrganizerStates.get(task.mTaskOrganizer.asBinder()); - final SurfaceControl outSurfaceControl = state.addTaskWithoutCallback(task, - "TaskOrganizerController.createRootTask"); - return new TaskAppearedInfo(task.getTaskInfo(), outSurfaceControl); + return out; } } finally { Binder.restoreCallingIdentity(origId); diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java index 3dc258c519547..caf8a720e26c4 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityStackTests.java @@ -70,8 +70,6 @@ import android.content.pm.ActivityInfo; import android.os.Binder; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; -import android.view.SurfaceControl; -import android.window.ITaskOrganizer; import androidx.test.filters.SmallTest; @@ -242,24 +240,6 @@ public class ActivityStackTests extends WindowTestsBase { @Test public void testRemoveOrganizedTask_UpdateStackReference() { - ITaskOrganizer listener = new ITaskOrganizer.Stub() { - @Override - public void onTaskAppeared( - ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { } - - @Override - public void onTaskVanished(ActivityManager.RunningTaskInfo container) { } - - @Override - public void onTaskInfoChanged(ActivityManager.RunningTaskInfo info) { - } - - @Override - public void onBackPressedOnTaskRoot(ActivityManager.RunningTaskInfo taskInfo) { - } - }; - mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener); - final Task rootHomeTask = mDefaultTaskDisplayArea.getRootHomeTask(); final ActivityRecord homeActivity = new ActivityBuilder(mAtm) .setStack(rootHomeTask) @@ -267,7 +247,7 @@ public class ActivityStackTests extends WindowTestsBase { .build(); final Task secondaryStack = (Task) WindowContainer.fromBinder( mAtm.mTaskOrganizerController.createRootTask(rootHomeTask.getDisplayId(), - WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo().token.asBinder()); + WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token.asBinder()); rootHomeTask.reparent(secondaryStack, POSITION_TOP); assertEquals(secondaryStack, rootHomeTask.getParent()); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java index c790f840485f4..7a1f65a3b62cf 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowOrganizerTests.java @@ -479,33 +479,16 @@ public class WindowOrganizerTests extends WindowTestsBase { @Test public void testCreateDeleteRootTasks() { - ITaskOrganizer listener = new ITaskOrganizer.Stub() { - @Override - public void onTaskAppeared(RunningTaskInfo taskInfo, SurfaceControl leash) { } - - @Override - public void onTaskVanished(RunningTaskInfo container) { } - - @Override - public void onTaskInfoChanged(RunningTaskInfo info) { - } - - @Override - public void onBackPressedOnTaskRoot(RunningTaskInfo taskInfo) { - } - }; - mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener); - RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask( Display.DEFAULT_DISPLAY, - WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).getTaskInfo(); + WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); assertEquals(WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, info1.configuration.windowConfiguration.getWindowingMode()); assertEquals(ACTIVITY_TYPE_UNDEFINED, info1.topActivityType); RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( Display.DEFAULT_DISPLAY, - WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo(); + WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); assertEquals(WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, info2.configuration.windowConfiguration.getWindowingMode()); assertEquals(ACTIVITY_TYPE_UNDEFINED, info2.topActivityType); @@ -539,7 +522,7 @@ public class WindowOrganizerTests extends WindowTestsBase { }; mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener); RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask( - mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo(); + mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); final Task stack = createTaskStackOnDisplay( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent); @@ -597,7 +580,7 @@ public class WindowOrganizerTests extends WindowTestsBase { }; mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener); RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask( - mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo(); + mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); lastReportedTiles.clear(); called[0] = false; @@ -658,9 +641,9 @@ public class WindowOrganizerTests extends WindowTestsBase { }; mWm.mAtmService.mTaskOrganizerController.registerTaskOrganizer(listener); RunningTaskInfo info1 = mWm.mAtmService.mTaskOrganizerController.createRootTask( - mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).getTaskInfo(); + mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY); RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( - mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo(); + mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); final int initialRootTaskCount = mWm.mAtmService.mTaskOrganizerController.getRootTasks( mDisplayContent.mDisplayId, null /* activityTypes */).size(); diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java index 924b286a4f8e8..6237be0f4b268 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java @@ -1006,10 +1006,10 @@ class WindowTestsBase extends SystemServiceTestsBase { mDisplayId = displayId; mService.mTaskOrganizerController.registerTaskOrganizer(this); WindowContainerToken primary = mService.mTaskOrganizerController.createRootTask( - displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).getTaskInfo().token; + displayId, WINDOWING_MODE_SPLIT_SCREEN_PRIMARY).token; mPrimary = WindowContainer.fromBinder(primary.asBinder()).asTask(); WindowContainerToken secondary = mService.mTaskOrganizerController.createRootTask( - displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).getTaskInfo().token; + displayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY).token; mSecondary = WindowContainer.fromBinder(secondary.asBinder()).asTask(); } TestSplitOrganizer(ActivityTaskManagerService service) {