Merge "Revert "Have createRootTask return TaskAppearInfo""
This commit is contained in:
committed by
Android (Google) Code Review
commit
f780c31a2b
@@ -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<android.app.ActivityManager.RunningTaskInfo> getChildTasks(@NonNull android.window.WindowContainerToken, @NonNull int[]);
|
||||
method @Nullable @RequiresPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS) public android.window.WindowContainerToken getImeTarget(int);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user