Loading core/java/android/app/ITaskOrganizerController.aidl +5 −1 Original line number Original line Diff line number Diff line Loading @@ -52,7 +52,11 @@ interface ITaskOrganizerController { boolean deleteRootTask(IWindowContainer task); boolean deleteRootTask(IWindowContainer task); /** Gets direct child tasks (ordered from top-to-bottom) */ /** Gets direct child tasks (ordered from top-to-bottom) */ List<ActivityManager.RunningTaskInfo> getChildTasks(in IWindowContainer parent); List<ActivityManager.RunningTaskInfo> getChildTasks(in IWindowContainer parent, in int[] activityTypes); /** Gets all root tasks on a display (ordered from top-to-bottom) */ List<ActivityManager.RunningTaskInfo> getRootTasks(int displayId, in int[] activityTypes); /** Get the root task which contains the current ime target */ /** Get the root task which contains the current ime target */ IWindowContainer getImeTarget(int display); IWindowContainer getImeTarget(int display); Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -2795,6 +2795,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } } } // TODO(148895075): deprecate and replace with task equivalents @Override @Override public List<ActivityManager.StackInfo> getAllStackInfos() { public List<ActivityManager.StackInfo> getAllStackInfos() { enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); Loading @@ -2821,6 +2822,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } } } // TODO(148895075): deprecate and replace with task equivalents @Override @Override public List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId) { public List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId) { enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); Loading services/core/java/com/android/server/wm/TaskOrganizerController.java +41 −1 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.view.IWindowContainer; import android.view.SurfaceControl; import android.view.SurfaceControl; import android.view.WindowContainerTransaction; import android.view.WindowContainerTransaction; import com.android.internal.util.ArrayUtils; import com.android.internal.util.function.pooled.PooledConsumer; import com.android.internal.util.function.pooled.PooledConsumer; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledLambda; Loading Loading @@ -379,7 +380,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub } } @Override @Override public List<RunningTaskInfo> getChildTasks(IWindowContainer parent) { public List<RunningTaskInfo> getChildTasks(IWindowContainer parent, @Nullable int[] activityTypes) { enforceStackPermission("getChildTasks()"); enforceStackPermission("getChildTasks()"); final long ident = Binder.clearCallingIdentity(); final long ident = Binder.clearCallingIdentity(); try { try { Loading @@ -405,6 +407,10 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub for (int i = dc.getStackCount() - 1; i >= 0; --i) { for (int i = dc.getStackCount() - 1; i >= 0; --i) { final ActivityStack as = dc.getStackAt(i); final ActivityStack as = dc.getStackAt(i); if (as.getTile() == container) { if (as.getTile() == container) { if (activityTypes != null && !ArrayUtils.contains(activityTypes, as.getActivityType())) { continue; } final RunningTaskInfo info = new RunningTaskInfo(); final RunningTaskInfo info = new RunningTaskInfo(); as.fillTaskInfo(info); as.fillTaskInfo(info); out.add(info); out.add(info); Loading @@ -417,6 +423,40 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub } } } } @Override public List<RunningTaskInfo> getRootTasks(int displayId, @Nullable int[] activityTypes) { enforceStackPermission("getRootTasks()"); final long ident = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { final DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(displayId); if (dc == null) { throw new IllegalArgumentException("Display " + displayId + " doesn't exist"); } ArrayList<RunningTaskInfo> out = new ArrayList<>(); for (int i = dc.getStackCount() - 1; i >= 0; --i) { final ActivityStack task = dc.getStackAt(i); if (task.getTile() != null) { // a tile is supposed to look like a parent, so don't include their // "children" here. They can be accessed via getChildTasks() continue; } if (activityTypes != null && !ArrayUtils.contains(activityTypes, task.getActivityType())) { continue; } final RunningTaskInfo info = new RunningTaskInfo(); task.fillTaskInfo(info); out.add(info); } return out; } } finally { Binder.restoreCallingIdentity(ident); } } private int sanitizeAndApplyChange(WindowContainer container, private int sanitizeAndApplyChange(WindowContainer container, WindowContainerTransaction.Change change) { WindowContainerTransaction.Change change) { if (!(container instanceof Task)) { if (!(container instanceof Task)) { Loading services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java +17 −2 Original line number Original line Diff line number Diff line Loading @@ -393,11 +393,19 @@ public class TaskOrganizerTests extends WindowTestsBase { RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); final int initialRootTaskCount = mWm.mAtmService.mTaskOrganizerController.getRootTasks( mDisplayContent.mDisplayId, null /* activityTypes */).size(); final ActivityStack stack = createTaskStackOnDisplay( final ActivityStack stack = createTaskStackOnDisplay( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent); WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent); final ActivityStack stack2 = createTaskStackOnDisplay( final ActivityStack stack2 = createTaskStackOnDisplay( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, mDisplayContent); WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, mDisplayContent); // Check getRootTasks works List<RunningTaskInfo> roots = mWm.mAtmService.mTaskOrganizerController.getRootTasks( mDisplayContent.mDisplayId, null /* activityTypes */); assertEquals(initialRootTaskCount + 2, roots.size()); lastReportedTiles.clear(); lastReportedTiles.clear(); WindowContainerTransaction wct = new WindowContainerTransaction(); WindowContainerTransaction wct = new WindowContainerTransaction(); wct.reparent(stack.mRemoteToken, info1.token, true /* onTop */); wct.reparent(stack.mRemoteToken, info1.token, true /* onTop */); Loading @@ -424,11 +432,18 @@ public class TaskOrganizerTests extends WindowTestsBase { // Check the getChildren call // Check the getChildren call List<RunningTaskInfo> children = List<RunningTaskInfo> children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info1.token); mWm.mAtmService.mTaskOrganizerController.getChildTasks(info1.token, null /* activityTypes */); assertEquals(2, children.size()); assertEquals(2, children.size()); children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info2.token); children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info2.token, null /* activityTypes */); assertEquals(0, children.size()); assertEquals(0, children.size()); // Check that getRootTasks doesn't include children of tiles roots = mWm.mAtmService.mTaskOrganizerController.getRootTasks(mDisplayContent.mDisplayId, null /* activityTypes */); assertEquals(initialRootTaskCount, roots.size()); lastReportedTiles.clear(); lastReportedTiles.clear(); wct = new WindowContainerTransaction(); wct = new WindowContainerTransaction(); wct.reorder(stack2.mRemoteToken, true /* onTop */); wct.reorder(stack2.mRemoteToken, true /* onTop */); Loading Loading
core/java/android/app/ITaskOrganizerController.aidl +5 −1 Original line number Original line Diff line number Diff line Loading @@ -52,7 +52,11 @@ interface ITaskOrganizerController { boolean deleteRootTask(IWindowContainer task); boolean deleteRootTask(IWindowContainer task); /** Gets direct child tasks (ordered from top-to-bottom) */ /** Gets direct child tasks (ordered from top-to-bottom) */ List<ActivityManager.RunningTaskInfo> getChildTasks(in IWindowContainer parent); List<ActivityManager.RunningTaskInfo> getChildTasks(in IWindowContainer parent, in int[] activityTypes); /** Gets all root tasks on a display (ordered from top-to-bottom) */ List<ActivityManager.RunningTaskInfo> getRootTasks(int displayId, in int[] activityTypes); /** Get the root task which contains the current ime target */ /** Get the root task which contains the current ime target */ IWindowContainer getImeTarget(int display); IWindowContainer getImeTarget(int display); Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +2 −0 Original line number Original line Diff line number Diff line Loading @@ -2795,6 +2795,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } } } // TODO(148895075): deprecate and replace with task equivalents @Override @Override public List<ActivityManager.StackInfo> getAllStackInfos() { public List<ActivityManager.StackInfo> getAllStackInfos() { enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); Loading @@ -2821,6 +2822,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } } } } // TODO(148895075): deprecate and replace with task equivalents @Override @Override public List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId) { public List<ActivityManager.StackInfo> getAllStackInfosOnDisplay(int displayId) { enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); enforceCallerIsRecentsOrHasPermission(MANAGE_ACTIVITY_STACKS, "getAllStackInfos()"); Loading
services/core/java/com/android/server/wm/TaskOrganizerController.java +41 −1 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,7 @@ import android.view.IWindowContainer; import android.view.SurfaceControl; import android.view.SurfaceControl; import android.view.WindowContainerTransaction; import android.view.WindowContainerTransaction; import com.android.internal.util.ArrayUtils; import com.android.internal.util.function.pooled.PooledConsumer; import com.android.internal.util.function.pooled.PooledConsumer; import com.android.internal.util.function.pooled.PooledLambda; import com.android.internal.util.function.pooled.PooledLambda; Loading Loading @@ -379,7 +380,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub } } @Override @Override public List<RunningTaskInfo> getChildTasks(IWindowContainer parent) { public List<RunningTaskInfo> getChildTasks(IWindowContainer parent, @Nullable int[] activityTypes) { enforceStackPermission("getChildTasks()"); enforceStackPermission("getChildTasks()"); final long ident = Binder.clearCallingIdentity(); final long ident = Binder.clearCallingIdentity(); try { try { Loading @@ -405,6 +407,10 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub for (int i = dc.getStackCount() - 1; i >= 0; --i) { for (int i = dc.getStackCount() - 1; i >= 0; --i) { final ActivityStack as = dc.getStackAt(i); final ActivityStack as = dc.getStackAt(i); if (as.getTile() == container) { if (as.getTile() == container) { if (activityTypes != null && !ArrayUtils.contains(activityTypes, as.getActivityType())) { continue; } final RunningTaskInfo info = new RunningTaskInfo(); final RunningTaskInfo info = new RunningTaskInfo(); as.fillTaskInfo(info); as.fillTaskInfo(info); out.add(info); out.add(info); Loading @@ -417,6 +423,40 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub } } } } @Override public List<RunningTaskInfo> getRootTasks(int displayId, @Nullable int[] activityTypes) { enforceStackPermission("getRootTasks()"); final long ident = Binder.clearCallingIdentity(); try { synchronized (mGlobalLock) { final DisplayContent dc = mService.mRootWindowContainer.getDisplayContent(displayId); if (dc == null) { throw new IllegalArgumentException("Display " + displayId + " doesn't exist"); } ArrayList<RunningTaskInfo> out = new ArrayList<>(); for (int i = dc.getStackCount() - 1; i >= 0; --i) { final ActivityStack task = dc.getStackAt(i); if (task.getTile() != null) { // a tile is supposed to look like a parent, so don't include their // "children" here. They can be accessed via getChildTasks() continue; } if (activityTypes != null && !ArrayUtils.contains(activityTypes, task.getActivityType())) { continue; } final RunningTaskInfo info = new RunningTaskInfo(); task.fillTaskInfo(info); out.add(info); } return out; } } finally { Binder.restoreCallingIdentity(ident); } } private int sanitizeAndApplyChange(WindowContainer container, private int sanitizeAndApplyChange(WindowContainer container, WindowContainerTransaction.Change change) { WindowContainerTransaction.Change change) { if (!(container instanceof Task)) { if (!(container instanceof Task)) { Loading
services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java +17 −2 Original line number Original line Diff line number Diff line Loading @@ -393,11 +393,19 @@ public class TaskOrganizerTests extends WindowTestsBase { RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( RunningTaskInfo info2 = mWm.mAtmService.mTaskOrganizerController.createRootTask( mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); mDisplayContent.mDisplayId, WINDOWING_MODE_SPLIT_SCREEN_SECONDARY); final int initialRootTaskCount = mWm.mAtmService.mTaskOrganizerController.getRootTasks( mDisplayContent.mDisplayId, null /* activityTypes */).size(); final ActivityStack stack = createTaskStackOnDisplay( final ActivityStack stack = createTaskStackOnDisplay( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent); WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_STANDARD, mDisplayContent); final ActivityStack stack2 = createTaskStackOnDisplay( final ActivityStack stack2 = createTaskStackOnDisplay( WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, mDisplayContent); WINDOWING_MODE_UNDEFINED, ACTIVITY_TYPE_HOME, mDisplayContent); // Check getRootTasks works List<RunningTaskInfo> roots = mWm.mAtmService.mTaskOrganizerController.getRootTasks( mDisplayContent.mDisplayId, null /* activityTypes */); assertEquals(initialRootTaskCount + 2, roots.size()); lastReportedTiles.clear(); lastReportedTiles.clear(); WindowContainerTransaction wct = new WindowContainerTransaction(); WindowContainerTransaction wct = new WindowContainerTransaction(); wct.reparent(stack.mRemoteToken, info1.token, true /* onTop */); wct.reparent(stack.mRemoteToken, info1.token, true /* onTop */); Loading @@ -424,11 +432,18 @@ public class TaskOrganizerTests extends WindowTestsBase { // Check the getChildren call // Check the getChildren call List<RunningTaskInfo> children = List<RunningTaskInfo> children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info1.token); mWm.mAtmService.mTaskOrganizerController.getChildTasks(info1.token, null /* activityTypes */); assertEquals(2, children.size()); assertEquals(2, children.size()); children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info2.token); children = mWm.mAtmService.mTaskOrganizerController.getChildTasks(info2.token, null /* activityTypes */); assertEquals(0, children.size()); assertEquals(0, children.size()); // Check that getRootTasks doesn't include children of tiles roots = mWm.mAtmService.mTaskOrganizerController.getRootTasks(mDisplayContent.mDisplayId, null /* activityTypes */); assertEquals(initialRootTaskCount, roots.size()); lastReportedTiles.clear(); lastReportedTiles.clear(); wct = new WindowContainerTransaction(); wct = new WindowContainerTransaction(); wct.reorder(stack2.mRemoteToken, true /* onTop */); wct.reorder(stack2.mRemoteToken, true /* onTop */); Loading