Loading cmds/am/src/com/android/commands/am/Am.java +4 −5 Original line number Diff line number Diff line Loading @@ -1694,11 +1694,10 @@ public class Am extends BaseCommand { Intent intent = makeIntent(UserHandle.USER_CURRENT); try { IBinder homeActivityToken = mAm.getHomeActivityToken(); IActivityContainer container = mAm.createVirtualActivityContainer(homeActivityToken, null); container.attachToDisplay(displayId); IActivityContainer container = mAm.createStackOnDisplay(displayId); if (container != null) { container.startActivity(intent); } } catch (RemoteException e) { } } Loading core/java/android/app/ActivityManagerNative.java +33 −0 Original line number Diff line number Diff line Loading @@ -2202,6 +2202,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case CREATE_STACK_ON_DISPLAY: { data.enforceInterface(IActivityManager.descriptor); int displayId = data.readInt(); IActivityContainer activityContainer = createStackOnDisplay(displayId); reply.writeNoException(); if (activityContainer != null) { reply.writeInt(1); reply.writeStrongBinder(activityContainer.asBinder()); } else { reply.writeInt(0); } return true; } case GET_ACTIVITY_CONTAINER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder activityToken = data.readStrongBinder(); Loading Loading @@ -5231,6 +5245,25 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(displayId); mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0); reply.readException(); final int result = reply.readInt(); final IActivityContainer res; if (result == 1) { res = IActivityContainer.Stub.asInterface(reply.readStrongBinder()); } else { res = null; } data.recycle(); reply.recycle(); return res; } public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Parcel data = Parcel.obtain(); Loading core/java/android/app/IActivityManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -436,6 +436,8 @@ public interface IActivityManager extends IInterface { public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken, IActivityContainerCallback callback) throws RemoteException; public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException; public void deleteActivityContainer(IActivityContainer container) throws RemoteException; public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) Loading Loading @@ -797,4 +799,5 @@ public interface IActivityManager extends IInterface { // Start of M transactions int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+280; int CREATE_STACK_ON_DISPLAY = IBinder.FIRST_CALL_TRANSACTION+281; } services/core/java/com/android/server/am/ActivityManagerService.java +14 −0 Original line number Diff line number Diff line Loading @@ -8113,6 +8113,20 @@ public final class ActivityManagerService extends ActivityManagerNative } } @Override public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException { enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS, "createStackOnDisplay()"); synchronized (this) { final int stackId = mStackSupervisor.getNextStackId(); final ActivityStack stack = mStackSupervisor.createStackOnDisplay(stackId, displayId); if (stack == null) { return null; } return stack.mActivityContainer; } } @Override public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Loading services/core/java/com/android/server/am/ActivityStackSupervisor.java +6 −7 Original line number Diff line number Diff line Loading @@ -1569,10 +1569,9 @@ public final class ActivityStackSupervisor implements DisplayListener { } // Need to create an app stack for this user. int stackId = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); mFocusedStack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r + " stackId=" + stackId); mFocusedStack = getStack(stackId); " stackId=" + mFocusedStack.mStackId); return mFocusedStack; } return mHomeStack; Loading Loading @@ -2592,16 +2591,16 @@ public final class ActivityStackSupervisor implements DisplayListener { } } private int createStackOnDisplay(int stackId, int displayId) { ActivityStack createStackOnDisplay(int stackId, int displayId) { ActivityDisplay activityDisplay = mActivityDisplays.get(displayId); if (activityDisplay == null) { return -1; return null; } ActivityContainer activityContainer = new ActivityContainer(stackId); mActivityContainers.put(stackId, activityContainer); activityContainer.attachToDisplayLocked(activityDisplay); return stackId; return activityContainer.mStack; } int getNextStackId() { Loading Loading @@ -2638,7 +2637,7 @@ public final class ActivityStackSupervisor implements DisplayListener { // We couldn't find a stack to restore the task to. Possible if are restoring recents // before an application stack is created...Go ahead and create one on the default // display. stack = getStack(createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY)); stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); // Restore home stack to top. moveHomeStack(true); if (DEBUG_RECENTS) Loading Loading
cmds/am/src/com/android/commands/am/Am.java +4 −5 Original line number Diff line number Diff line Loading @@ -1694,11 +1694,10 @@ public class Am extends BaseCommand { Intent intent = makeIntent(UserHandle.USER_CURRENT); try { IBinder homeActivityToken = mAm.getHomeActivityToken(); IActivityContainer container = mAm.createVirtualActivityContainer(homeActivityToken, null); container.attachToDisplay(displayId); IActivityContainer container = mAm.createStackOnDisplay(displayId); if (container != null) { container.startActivity(intent); } } catch (RemoteException e) { } } Loading
core/java/android/app/ActivityManagerNative.java +33 −0 Original line number Diff line number Diff line Loading @@ -2202,6 +2202,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM return true; } case CREATE_STACK_ON_DISPLAY: { data.enforceInterface(IActivityManager.descriptor); int displayId = data.readInt(); IActivityContainer activityContainer = createStackOnDisplay(displayId); reply.writeNoException(); if (activityContainer != null) { reply.writeInt(1); reply.writeStrongBinder(activityContainer.asBinder()); } else { reply.writeInt(0); } return true; } case GET_ACTIVITY_CONTAINER_TRANSACTION: { data.enforceInterface(IActivityManager.descriptor); IBinder activityToken = data.readStrongBinder(); Loading Loading @@ -5231,6 +5245,25 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IActivityManager.descriptor); data.writeInt(displayId); mRemote.transact(CREATE_STACK_ON_DISPLAY, data, reply, 0); reply.readException(); final int result = reply.readInt(); final IActivityContainer res; if (result == 1) { res = IActivityContainer.Stub.asInterface(reply.readStrongBinder()); } else { res = null; } data.recycle(); reply.recycle(); return res; } public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Parcel data = Parcel.obtain(); Loading
core/java/android/app/IActivityManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -436,6 +436,8 @@ public interface IActivityManager extends IInterface { public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken, IActivityContainerCallback callback) throws RemoteException; public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException; public void deleteActivityContainer(IActivityContainer container) throws RemoteException; public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) Loading Loading @@ -797,4 +799,5 @@ public interface IActivityManager extends IInterface { // Start of M transactions int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+280; int CREATE_STACK_ON_DISPLAY = IBinder.FIRST_CALL_TRANSACTION+281; }
services/core/java/com/android/server/am/ActivityManagerService.java +14 −0 Original line number Diff line number Diff line Loading @@ -8113,6 +8113,20 @@ public final class ActivityManagerService extends ActivityManagerNative } } @Override public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException { enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS, "createStackOnDisplay()"); synchronized (this) { final int stackId = mStackSupervisor.getNextStackId(); final ActivityStack stack = mStackSupervisor.createStackOnDisplay(stackId, displayId); if (stack == null) { return null; } return stack.mActivityContainer; } } @Override public IActivityContainer getEnclosingActivityContainer(IBinder activityToken) throws RemoteException { Loading
services/core/java/com/android/server/am/ActivityStackSupervisor.java +6 −7 Original line number Diff line number Diff line Loading @@ -1569,10 +1569,9 @@ public final class ActivityStackSupervisor implements DisplayListener { } // Need to create an app stack for this user. int stackId = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); mFocusedStack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r + " stackId=" + stackId); mFocusedStack = getStack(stackId); " stackId=" + mFocusedStack.mStackId); return mFocusedStack; } return mHomeStack; Loading Loading @@ -2592,16 +2591,16 @@ public final class ActivityStackSupervisor implements DisplayListener { } } private int createStackOnDisplay(int stackId, int displayId) { ActivityStack createStackOnDisplay(int stackId, int displayId) { ActivityDisplay activityDisplay = mActivityDisplays.get(displayId); if (activityDisplay == null) { return -1; return null; } ActivityContainer activityContainer = new ActivityContainer(stackId); mActivityContainers.put(stackId, activityContainer); activityContainer.attachToDisplayLocked(activityDisplay); return stackId; return activityContainer.mStack; } int getNextStackId() { Loading Loading @@ -2638,7 +2637,7 @@ public final class ActivityStackSupervisor implements DisplayListener { // We couldn't find a stack to restore the task to. Possible if are restoring recents // before an application stack is created...Go ahead and create one on the default // display. stack = getStack(createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY)); stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY); // Restore home stack to top. moveHomeStack(true); if (DEBUG_RECENTS) Loading