From 2998eef694f6e3bb348df98a6127890e71427381 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Wed, 2 Dec 2015 19:46:29 -0800 Subject: [PATCH] Set proper stack in WM when activity is moved to stack in AM When an activity is moved to a stack using the ActivityStack#moveActivityToStack API a new task is created to hold the activity in the stack. However, when the new task is created in the window manager side it uses the stack id of the previous stack the activity was in. We now pass the stack to use from activity manager to window manager. Bug: 25987309 Bug: 25961636 Change-Id: Iecc71f6d9b3e70a8d88e134b42f7532ba5327bad --- core/java/android/view/IWindowManager.aidl | 5 ++++- .../core/java/com/android/server/am/ActivityStack.java | 2 +- .../java/com/android/server/wm/WindowManagerService.java | 6 +++--- .../permission/tests/WindowManagerPermissionTests.java | 7 +++---- .../bridge/src/android/view/IWindowManagerImpl.java | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index bd65532979290..7a379d50ba059 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -110,11 +110,14 @@ interface IWindowManager * * @param token The token we are adding to the input task Id. * @param taskId The Id of the task we are adding the token to. + * @param stackId Stack Id to create a new Task with the input task Id on + * if the task doesn't exist yet. * @param taskBounds Bounds to use when creating a new Task with the input task Id if * the task doesn't exist yet. * @param config Configuration that is being used with this task. */ - void setAppTask(IBinder token, int taskId, in Rect taskBounds, in Configuration config); + void setAppTask( + IBinder token, int taskId, int stackId, in Rect taskBounds, in Configuration config); void setAppOrientation(IApplicationToken token, int requestedOrientation); int getAppOrientation(IApplicationToken token); void setFocusedApp(IBinder token, boolean moveFocusNow); diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 02a372a6a08a8..36a7ceea5853c 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -4751,7 +4751,7 @@ final class ActivityStack { final Rect bounds = task.getLaunchBounds(); task.updateOverrideConfiguration(bounds); mWindowManager.setAppTask( - r.appToken, task.taskId, task.getLaunchBounds(), task.mOverrideConfig); + r.appToken, task.taskId, mStackId, task.getLaunchBounds(), task.mOverrideConfig); mWindowManager.setTaskResizeable(task.taskId, task.mResizeable); r.taskConfigOverride = task.mOverrideConfig; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index f153873186c5a..4736c600e08b9 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -3273,7 +3273,8 @@ public class WindowManagerService extends IWindowManager.Stub } @Override - public void setAppTask(IBinder token, int taskId, Rect taskBounds, Configuration config) { + public void setAppTask( + IBinder token, int taskId, int stackId, Rect taskBounds, Configuration config) { if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS, "setAppTask()")) { throw new SecurityException("Requires MANAGE_APP_TOKENS permission"); @@ -3291,8 +3292,7 @@ public class WindowManagerService extends IWindowManager.Stub Task newTask = mTaskIdToTask.get(taskId); if (newTask == null) { newTask = createTaskLocked( - taskId, oldTask.mStack.mStackId, oldTask.mUserId, atoken, taskBounds, - config); + taskId, stackId, oldTask.mUserId, atoken, taskBounds, config); } newTask.addAppToken(Integer.MAX_VALUE /* at top */, atoken); } diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java index a390b0cab321e..3c2659f6ab597 100644 --- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java +++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java @@ -22,11 +22,10 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.test.suitebuilder.annotation.SmallTest; import android.view.IWindowManager; -import android.view.KeyEvent; -import android.view.MotionEvent; - import junit.framework.TestCase; +import static android.app.ActivityManager.StackId.INVALID_STACK_ID; + /** * TODO: Remove this. This is only a placeholder, need to implement this. */ @@ -104,7 +103,7 @@ public class WindowManagerPermissionTests extends TestCase { } try { - mWm.setAppTask(null, 0, null, null); + mWm.setAppTask(null, 0, INVALID_STACK_ID, null, null); fail("IWindowManager.setAppGroupId did not throw SecurityException as" + " expected"); } catch (SecurityException e) { diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java index eea254bb8fcfb..40437fac00925 100644 --- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java +++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java @@ -321,7 +321,7 @@ public class IWindowManagerImpl implements IWindowManager { } @Override - public void setAppTask(IBinder arg0, int arg1, Rect arg2, Configuration arg3) + public void setAppTask(IBinder arg0, int arg1, int arg2, Rect arg3, Configuration arg4) throws RemoteException { // TODO Auto-generated method stub }