Loading services/core/java/com/android/server/wm/DisplayContent.java +4 −1 Original line number Diff line number Diff line Loading @@ -2781,7 +2781,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (displayMetricsChanged || physicalDisplayChanged) { if (physicalDisplayChanged) { // Reapply the window settings as the underlying physical display has changed. mWmService.mDisplayWindowSettings.applySettingsToDisplayLocked(this); // Do not include rotation settings here, postpone them until the display // metrics are updated as rotation settings might depend on them mWmService.mDisplayWindowSettings.applySettingsToDisplayLocked(this, /* includeRotationSettings */ false); } // If there is an override set for base values - use it, otherwise use new values. Loading services/core/java/com/android/server/wm/DisplayWindowSettings.java +6 −0 Original line number Diff line number Diff line Loading @@ -244,6 +244,10 @@ class DisplayWindowSettings { } void applySettingsToDisplayLocked(DisplayContent dc) { applySettingsToDisplayLocked(dc, /* includeRotationSettings */ true); } void applySettingsToDisplayLocked(DisplayContent dc, boolean includeRotationSettings) { final DisplayInfo displayInfo = dc.getDisplayInfo(); final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo); Loading Loading @@ -282,6 +286,8 @@ class DisplayWindowSettings { boolean dontMoveToTop = settings.mDontMoveToTop != null ? settings.mDontMoveToTop : false; dc.mDontMoveToTop = dontMoveToTop; if (includeRotationSettings) applyRotationSettingsToDisplayLocked(dc); } void applyRotationSettingsToDisplayLocked(DisplayContent dc) { Loading services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java +16 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import androidx.test.filters.SmallTest; import com.android.server.LocalServices; import com.android.server.policy.WindowManagerPolicy; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; import org.junit.Before; import org.junit.Test; Loading Loading @@ -447,6 +448,21 @@ public class DisplayWindowSettingsTests extends WindowTestsBase { assertEquals(456, config.densityDpi); } @Test public void testDisplayRotationSettingsAppliedOnCreation() { // Create new displays with different rotation settings final SettingsEntry settingsEntry1 = new SettingsEntry(); settingsEntry1.mIgnoreOrientationRequest = false; final DisplayContent dcDontIgnoreOrientation = createMockSimulatedDisplay(settingsEntry1); final SettingsEntry settingsEntry2 = new SettingsEntry(); settingsEntry2.mIgnoreOrientationRequest = true; final DisplayContent dcIgnoreOrientation = createMockSimulatedDisplay(settingsEntry2); // Verify that newly created displays are created with correct rotation settings assertFalse(dcDontIgnoreOrientation.getIgnoreOrientationRequest()); assertTrue(dcIgnoreOrientation.getIgnoreOrientationRequest()); } public final class TestSettingsProvider implements DisplayWindowSettings.SettingsProvider { Map<DisplayInfo, SettingsEntry> mOverrideSettingsCache = new HashMap<>(); Loading services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +13 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.ArgumentMatchers.any; import android.annotation.Nullable; import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.Rect; Loading @@ -38,6 +39,8 @@ import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayInfo; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; class TestDisplayContent extends DisplayContent { public static final int DEFAULT_LOGICAL_DISPLAY_DENSITY = 300; Loading Loading @@ -81,6 +84,7 @@ class TestDisplayContent extends DisplayContent { protected final ActivityTaskManagerService mService; private boolean mSystemDecorations = false; private int mStatusBarHeight = 0; private SettingsEntry mOverrideSettings; Builder(ActivityTaskManagerService service, int width, int height) { mService = service; Loading @@ -104,6 +108,10 @@ class TestDisplayContent extends DisplayContent { private String generateUniqueId() { return "TEST_DISPLAY_CONTENT_" + System.currentTimeMillis(); } Builder setOverrideSettings(@Nullable SettingsEntry overrideSettings) { mOverrideSettings = overrideSettings; return this; } Builder setSystemDecorations(boolean yes) { mSystemDecorations = yes; return this; Loading Loading @@ -151,6 +159,11 @@ class TestDisplayContent extends DisplayContent { TestDisplayContent build() { SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock); if (mOverrideSettings != null) { mService.mWindowManager.mDisplayWindowSettingsProvider .updateOverrideSettings(mInfo, mOverrideSettings); } final int displayId = SystemServicesTestRule.sNextDisplayId++; final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, mInfo, DEFAULT_DISPLAY_ADJUSTMENTS); Loading services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +14 −6 Original line number Diff line number Diff line Loading @@ -106,6 +106,7 @@ import android.window.TransitionRequestInfo; import com.android.internal.policy.AttributeCache; import com.android.internal.util.ArrayUtils; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; import org.junit.After; import org.junit.Before; Loading Loading @@ -720,18 +721,21 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplayWithImeSupport(@DisplayImePolicy int imePolicy) { return createNewDisplay(mDisplayInfo, imePolicy); return createNewDisplay(mDisplayInfo, imePolicy, /* overrideSettings */ null); } /** Creates a {@link DisplayContent} that supports IME and adds it to the system. */ DisplayContent createNewDisplay(DisplayInfo info) { return createNewDisplay(info, DISPLAY_IME_POLICY_LOCAL); return createNewDisplay(info, DISPLAY_IME_POLICY_LOCAL, /* overrideSettings */ null); } /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy) { private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy, @Nullable SettingsEntry overrideSettings) { final DisplayContent display = new TestDisplayContent.Builder(mAtm, info).build(); new TestDisplayContent.Builder(mAtm, info) .setOverrideSettings(overrideSettings) .build(); final DisplayContent dc = display.mDisplayContent; // this display can show IME. dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy); Loading @@ -749,7 +753,7 @@ class WindowTestsBase extends SystemServiceTestsBase { DisplayInfo displayInfo = new DisplayInfo(); displayInfo.copyFrom(mDisplayInfo); displayInfo.state = displayState; return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_LOCAL); return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_LOCAL, /* overrideSettings */ null); } /** Creates a {@link TestWindowState} */ Loading @@ -761,11 +765,15 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} as parts of simulate display info for test. */ DisplayContent createMockSimulatedDisplay() { return createMockSimulatedDisplay(/* overrideSettings */ null); } DisplayContent createMockSimulatedDisplay(@Nullable SettingsEntry overrideSettings) { DisplayInfo displayInfo = new DisplayInfo(); displayInfo.copyFrom(mDisplayInfo); displayInfo.type = Display.TYPE_VIRTUAL; displayInfo.ownerUid = SYSTEM_UID; return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY); return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY, overrideSettings); } IDisplayWindowInsetsController createDisplayWindowInsetsController() { Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +4 −1 Original line number Diff line number Diff line Loading @@ -2781,7 +2781,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp if (displayMetricsChanged || physicalDisplayChanged) { if (physicalDisplayChanged) { // Reapply the window settings as the underlying physical display has changed. mWmService.mDisplayWindowSettings.applySettingsToDisplayLocked(this); // Do not include rotation settings here, postpone them until the display // metrics are updated as rotation settings might depend on them mWmService.mDisplayWindowSettings.applySettingsToDisplayLocked(this, /* includeRotationSettings */ false); } // If there is an override set for base values - use it, otherwise use new values. Loading
services/core/java/com/android/server/wm/DisplayWindowSettings.java +6 −0 Original line number Diff line number Diff line Loading @@ -244,6 +244,10 @@ class DisplayWindowSettings { } void applySettingsToDisplayLocked(DisplayContent dc) { applySettingsToDisplayLocked(dc, /* includeRotationSettings */ true); } void applySettingsToDisplayLocked(DisplayContent dc, boolean includeRotationSettings) { final DisplayInfo displayInfo = dc.getDisplayInfo(); final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo); Loading Loading @@ -282,6 +286,8 @@ class DisplayWindowSettings { boolean dontMoveToTop = settings.mDontMoveToTop != null ? settings.mDontMoveToTop : false; dc.mDontMoveToTop = dontMoveToTop; if (includeRotationSettings) applyRotationSettingsToDisplayLocked(dc); } void applyRotationSettingsToDisplayLocked(DisplayContent dc) { Loading
services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java +16 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import androidx.test.filters.SmallTest; import com.android.server.LocalServices; import com.android.server.policy.WindowManagerPolicy; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; import org.junit.Before; import org.junit.Test; Loading Loading @@ -447,6 +448,21 @@ public class DisplayWindowSettingsTests extends WindowTestsBase { assertEquals(456, config.densityDpi); } @Test public void testDisplayRotationSettingsAppliedOnCreation() { // Create new displays with different rotation settings final SettingsEntry settingsEntry1 = new SettingsEntry(); settingsEntry1.mIgnoreOrientationRequest = false; final DisplayContent dcDontIgnoreOrientation = createMockSimulatedDisplay(settingsEntry1); final SettingsEntry settingsEntry2 = new SettingsEntry(); settingsEntry2.mIgnoreOrientationRequest = true; final DisplayContent dcIgnoreOrientation = createMockSimulatedDisplay(settingsEntry2); // Verify that newly created displays are created with correct rotation settings assertFalse(dcDontIgnoreOrientation.getIgnoreOrientationRequest()); assertTrue(dcIgnoreOrientation.getIgnoreOrientationRequest()); } public final class TestSettingsProvider implements DisplayWindowSettings.SettingsProvider { Map<DisplayInfo, SettingsEntry> mOverrideSettingsCache = new HashMap<>(); Loading
services/tests/wmtests/src/com/android/server/wm/TestDisplayContent.java +13 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.ArgumentMatchers.any; import android.annotation.Nullable; import android.content.res.Configuration; import android.graphics.Insets; import android.graphics.Rect; Loading @@ -38,6 +39,8 @@ import android.view.Display; import android.view.DisplayCutout; import android.view.DisplayInfo; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; class TestDisplayContent extends DisplayContent { public static final int DEFAULT_LOGICAL_DISPLAY_DENSITY = 300; Loading Loading @@ -81,6 +84,7 @@ class TestDisplayContent extends DisplayContent { protected final ActivityTaskManagerService mService; private boolean mSystemDecorations = false; private int mStatusBarHeight = 0; private SettingsEntry mOverrideSettings; Builder(ActivityTaskManagerService service, int width, int height) { mService = service; Loading @@ -104,6 +108,10 @@ class TestDisplayContent extends DisplayContent { private String generateUniqueId() { return "TEST_DISPLAY_CONTENT_" + System.currentTimeMillis(); } Builder setOverrideSettings(@Nullable SettingsEntry overrideSettings) { mOverrideSettings = overrideSettings; return this; } Builder setSystemDecorations(boolean yes) { mSystemDecorations = yes; return this; Loading Loading @@ -151,6 +159,11 @@ class TestDisplayContent extends DisplayContent { TestDisplayContent build() { SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock); if (mOverrideSettings != null) { mService.mWindowManager.mDisplayWindowSettingsProvider .updateOverrideSettings(mInfo, mOverrideSettings); } final int displayId = SystemServicesTestRule.sNextDisplayId++; final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId, mInfo, DEFAULT_DISPLAY_ADJUSTMENTS); Loading
services/tests/wmtests/src/com/android/server/wm/WindowTestsBase.java +14 −6 Original line number Diff line number Diff line Loading @@ -106,6 +106,7 @@ import android.window.TransitionRequestInfo; import com.android.internal.policy.AttributeCache; import com.android.internal.util.ArrayUtils; import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry; import org.junit.After; import org.junit.Before; Loading Loading @@ -720,18 +721,21 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplayWithImeSupport(@DisplayImePolicy int imePolicy) { return createNewDisplay(mDisplayInfo, imePolicy); return createNewDisplay(mDisplayInfo, imePolicy, /* overrideSettings */ null); } /** Creates a {@link DisplayContent} that supports IME and adds it to the system. */ DisplayContent createNewDisplay(DisplayInfo info) { return createNewDisplay(info, DISPLAY_IME_POLICY_LOCAL); return createNewDisplay(info, DISPLAY_IME_POLICY_LOCAL, /* overrideSettings */ null); } /** Creates a {@link DisplayContent} and adds it to the system. */ private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy) { private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy, @Nullable SettingsEntry overrideSettings) { final DisplayContent display = new TestDisplayContent.Builder(mAtm, info).build(); new TestDisplayContent.Builder(mAtm, info) .setOverrideSettings(overrideSettings) .build(); final DisplayContent dc = display.mDisplayContent; // this display can show IME. dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy); Loading @@ -749,7 +753,7 @@ class WindowTestsBase extends SystemServiceTestsBase { DisplayInfo displayInfo = new DisplayInfo(); displayInfo.copyFrom(mDisplayInfo); displayInfo.state = displayState; return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_LOCAL); return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_LOCAL, /* overrideSettings */ null); } /** Creates a {@link TestWindowState} */ Loading @@ -761,11 +765,15 @@ class WindowTestsBase extends SystemServiceTestsBase { /** Creates a {@link DisplayContent} as parts of simulate display info for test. */ DisplayContent createMockSimulatedDisplay() { return createMockSimulatedDisplay(/* overrideSettings */ null); } DisplayContent createMockSimulatedDisplay(@Nullable SettingsEntry overrideSettings) { DisplayInfo displayInfo = new DisplayInfo(); displayInfo.copyFrom(mDisplayInfo); displayInfo.type = Display.TYPE_VIRTUAL; displayInfo.ownerUid = SYSTEM_UID; return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY); return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY, overrideSettings); } IDisplayWindowInsetsController createDisplayWindowInsetsController() { Loading