diff options
4 files changed, 20 insertions, 8 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 94b4e7f54ff0..63b6825dca34 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -2798,7 +2798,8 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM case MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); final int stackId = data.readInt(); - moveTasksToFullscreenStack(stackId); + final boolean onTop = data.readInt() == 1; + moveTasksToFullscreenStack(stackId, onTop); reply.writeNoException(); return true; } @@ -6581,11 +6582,12 @@ class ActivityManagerProxy implements IActivityManager } @Override - public void moveTasksToFullscreenStack(int fromStackId) throws RemoteException { + public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(fromStackId); + data.writeInt(onTop ? 1 : 0); mRemote.transact(MOVE_TASKS_TO_FULLSCREEN_STACK_TRANSACTION, data, reply, 0); reply.readException(); data.recycle(); diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 10885f2c134f..5bb2cf5014d4 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -577,7 +577,7 @@ public interface IActivityManager extends IInterface { public void suppressResizeConfigChanges(boolean suppress) throws RemoteException; - public void moveTasksToFullscreenStack(int fromStackId) throws RemoteException; + public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) throws RemoteException; public int getAppStartMode(int uid, String packageName) throws RemoteException; diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java index 2791dfc3972e..67bb58ae8fc9 100644 --- a/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/stackdivider/WindowManagerProxy.java @@ -85,7 +85,8 @@ public class WindowManagerProxy { @Override public void run() { try { - ActivityManagerNative.getDefault().moveTasksToFullscreenStack(DOCKED_STACK_ID); + ActivityManagerNative.getDefault().moveTasksToFullscreenStack( + DOCKED_STACK_ID, false /* onTop */); } catch (RemoteException e) { Log.w(TAG, "Failed to remove stack: " + e); } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index ca38b7132f11..0f4b68e7be4a 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -18166,7 +18166,7 @@ public final class ActivityManagerService extends ActivityManagerNative } @Override - public void moveTasksToFullscreenStack(int fromStackId) { + public void moveTasksToFullscreenStack(int fromStackId, boolean onTop) { enforceCallingPermission(MANAGE_ACTIVITY_STACKS, "moveTasksToFullscreenStack()"); if (fromStackId == HOME_STACK_ID) { throw new IllegalArgumentException("You can't move tasks from the home stack."); @@ -18176,9 +18176,18 @@ public final class ActivityManagerService extends ActivityManagerNative final ActivityStack stack = mStackSupervisor.getStack(fromStackId); if (stack != null) { final ArrayList<TaskRecord> tasks = stack.getAllTasks(); - for (int i = tasks.size() - 1; i >= 0; i--) { - mStackSupervisor.positionTaskInStackLocked(tasks.get(i).taskId, - FULLSCREEN_WORKSPACE_STACK_ID, 0); + final int size = tasks.size(); + if (onTop) { + for (int i = 0; i < size; i++) { + mStackSupervisor.moveTaskToStackLocked(tasks.get(i).taskId, + FULLSCREEN_WORKSPACE_STACK_ID, ON_TOP, !FORCE_FOCUS, + "moveTasksToFullscreenStack", ANIMATE); + } + } else { + for (int i = size - 1; i >= 0; i--) { + mStackSupervisor.positionTaskInStackLocked(tasks.get(i).taskId, + FULLSCREEN_WORKSPACE_STACK_ID, 0); + } } } Binder.restoreCallingIdentity(origId); |