Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1f183d0 authored by Todd Kennedy's avatar Todd Kennedy Committed by Android (Google) Code Review
Browse files

Merge "Expose new binder call createStackOnDisplay()"

parents 5b0d4881 4900bf9d
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -1694,11 +1694,10 @@ public class Am extends BaseCommand {
        Intent intent = makeIntent(UserHandle.USER_CURRENT);
        Intent intent = makeIntent(UserHandle.USER_CURRENT);


        try {
        try {
            IBinder homeActivityToken = mAm.getHomeActivityToken();
            IActivityContainer container = mAm.createStackOnDisplay(displayId);
            IActivityContainer container =
            if (container != null) {
                    mAm.createVirtualActivityContainer(homeActivityToken, null);
            container.attachToDisplay(displayId);
                container.startActivity(intent);
                container.startActivity(intent);
            }
        } catch (RemoteException e) {
        } catch (RemoteException e) {
        }
        }
    }
    }
+33 −0
Original line number Original line Diff line number Diff line
@@ -2202,6 +2202,20 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            return true;
            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: {
        case GET_ACTIVITY_CONTAINER_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            data.enforceInterface(IActivityManager.descriptor);
            IBinder activityToken = data.readStrongBinder();
            IBinder activityToken = data.readStrongBinder();
@@ -5231,6 +5245,25 @@ class ActivityManagerProxy implements IActivityManager
        reply.recycle();
        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)
    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
            throws RemoteException {
            throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel data = Parcel.obtain();
+3 −0
Original line number Original line Diff line number Diff line
@@ -436,6 +436,8 @@ public interface IActivityManager extends IInterface {
    public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
    public IActivityContainer createVirtualActivityContainer(IBinder parentActivityToken,
            IActivityContainerCallback callback) throws RemoteException;
            IActivityContainerCallback callback) throws RemoteException;


    public IActivityContainer createStackOnDisplay(int displayId) throws RemoteException;

    public void deleteActivityContainer(IActivityContainer container) throws RemoteException;
    public void deleteActivityContainer(IActivityContainer container) throws RemoteException;


    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
@@ -797,4 +799,5 @@ public interface IActivityManager extends IInterface {


    // Start of M transactions
    // Start of M transactions
    int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+280;
    int NOTIFY_CLEARTEXT_NETWORK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+280;
    int CREATE_STACK_ON_DISPLAY = IBinder.FIRST_CALL_TRANSACTION+281;
}
}
+14 −0
Original line number Original line Diff line number Diff line
@@ -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
    @Override
    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
    public IActivityContainer getEnclosingActivityContainer(IBinder activityToken)
            throws RemoteException {
            throws RemoteException {
+6 −7
Original line number Original line Diff line number Diff line
@@ -1569,10 +1569,9 @@ public final class ActivityStackSupervisor implements DisplayListener {
            }
            }


            // Need to create an app stack for this user.
            // 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 +
            if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG, "adjustStackFocus: New stack r=" + r +
                    " stackId=" + stackId);
                    " stackId=" + mFocusedStack.mStackId);
            mFocusedStack = getStack(stackId);
            return mFocusedStack;
            return mFocusedStack;
        }
        }
        return mHomeStack;
        return mHomeStack;
@@ -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);
        ActivityDisplay activityDisplay = mActivityDisplays.get(displayId);
        if (activityDisplay == null) {
        if (activityDisplay == null) {
            return -1;
            return null;
        }
        }


        ActivityContainer activityContainer = new ActivityContainer(stackId);
        ActivityContainer activityContainer = new ActivityContainer(stackId);
        mActivityContainers.put(stackId, activityContainer);
        mActivityContainers.put(stackId, activityContainer);
        activityContainer.attachToDisplayLocked(activityDisplay);
        activityContainer.attachToDisplayLocked(activityDisplay);
        return stackId;
        return activityContainer.mStack;
    }
    }


    int getNextStackId() {
    int getNextStackId() {
@@ -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
            // 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
            // before an application stack is created...Go ahead and create one on the default
            // display.
            // display.
            stack = getStack(createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY));
            stack = createStackOnDisplay(getNextStackId(), Display.DEFAULT_DISPLAY);
            // Restore home stack to top.
            // Restore home stack to top.
            moveHomeStack(true);
            moveHomeStack(true);
            if (DEBUG_RECENTS)
            if (DEBUG_RECENTS)