diff options
| author | 2016-01-15 08:56:11 -0800 | |
|---|---|---|
| committer | 2016-01-15 10:22:38 -0800 | |
| commit | 9101d2664388e234de1a2b3fd9e82fd777c1c407 (patch) | |
| tree | 9c0d5e22e10337373f3604e732c819a86f8c1fd9 | |
| parent | b68d2d5b68dc58fb7b75ce94af74de58a1b9d3f9 (diff) | |
Allow AMS.moveTasksToFullscreenStack moving tasks onTop
Bug: 26573473
Change-Id: I4517ac2b3e803637971c329be2511ba66412d815
4 files changed, 20 insertions, 8 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 624131ee036f..08f37f5bd51b 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; } @@ -6573,11 +6574,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 1ae91a65bba2..25b7841a3b66 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 093a33dc6049..05962457a699 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -18155,7 +18155,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."); @@ -18165,9 +18165,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); |