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

Commit 73b6e26d authored by wilsonshih's avatar wilsonshih
Browse files

Freezing screen when dismiss pip if orientation is going to change.

When skip pip animation to fullscreen, the stack will move to another
fullscreen stack then resume top activity, if one of activity is not
paused, the remaining resume steps will be skip till all activities
paused. In that case the fullscreen stack will shows up before rotation
animation.
To let the animation smooth, freeze screen once we know the orientation
is going to change when dismiss pip.

Fix: 138820136
Test: atest ActivityLifecyclePipTests
Change-Id: I808b1a797a322ffce039de4bcad316973e732672
parent 3956d960
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -5651,14 +5651,21 @@ class ActivityStack extends ConfigurationContainer {
    void animateResizePinnedStack(Rect sourceHintBounds, Rect toBounds, int animationDuration,
            boolean fromFullscreen) {
        if (!inPinnedWindowingMode()) return;
        if (skipResizeAnimation(toBounds == null /* toFullscreen */)) {
        if (toBounds == null /* toFullscreen */) {
            final Configuration parentConfig = getParent().getConfiguration();
            final ActivityRecord top = topRunningNonOverlayTaskActivity();
            if (top != null && !top.isConfigurationCompatible(parentConfig)) {
                // The final orientation of this activity will change after moving to full screen.
                // Start freezing screen here to prevent showing a temporary full screen window.
                top.startFreezingScreenLocked(top.app, CONFIG_SCREEN_LAYOUT);
                mService.moveTasksToFullscreenStack(mStackId, true /* onTop */);
        } else {
                return;
            }
        }
        if (getTaskStack() == null) return;
        getTaskStack().animateResizePinnedStack(toBounds, sourceHintBounds,
                animationDuration, fromFullscreen);
    }
    }

    /**
     * Get current bounds of this stack, return empty when it is unavailable.
@@ -5673,15 +5680,6 @@ class ActivityStack extends ConfigurationContainer {
        stack.getAnimationOrCurrentBounds(outBounds);
    }

    private boolean skipResizeAnimation(boolean toFullscreen) {
        if (!toFullscreen) {
            return false;
        }
        final Configuration parentConfig = getParent().getConfiguration();
        final ActivityRecord top = topRunningNonOverlayTaskActivity();
        return top != null && !top.isConfigurationCompatible(parentConfig);
    }

    void setPictureInPictureAspectRatio(float aspectRatio) {
        if (getTaskStack() == null) return;
        getTaskStack().setPictureInPictureAspectRatio(aspectRatio);