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

Commit fb7fd8ed authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Separate fillsParent from deciding orientation

This keep the behavior of commit a930e1ee to avoid orientation
from being affected by the change of mOccludesParent.

But the animation style can still refer to the runtime change of
translucent, e.g. AppTransitionController#findAnimLayoutParamsToken.

Bug: 234328568
Test: ActivityRecordTests#testShouldStartWhenMakeClientActive
Change-Id: If9019dfa6e4a69cd34607f24dfe2d06994fd6f10
parent 0dfb582d
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -670,9 +670,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
     * from the style of activity. Because we don't want {@link WindowContainer#getOrientation()}
     * to be affected by the temporal state of {@link ActivityClientController#convertToTranslucent}
     * when running ANIM_SCENE_TRANSITION.
     * @see WindowContainer#fillsParent()
     * @see WindowContainer#providesOrientation()
     */
    private final boolean mFillsParent;
    private final boolean mStyleFillsParent;

    // The input dispatching timeout for this application token in milliseconds.
    long mInputDispatchingTimeoutMillis = DEFAULT_DISPATCHING_TIMEOUT_MILLIS;
@@ -1971,10 +1971,10 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
                    // This style is propagated to the main window attributes with
                    // FLAG_SHOW_WALLPAPER from PhoneWindow#generateLayout.
                    || ent.array.getBoolean(R.styleable.Window_windowShowWallpaper, false);
            mFillsParent = mOccludesParent;
            mStyleFillsParent = mOccludesParent;
            noDisplay = ent.array.getBoolean(R.styleable.Window_windowNoDisplay, false);
        } else {
            mFillsParent = mOccludesParent = true;
            mStyleFillsParent = mOccludesParent = true;
            noDisplay = false;
        }

@@ -2879,9 +2879,14 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
        return (TaskDisplayArea) super.getDisplayArea();
    }

    @Override
    boolean providesOrientation() {
        return mStyleFillsParent;
    }

    @Override
    boolean fillsParent() {
        return mFillsParent;
        return occludesParent(true /* includingFinishing */);
    }

    /** Returns true if this activity is not finishing, is opaque and fills the entire space of
+1 −1
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ class PinnedTaskController {
     */
    void deferOrientationChangeForEnteringPipFromFullScreenIfNeeded() {
        final ActivityRecord topFullscreen = mDisplayContent.getActivity(
                a -> a.fillsParent() && !a.getTask().inMultiWindowMode());
                a -> a.providesOrientation() && !a.getTask().inMultiWindowMode());
        if (topFullscreen == null || topFullscreen.hasFixedRotationTransform()) {
            return;
        }
+7 −4
Original line number Diff line number Diff line
@@ -1495,8 +1495,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
     */
    int getOrientation(int candidate) {
        mLastOrientationSource = null;
        if (!fillsParent()) {
            // Ignore containers that don't completely fill their parents.
        if (!providesOrientation()) {
            return SCREEN_ORIENTATION_UNSET;
        }

@@ -1530,8 +1529,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
                continue;
            }

            if (wc.fillsParent() || orientation != SCREEN_ORIENTATION_UNSPECIFIED) {
                // Use the orientation if the container fills its parent or requested an explicit
            if (wc.providesOrientation() || orientation != SCREEN_ORIENTATION_UNSPECIFIED) {
                // Use the orientation if the container can provide or requested an explicit
                // orientation that isn't SCREEN_ORIENTATION_UNSPECIFIED.
                ProtoLog.v(WM_DEBUG_ORIENTATION, "%s is requesting orientation %d (%s)",
                        wc.toString(), orientation,
@@ -1560,6 +1559,10 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        return source;
    }

    boolean providesOrientation() {
        return fillsParent();
    }

    /**
     * Returns true if this container is opaque and fills all the space made available by its parent
     * container.
+2 −2
Original line number Diff line number Diff line
@@ -756,8 +756,8 @@ public class ActivityRecordTests extends WindowTestsBase {
        final ActivityRecord activity = createActivityWithTask();
        ActivityRecord topActivity = new ActivityBuilder(mAtm).setTask(activity.getTask()).build();
        topActivity.setOccludesParent(false);
        // The requested occluding state doesn't affect whether it fills parent.
        assertTrue(topActivity.fillsParent());
        // The requested occluding state doesn't affect whether it can decide orientation.
        assertTrue(topActivity.providesOrientation());
        activity.setState(STOPPED, "Testing");
        activity.setVisibility(true);
        activity.makeActiveIfNeeded(null /* activeActivity */);