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

Commit 59a73ca3 authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Support creating docked stack at top/left/bottom/right half of screen

Change-Id: Id8d6f639ed67baadb856ce84a20af8929e04cb2e
parent 228d4047
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -452,6 +452,22 @@ public class ActivityManager {
     */
     */
    public static final int FIRST_DYNAMIC_STACK_ID = LAST_STATIC_STACK_ID + 1;
    public static final int FIRST_DYNAMIC_STACK_ID = LAST_STATIC_STACK_ID + 1;


    /**
     * Input parameter to {@link android.app.IActivityManager#moveTaskToDockedStack} which
     * specifies the position of the created docked stack at the top half of the screen if
     * in portrait mode or at the left half of the screen if in landscape mode.
     * @hide
     */
    public static final int DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT = 0;

    /**
     * Input parameter to {@link android.app.IActivityManager#moveTaskToDockedStack} which
     * specifies the position of the created docked stack at the bottom half of the screen if
     * in portrait mode or at the right half of the screen if in landscape mode.
     * @hide
     */
    public static final int DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT = 1;

    /** @hide */
    /** @hide */
    public int getFrontActivityScreenCompatMode() {
    public int getFrontActivityScreenCompatMode() {
        try {
        try {
+25 −0
Original line number Original line Diff line number Diff line
@@ -743,6 +743,16 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            return true;
            return true;
        }
        }


        case MOVE_TASK_TO_DOCKED_STACK_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            int taskId = data.readInt();
            int createMode = data.readInt();
            boolean toTop = data.readInt() != 0;
            moveTaskToDockedStack(taskId, createMode, toTop);
            reply.writeNoException();
            return true;
        }

        case RESIZE_STACK_TRANSACTION: {
        case RESIZE_STACK_TRANSACTION: {
            data.enforceInterface(IActivityManager.descriptor);
            data.enforceInterface(IActivityManager.descriptor);
            int stackId = data.readInt();
            int stackId = data.readInt();
@@ -3510,6 +3520,21 @@ class ActivityManagerProxy implements IActivityManager
        reply.recycle();
        reply.recycle();
    }
    }
    @Override
    @Override
    public void moveTaskToDockedStack(int taskId, int createMode, boolean toTop)
            throws RemoteException
    {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeInt(taskId);
        data.writeInt(createMode);
        data.writeInt(toTop ? 1 : 0);
        mRemote.transact(MOVE_TASK_TO_DOCKED_STACK_TRANSACTION, data, reply, 0);
        reply.readException();
        data.recycle();
        reply.recycle();
    }
    @Override
    public void resizeStack(int stackId, Rect r) throws RemoteException
    public void resizeStack(int stackId, Rect r) throws RemoteException
    {
    {
        Parcel data = Parcel.obtain();
        Parcel data = Parcel.obtain();
+3 −0
Original line number Original line Diff line number Diff line
@@ -140,6 +140,8 @@ public interface IActivityManager extends IInterface {
    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) throws RemoteException;
    public boolean moveActivityTaskToBack(IBinder token, boolean nonRoot) throws RemoteException;
    public void moveTaskBackwards(int task) throws RemoteException;
    public void moveTaskBackwards(int task) throws RemoteException;
    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException;
    public void moveTaskToStack(int taskId, int stackId, boolean toTop) throws RemoteException;
    public void moveTaskToDockedStack(int taskId, int createMode, boolean toTop)
            throws RemoteException;
    public void resizeStack(int stackId, Rect bounds) throws RemoteException;
    public void resizeStack(int stackId, Rect bounds) throws RemoteException;
    public void positionTaskInStack(int taskId, int stackId, int position) throws RemoteException;
    public void positionTaskInStack(int taskId, int stackId, int position) throws RemoteException;
    public List<StackInfo> getAllStackInfos() throws RemoteException;
    public List<StackInfo> getAllStackInfos() throws RemoteException;
@@ -888,4 +890,5 @@ public interface IActivityManager extends IInterface {
    int GET_ACTIVITY_STACK_ID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 343;
    int GET_ACTIVITY_STACK_ID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 343;
    int MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344;
    int MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344;
    int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345;
    int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345;
    int MOVE_TASK_TO_DOCKED_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 346;
}
}
+29 −2
Original line number Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package com.android.server.am;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
import static android.Manifest.permission.START_TASKS_FROM_RECENTS;
import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.DOCKED_STACK_ID;
import static android.app.ActivityManager.DOCKED_STACK_ID;
import static android.app.ActivityManager.HOME_STACK_ID;
import static android.app.ActivityManager.HOME_STACK_ID;
import static android.app.ActivityManager.INVALID_STACK_ID;
import static android.app.ActivityManager.INVALID_STACK_ID;
@@ -215,7 +214,6 @@ import android.os.ServiceManager;
import android.os.StrictMode;
import android.os.StrictMode;
import android.os.SystemClock;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.Trace;
import android.os.UpdateLock;
import android.os.UpdateLock;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
@@ -9053,6 +9051,35 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
        }
    }
    }
    /**
     * Moves the input task to the docked stack.
     *
     * @param taskId Id of task to move.
     * @param createMode The mode the docked stack should be created in if it doesn't exist
     *                   already. See
     *                   {@link android.app.ActivityManager#DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT}
     *                   and
     *                   {@link android.app.ActivityManager#DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT}
     * @param toTop If the task and stack should be moved to the top.
     */
    @Override
    public void moveTaskToDockedStack(int taskId, int createMode, boolean toTop) {
        enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
                "moveTaskToDockedStack()");
        synchronized (this) {
            long ident = Binder.clearCallingIdentity();
            try {
                if (DEBUG_STACK) Slog.d(TAG_STACK, "moveTaskToDockedStack: moving task=" + taskId
                        + " to createMode=" + createMode + " toTop=" + toTop);
                mWindowManager.setDockedStackCreateMode(createMode);
                mStackSupervisor.moveTaskToStackLocked(
                        taskId, DOCKED_STACK_ID, toTop, !FORCE_FOCUS);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }
    }
    @Override
    @Override
    public void resizeStack(int stackId, Rect bounds) {
    public void resizeStack(int stackId, Rect bounds) {
        enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
        enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
+7 −3
Original line number Original line Diff line number Diff line
@@ -16,8 +16,9 @@


package com.android.server.wm;
package com.android.server.wm;


import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT;
import static android.app.ActivityManager.DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.FREEFORM_WORKSPACE_STACK_ID;
import static android.app.ActivityManager.DOCKED_STACK_ID;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
import static com.android.server.wm.WindowManagerService.DEBUG_TASK_POSITIONING;
import static com.android.server.wm.WindowManagerService.DEBUG_TASK_POSITIONING;
import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
import static com.android.server.wm.WindowManagerService.SHOW_TRANSACTIONS;
@@ -154,8 +155,11 @@ class TaskPositioner implements DimLayer.DimLayerUser {
                    // event handler for the last finishInputEvent()!
                    // event handler for the last finishInputEvent()!
                    mService.mH.sendEmptyMessage(H.FINISH_TASK_POSITIONING);
                    mService.mH.sendEmptyMessage(H.FINISH_TASK_POSITIONING);
                    if (mCurrentDimSide != CTRL_NONE) {
                    if (mCurrentDimSide != CTRL_NONE) {
                        mService.mActivityManager.moveTaskToStack(
                        final int createMode = mCurrentDimSide == CTRL_LEFT
                                mTaskId, DOCKED_STACK_ID, true /*toTop*/);
                                ? DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT
                                : DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT;
                        mService.mActivityManager.moveTaskToDockedStack(
                                mTaskId, createMode, true /*toTop*/);
                    }
                    }
                }
                }
                handled = true;
                handled = true;
Loading