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

Commit fe71582e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Introduce a way to turn a fullscreen window into freeform"

parents 37a0a259 d967af82
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -3783,14 +3783,14 @@ public class Activity extends ContextThemeWrapper


    /**
     * Moves the activity from {@link WindowConfiguration#WINDOWING_MODE_FREEFORM} windowing mode to
     * {@link WindowConfiguration#WINDOWING_MODE_FULLSCREEN}.
     * Moves the activity between {@link WindowConfiguration#WINDOWING_MODE_FREEFORM} windowing mode
     * and {@link WindowConfiguration#WINDOWING_MODE_FULLSCREEN}.
     *
     * @hide
     */
    @Override
    public void exitFreeformMode() throws RemoteException {
        ActivityTaskManager.getService().exitFreeformMode(mToken);
    public void toggleFreeformWindowingMode() throws RemoteException {
        ActivityTaskManager.getService().toggleFreeformWindowingMode(mToken);
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -215,7 +215,7 @@ interface IActivityTaskManager {
    void registerTaskStackListener(in ITaskStackListener listener);
    void unregisterTaskStackListener(in ITaskStackListener listener);
    void setTaskResizeable(int taskId, int resizeableMode);
    void exitFreeformMode(in IBinder token);
    void toggleFreeformWindowingMode(in IBinder token);
    void resizeTask(int taskId, in Rect bounds, int resizeMode);
    void moveStackToDisplay(int stackId, int displayId);
    void removeStack(int stackId);
+3 −4
Original line number Diff line number Diff line
@@ -622,11 +622,10 @@ public abstract class Window {
    /** @hide */
    public interface WindowControllerCallback {
        /**
         * Moves the activity from
         * Moves the activity from {@link WindowConfiguration#WINDOWING_MODE_FREEFORM} windowing
         * mode to {@link WindowConfiguration#WINDOWING_MODE_FULLSCREEN}.
         * Moves the activity between {@link WindowConfiguration#WINDOWING_MODE_FREEFORM} windowing
         * mode and {@link WindowConfiguration#WINDOWING_MODE_FULLSCREEN}.
         */
        void exitFreeformMode() throws RemoteException;
        void toggleFreeformWindowingMode() throws RemoteException;

        /**
         * Puts the activity in picture-in-picture mode if the activity supports.
+4 −4
Original line number Diff line number Diff line
@@ -329,13 +329,13 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener,
    }

    /**
     * Maximize the window by moving it to the maximized workspace stack.
     * Maximize or restore the window by moving it to the maximized or freeform workspace stack.
     **/
    private void maximizeWindow() {
    private void toggleFreeformWindowingMode() {
        Window.WindowControllerCallback callback = mOwner.getWindowControllerCallback();
        if (callback != null) {
            try {
                callback.exitFreeformMode();
                callback.toggleFreeformWindowingMode();
            } catch (RemoteException ex) {
                Log.e(TAG, "Cannot change task workspace.");
            }
@@ -395,7 +395,7 @@ public class DecorCaptionView extends ViewGroup implements View.OnTouchListener,
    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        if (mClickTarget == mMaximize) {
            maximizeWindow();
            toggleFreeformWindowingMode();
        } else if (mClickTarget == mClose) {
            mOwner.dispatchOnWindowDismissed(
                    true /*finishTask*/, false /*suppressWindowTransition*/);
+17 −6
Original line number Diff line number Diff line
@@ -3202,23 +3202,34 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
    }

    @Override
    public void exitFreeformMode(IBinder token) {
    public void toggleFreeformWindowingMode(IBinder token) {
        synchronized (mGlobalLock) {
            long ident = Binder.clearCallingIdentity();
            try {
                final ActivityRecord r = ActivityRecord.forTokenLocked(token);
                if (r == null) {
                    throw new IllegalArgumentException(
                            "exitFreeformMode: No activity record matching token=" + token);
                            "toggleFreeformWindowingMode: No activity record matching token="
                                    + token);
                }

                final ActivityStack stack = r.getActivityStack();
                if (stack == null || !stack.inFreeformWindowingMode()) {
                    throw new IllegalStateException(
                            "exitFreeformMode: You can only go fullscreen from freeform.");
                if (stack == null) {
                    throw new IllegalStateException("toggleFreeformWindowingMode: the activity "
                            + "doesn't have a stack");
                }

                if (!stack.inFreeformWindowingMode()
                        && stack.getWindowingMode() != WINDOWING_MODE_FULLSCREEN) {
                    throw new IllegalStateException("toggleFreeformWindowingMode: You can only "
                            + "toggle between fullscreen and freeform.");
                }

                if (stack.inFreeformWindowingMode()) {
                    stack.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
                } else {
                    stack.setWindowingMode(WINDOWING_MODE_FREEFORM);
                }
            } finally {
                Binder.restoreCallingIdentity(ident);
            }