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

Commit 3832fd33 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Retain previous configs if current and new windowing modes are pinned." into main

parents 9ba49c33 f324936f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -210,6 +210,7 @@ public class PipDisplayLayoutState {
        pw.println(prefix + TAG);
        pw.println(innerPrefix + "mDisplayId=" + mDisplayId);
        pw.println(innerPrefix + "getDisplayBounds=" + getDisplayBounds());
        pw.println(innerPrefix + "getDisplayLayout#densityDpi=" + getDisplayLayout().densityDpi());
        pw.println(innerPrefix + "mScreenEdgeInsets=" + mScreenEdgeInsets);
        pw.println(innerPrefix + "mNavigationBarsInsets=" + mNavigationBarsInsets);
    }
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import android.app.PictureInPictureParams;
import android.app.TaskInfo;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Rect;
import android.os.Bundle;
import android.os.SystemProperties;
@@ -132,6 +133,7 @@ public class PipScheduler implements PipTransitionState.PipTransitionStateChange
        // final expanded bounds to be inherited from the parent
        wct.setBounds(pipTaskToken, null);
        wct.setWindowingMode(pipTaskToken, mPipDesktopState.getOutPipWindowingMode());
        wct.setDensityDpi(pipTaskToken, Configuration.DENSITY_DPI_UNDEFINED);

        final TaskInfo pipTaskInfo = mPipTransitionState.getPipTaskInfo();
        mDesktopPipTransitionController.ifPresent(c -> {
@@ -162,7 +164,7 @@ public class PipScheduler implements PipTransitionState.PipTransitionStateChange
        }

        wct.reparent(pipToken, displayAreaInfo.token, true);
        wct.setDensityDpi(pipToken, displayAreaInfo.configuration.densityDpi);
        wct.setDensityDpi(pipToken, Configuration.DENSITY_DPI_UNDEFINED);
        return wct;
    }

+21 −13
Original line number Diff line number Diff line
@@ -7604,9 +7604,11 @@ final class ActivityRecord extends WindowToken {
            requestedOverrideConfig.assetsSeq = ASSETS_SEQ_UNDEFINED;
        }

        // Retain the following configs for PiP so that the activity doesn't get destroyed and
        // recreated on display transfer.
        if (ENABLE_DRAGGING_PIP_ACROSS_DISPLAYS.isTrue() && inPinnedWindowingMode()) {
            // Retain the following configs for PiP so that the activity doesn't get destroyed and
            // recreated on display transfer while still remaining in PiP.
            if (newParentConfiguration.windowConfiguration.getWindowingMode()
                    == WINDOWING_MODE_PINNED) {
                final Configuration lastReportedMergedConfig =
                        mLastReportedConfiguration.getMergedConfiguration();
                int configChanges = info.getRealConfigChanged();
@@ -7619,6 +7621,12 @@ final class ActivityRecord extends WindowToken {
                if ((configChanges & ActivityInfo.CONFIG_DENSITY) == 0) {
                    requestedOverrideConfig.densityDpi = lastReportedMergedConfig.densityDpi;
                }
            } else {
                // Update the configs if we're exiting PiP mode.
                requestedOverrideConfig.colorMode = newParentConfiguration.colorMode;
                requestedOverrideConfig.touchscreen = newParentConfiguration.touchscreen;
                requestedOverrideConfig.densityDpi = newParentConfiguration.densityDpi;
            }
        }

        super.resolveOverrideConfiguration(newParentConfiguration);
+26 −0
Original line number Diff line number Diff line
@@ -3617,6 +3617,7 @@ public class ActivityRecordTests extends WindowTestsBase {
        activity.setLastReportedConfiguration(new Configuration(), config);

        final Configuration newConfig = new Configuration();
        newConfig.windowConfiguration.setWindowingMode(WINDOWING_MODE_PINNED);
        newConfig.touchscreen = TOUCHSCREEN_NOTOUCH;
        newConfig.densityDpi = 200;
        newConfig.colorMode = COLOR_MODE_WIDE_COLOR_GAMUT_YES;
@@ -3640,6 +3641,7 @@ public class ActivityRecordTests extends WindowTestsBase {
        activity.info.configChanges = CONFIG_TOUCHSCREEN | CONFIG_DENSITY | CONFIG_COLOR_MODE;

        final Configuration newConfig = new Configuration();
        newConfig.windowConfiguration.setWindowingMode(WINDOWING_MODE_PINNED);
        newConfig.touchscreen = TOUCHSCREEN_NOTOUCH;
        newConfig.densityDpi = 200;
        newConfig.colorMode = COLOR_MODE_WIDE_COLOR_GAMUT_YES;
@@ -3673,6 +3675,30 @@ public class ActivityRecordTests extends WindowTestsBase {
        assertNotEquals(activity.getRequestedOverrideConfiguration().colorMode, config.colorMode);
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_DRAGGING_PIP_ACROSS_DISPLAYS)
    public void resolveOverrideConfiguration_inPinnedMode_newConfigFullscreen_updatesConfigs() {
        final ActivityRecord activity = createActivityWithTask();
        activity.setWindowingMode(WINDOWING_MODE_PINNED);
        final Configuration config = new Configuration();
        config.touchscreen = TOUCHSCREEN_FINGER;
        config.densityDpi = 100;
        config.colorMode = COLOR_MODE_WIDE_COLOR_GAMUT_NO;
        activity.setLastReportedConfiguration(new Configuration(), config);

        final Configuration newConfig = new Configuration();
        newConfig.windowConfiguration.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
        newConfig.touchscreen = TOUCHSCREEN_NOTOUCH;
        newConfig.densityDpi = 200;
        newConfig.colorMode = COLOR_MODE_WIDE_COLOR_GAMUT_YES;
        activity.resolveOverrideConfiguration(newConfig);

        assertEquals(activity.getRequestedOverrideConfiguration().touchscreen,
                newConfig.touchscreen);
        assertEquals(activity.getRequestedOverrideConfiguration().densityDpi, newConfig.densityDpi);
        assertEquals(activity.getRequestedOverrideConfiguration().colorMode, newConfig.colorMode);
    }

    private ActivityRecord setupDisplayAndActivityForCameraCompat(boolean isCameraRunning,
            int windowingMode) {
        doReturn(true).when(() -> DesktopModeHelper.canEnterDesktopMode(any()));