Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDisplayLayoutState.java +1 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 -> { Loading Loading @@ -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; } Loading services/core/java/com/android/server/wm/ActivityRecord.java +21 −13 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); Loading services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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())); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/pip/PipDisplayLayoutState.java +1 −0 Original line number Diff line number Diff line Loading @@ -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); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/pip2/phone/PipScheduler.java +3 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 -> { Loading Loading @@ -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; } Loading
services/core/java/com/android/server/wm/ActivityRecord.java +21 −13 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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); Loading
services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +26 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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())); Loading