Loading core/java/android/app/ActivityManager.java +4 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.Singleton; import android.util.Size; import android.view.IWindowContainer; import com.android.internal.app.LocalePicker; import com.android.internal.app.procstats.ProcessStats; Loading Loading @@ -2526,6 +2527,7 @@ public class ActivityManager { // Index of the stack in the display's stack list, can be used for comparison of stack order @UnsupportedAppUsage public int position; public IWindowContainer stackToken; /** * The full configuration the stack is currently running in. * @hide Loading Loading @@ -2559,6 +2561,7 @@ public class ActivityManager { dest.writeInt(userId); dest.writeInt(visible ? 1 : 0); dest.writeInt(position); dest.writeStrongInterface(stackToken); if (topActivity != null) { dest.writeInt(1); topActivity.writeToParcel(dest, 0); Loading Loading @@ -2590,6 +2593,7 @@ public class ActivityManager { userId = source.readInt(); visible = source.readInt() > 0; position = source.readInt(); stackToken = IWindowContainer.Stub.asInterface(source.readStrongBinder()); if (source.readInt() > 0) { topActivity = ComponentName.readFromParcel(source); } Loading services/core/java/com/android/server/wm/ActivityStack.java +1 −0 Original line number Diff line number Diff line Loading @@ -539,6 +539,7 @@ class ActivityStack extends WindowContainer<Task> implements BoundsAnimationTarg mRootActivityContainer = mService.mRootActivityContainer; mHandler = new ActivityStackHandler(supervisor.mLooper); mWindowManager = mService.mWindowManager; mRemoteToken = new RemoteToken(this); mCurrentUser = mService.mAmInternal.getCurrentUserId(); // Set display id before setting activity and window type to make sure it won't affect // stacks on a wrong display. Loading services/core/java/com/android/server/wm/ActivityTaskManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -3243,7 +3243,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private void sanitizeAndApplyConfigChange(ConfigurationContainer container, WindowContainerTransaction.Change change) { if (!(container instanceof Task)) { if (!(container instanceof Task || container instanceof ActivityStack)) { throw new RuntimeException("Invalid token in task transaction"); } // The "client"-facing API should prevent bad changes; however, just in case, sanitize Loading services/core/java/com/android/server/wm/RootActivityContainer.java +1 −0 Original line number Diff line number Diff line Loading @@ -1250,6 +1250,7 @@ class RootActivityContainer extends ConfigurationContainer stack.getBounds(info.bounds); info.displayId = displayId; info.stackId = stack.mStackId; info.stackToken = stack.mRemoteToken; info.userId = stack.mCurrentUser; info.visible = stack.shouldBeVisible(null); // A stack might be not attached to a display. Loading services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java +17 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; Loading @@ -24,6 +25,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import android.app.Activity; import android.app.ActivityManager; import android.graphics.Rect; import android.view.WindowContainerTransaction; Loading Loading @@ -76,5 +78,20 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { mService.applyContainerTransaction(t); assertEquals(newBounds, task.getBounds()); } @Test public void testStackTransaction() { removeGlobalMinSizeRestriction(); final ActivityStack stack = new StackBuilder(mRootActivityContainer) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); ActivityManager.StackInfo info = mService.getStackInfo(WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD); WindowContainerTransaction t = new WindowContainerTransaction(); assertEquals(stack.mRemoteToken, info.stackToken); Rect newBounds = new Rect(10, 10, 100, 100); t.setBounds(info.stackToken, new Rect(10, 10, 100, 100)); mService.applyContainerTransaction(t); assertEquals(newBounds, stack.getBounds()); } } Loading
core/java/android/app/ActivityManager.java +4 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.Singleton; import android.util.Size; import android.view.IWindowContainer; import com.android.internal.app.LocalePicker; import com.android.internal.app.procstats.ProcessStats; Loading Loading @@ -2526,6 +2527,7 @@ public class ActivityManager { // Index of the stack in the display's stack list, can be used for comparison of stack order @UnsupportedAppUsage public int position; public IWindowContainer stackToken; /** * The full configuration the stack is currently running in. * @hide Loading Loading @@ -2559,6 +2561,7 @@ public class ActivityManager { dest.writeInt(userId); dest.writeInt(visible ? 1 : 0); dest.writeInt(position); dest.writeStrongInterface(stackToken); if (topActivity != null) { dest.writeInt(1); topActivity.writeToParcel(dest, 0); Loading Loading @@ -2590,6 +2593,7 @@ public class ActivityManager { userId = source.readInt(); visible = source.readInt() > 0; position = source.readInt(); stackToken = IWindowContainer.Stub.asInterface(source.readStrongBinder()); if (source.readInt() > 0) { topActivity = ComponentName.readFromParcel(source); } Loading
services/core/java/com/android/server/wm/ActivityStack.java +1 −0 Original line number Diff line number Diff line Loading @@ -539,6 +539,7 @@ class ActivityStack extends WindowContainer<Task> implements BoundsAnimationTarg mRootActivityContainer = mService.mRootActivityContainer; mHandler = new ActivityStackHandler(supervisor.mLooper); mWindowManager = mService.mWindowManager; mRemoteToken = new RemoteToken(this); mCurrentUser = mService.mAmInternal.getCurrentUserId(); // Set display id before setting activity and window type to make sure it won't affect // stacks on a wrong display. Loading
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +1 −1 Original line number Diff line number Diff line Loading @@ -3243,7 +3243,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { private void sanitizeAndApplyConfigChange(ConfigurationContainer container, WindowContainerTransaction.Change change) { if (!(container instanceof Task)) { if (!(container instanceof Task || container instanceof ActivityStack)) { throw new RuntimeException("Invalid token in task transaction"); } // The "client"-facing API should prevent bad changes; however, just in case, sanitize Loading
services/core/java/com/android/server/wm/RootActivityContainer.java +1 −0 Original line number Diff line number Diff line Loading @@ -1250,6 +1250,7 @@ class RootActivityContainer extends ConfigurationContainer stack.getBounds(info.bounds); info.displayId = displayId; info.stackId = stack.mStackId; info.stackToken = stack.mRemoteToken; info.userId = stack.mCurrentUser; info.visible = stack.shouldBeVisible(null); // A stack might be not attached to a display. Loading
services/tests/wmtests/src/com/android/server/wm/ActivityTaskManagerServiceTests.java +17 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.wm; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; Loading @@ -24,6 +25,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import android.app.Activity; import android.app.ActivityManager; import android.graphics.Rect; import android.view.WindowContainerTransaction; Loading Loading @@ -76,5 +78,20 @@ public class ActivityTaskManagerServiceTests extends ActivityTestsBase { mService.applyContainerTransaction(t); assertEquals(newBounds, task.getBounds()); } @Test public void testStackTransaction() { removeGlobalMinSizeRestriction(); final ActivityStack stack = new StackBuilder(mRootActivityContainer) .setWindowingMode(WINDOWING_MODE_FREEFORM).build(); ActivityManager.StackInfo info = mService.getStackInfo(WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD); WindowContainerTransaction t = new WindowContainerTransaction(); assertEquals(stack.mRemoteToken, info.stackToken); Rect newBounds = new Rect(10, 10, 100, 100); t.setBounds(info.stackToken, new Rect(10, 10, 100, 100)); mService.applyContainerTransaction(t); assertEquals(newBounds, stack.getBounds()); } }