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

Commit f75962a2 authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

Generate stack override config in AM vs. WM

First step in allowing activity manager to drive the override
configuration of stacks at creation time vs. using what window manager
returns. Also moves us in the direction where callers outside of AM/WM
will eventually be able to drive the window configuration.

Test: bit FrameworksServicesTests:com.android.server.wm.WindowConfigurationTests
Test: adb shell am instrument -w -e package com.android.server.wm com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner
Test: go/wm-smoke
Change-Id: I50bc9e0634779142c173e501d16e7aa1b71f28ce
parent 1d4be040
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -16,6 +16,12 @@

package android.app;

import static android.app.WindowConfiguration.WINDOWING_MODE_DOCKED;
import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;

import android.Manifest;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -852,6 +858,32 @@ public class ActivityManager {
                    || stackId == ASSISTANT_STACK_ID
                    || isDynamicStack(stackId);
        }

        /** Returns the windowing mode that should be used for this input stack id. */
        // TODO: To be removed once we are not using stack id for stuff...
        public static int getWindowingModeForStackId(int stackId) {
            final int windowingMode;
            switch (stackId) {
                case FULLSCREEN_WORKSPACE_STACK_ID:
                case HOME_STACK_ID:
                case RECENTS_STACK_ID:
                case ASSISTANT_STACK_ID:
                    windowingMode = WINDOWING_MODE_FULLSCREEN;
                    break;
                case PINNED_STACK_ID:
                    windowingMode = WINDOWING_MODE_PINNED;
                    break;
                case DOCKED_STACK_ID:
                    windowingMode = WINDOWING_MODE_DOCKED;
                    break;
                case FREEFORM_WORKSPACE_STACK_ID:
                    windowingMode = WINDOWING_MODE_FREEFORM;
                    break;
                default :
                    windowingMode = WINDOWING_MODE_UNDEFINED;
            }
            return windowingMode;
        }
    }

    /**
+0 −5
Original line number Diff line number Diff line
@@ -24,9 +24,6 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.view.DisplayInfo;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * Class that contains windowing configuration/state for other objects that contain windows directly
 * or indirectly. E.g. Activities, Task, Displays, ...
@@ -65,7 +62,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
            WINDOWING_MODE_DOCKED,
            WINDOWING_MODE_FREEFORM,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface WindowingMode {}

    /** Bit that indicates that the {@link #mAppBounds} changed. */
@@ -78,7 +74,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
                    WINDOW_CONFIG_APP_BOUNDS,
                    WINDOW_CONFIG_WINDOWING_MODE,
            })
    @Retention(RetentionPolicy.SOURCE)
    public @interface WindowConfig {}

    public WindowConfiguration() {
+15 −5
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import static android.app.ActivityManager.StackId.HOME_STACK_ID;
import static android.app.ActivityManager.StackId.INVALID_STACK_ID;
import static android.app.ActivityManager.StackId.PINNED_STACK_ID;
import static android.app.ActivityManager.StackId.RECENTS_STACK_ID;
import static android.app.ActivityManager.StackId.getWindowingModeForStackId;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT;
import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING;
import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS;
@@ -460,24 +462,32 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
        mTaskPositioner = mStackId == FREEFORM_WORKSPACE_STACK_ID
                ? new LaunchingTaskPositioner() : null;
        mTmpRect2.setEmpty();
        final Configuration overrideConfig = getOverrideConfiguration();
        updateOverrideConfiguration();
        mWindowContainerController = createStackWindowController(display.mDisplayId, onTop,
                mTmpRect2, overrideConfig);
        onOverrideConfigurationChanged(overrideConfig);
                mTmpRect2, getOverrideConfiguration());
        mStackSupervisor.mStacks.put(mStackId, this);
        postAddToDisplay(display, mTmpRect2.isEmpty() ? null : mTmpRect2, onTop);
    }

    T createStackWindowController(int displayId, boolean onTop, Rect outBounds,
            Configuration outOverrideConfig) {
            Configuration overrideConfig) {
        return (T) new StackWindowController(mStackId, this, displayId, onTop, outBounds,
                outOverrideConfig);
                overrideConfig);
    }

    T getWindowContainerController() {
        return mWindowContainerController;
    }

    // TODO: Not needed once we are no longer using stack ids as the override config. can be passed
    // in.
    private void updateOverrideConfiguration() {
        final int windowingMode = getWindowingModeForStackId(mStackId);
        if (windowingMode != WINDOWING_MODE_UNDEFINED) {
            setWindowingMode(windowingMode);
        }
    }

    /** Adds the stack to specified display and calls WindowManager to do the same. */
    void reparent(ActivityStackSupervisor.ActivityDisplay activityDisplay, boolean onTop) {
        removeFromDisplay();
+2 −2
Original line number Diff line number Diff line
@@ -39,9 +39,9 @@ class PinnedActivityStack extends ActivityStack<PinnedStackWindowController>

    @Override
    PinnedStackWindowController createStackWindowController(int displayId, boolean onTop,
            Rect outBounds, Configuration outOverrideConfig) {
            Rect outBounds, Configuration overrideConfig) {
        return new PinnedStackWindowController(mStackId, this, displayId, onTop, outBounds,
                outOverrideConfig);
                overrideConfig);
    }

    Rect getDefaultPictureInPictureBounds(float aspectRatio) {
+1 −2
Original line number Diff line number Diff line
@@ -120,8 +120,7 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> {
    }

    /** Sets the windowing mode for the configuration container. */
    void setWindowingMode(/*@WindowConfiguration.WindowingMode TODO: causes build error...why?*/
            int windowingMode) {
    public void setWindowingMode(@WindowConfiguration.WindowingMode int windowingMode) {
        mOverrideConfiguration.windowConfiguration.setWindowingMode(windowingMode);
        onOverrideConfigurationChanged(mOverrideConfiguration);
    }
Loading