Loading services/core/java/com/android/server/wm/WindowManagerService.java +4 −4 Original line number Diff line number Diff line Loading @@ -4405,12 +4405,12 @@ public class WindowManagerService extends IWindowManager.Stub if (mMaxUiWidth > 0) { mRoot.forAllDisplays(displayContent -> displayContent.setMaxUiWidth(mMaxUiWidth)); } final boolean changed = applyForcedPropertiesForDefaultDisplay(); applyForcedPropertiesForDefaultDisplay(); mAnimator.ready(); mDisplayReady = true; if (changed) { reconfigureDisplayLocked(getDefaultDisplayContentLocked()); } // Reconfigure all displays to make sure that forced properties and // DisplayWindowSettings are applied. mRoot.forAllDisplays(this::reconfigureDisplayLocked); mIsTouchDevice = mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TOUCHSCREEN); } Loading services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java +31 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static android.view.WindowManager.REMOVE_CONTENT_MODE_MOVE_TO_PRIMARY; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeastOnce; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; Loading @@ -41,6 +42,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Matchers.eq; import android.app.WindowConfiguration; import android.content.res.Configuration; import android.platform.test.annotations.Presubmit; import android.util.Xml; import android.view.Display; Loading Loading @@ -606,6 +608,35 @@ public class DisplayWindowSettingsTests extends WindowTestsBase { } } @Test public void testDisplayWindowSettingsAppliedOnDisplayReady() { // Set forced densities for two displays in DisplayWindowSettings final DisplayContent dc = createMockSimulatedDisplay(); final DisplayWindowSettings settings = new DisplayWindowSettings(mWm, mStorage); settings.setForcedDensity(mPrimaryDisplay, 123, 0 /* userId */); settings.setForcedDensity(dc, 456, 0 /* userId */); // Apply settings to displays - the settings will be stored, but config will not be // recalculated immediately. settings.applySettingsToDisplayLocked(mPrimaryDisplay); settings.applySettingsToDisplayLocked(dc); assertFalse(mPrimaryDisplay.mWaitingForConfig); assertFalse(dc.mWaitingForConfig); // Notify WM that the displays are ready and check that they are reconfigured. spyOn(mWm); mWm.displayReady(); waitUntilHandlersIdle(); verify(mWm, atLeastOnce()).reconfigureDisplayLocked(eq(mPrimaryDisplay)); verify(mWm, atLeastOnce()).reconfigureDisplayLocked(eq(dc)); final Configuration config = new Configuration(); mPrimaryDisplay.computeScreenConfiguration(config); assertEquals(123, config.densityDpi); dc.computeScreenConfiguration(config); assertEquals(456, config.densityDpi); } /** * Prepares display settings and stores in {@link #mStorage}. Uses provided display identifier * and stores windowingMode=WINDOWING_MODE_PINNED. Loading Loading
services/core/java/com/android/server/wm/WindowManagerService.java +4 −4 Original line number Diff line number Diff line Loading @@ -4405,12 +4405,12 @@ public class WindowManagerService extends IWindowManager.Stub if (mMaxUiWidth > 0) { mRoot.forAllDisplays(displayContent -> displayContent.setMaxUiWidth(mMaxUiWidth)); } final boolean changed = applyForcedPropertiesForDefaultDisplay(); applyForcedPropertiesForDefaultDisplay(); mAnimator.ready(); mDisplayReady = true; if (changed) { reconfigureDisplayLocked(getDefaultDisplayContentLocked()); } // Reconfigure all displays to make sure that forced properties and // DisplayWindowSettings are applied. mRoot.forAllDisplays(this::reconfigureDisplayLocked); mIsTouchDevice = mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TOUCHSCREEN); } Loading
services/tests/wmtests/src/com/android/server/wm/DisplayWindowSettingsTests.java +31 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static android.view.WindowManager.REMOVE_CONTENT_MODE_MOVE_TO_PRIMARY; import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation; import static com.android.dx.mockito.inline.extended.ExtendedMockito.atLeastOnce; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; Loading @@ -41,6 +42,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Matchers.eq; import android.app.WindowConfiguration; import android.content.res.Configuration; import android.platform.test.annotations.Presubmit; import android.util.Xml; import android.view.Display; Loading Loading @@ -606,6 +608,35 @@ public class DisplayWindowSettingsTests extends WindowTestsBase { } } @Test public void testDisplayWindowSettingsAppliedOnDisplayReady() { // Set forced densities for two displays in DisplayWindowSettings final DisplayContent dc = createMockSimulatedDisplay(); final DisplayWindowSettings settings = new DisplayWindowSettings(mWm, mStorage); settings.setForcedDensity(mPrimaryDisplay, 123, 0 /* userId */); settings.setForcedDensity(dc, 456, 0 /* userId */); // Apply settings to displays - the settings will be stored, but config will not be // recalculated immediately. settings.applySettingsToDisplayLocked(mPrimaryDisplay); settings.applySettingsToDisplayLocked(dc); assertFalse(mPrimaryDisplay.mWaitingForConfig); assertFalse(dc.mWaitingForConfig); // Notify WM that the displays are ready and check that they are reconfigured. spyOn(mWm); mWm.displayReady(); waitUntilHandlersIdle(); verify(mWm, atLeastOnce()).reconfigureDisplayLocked(eq(mPrimaryDisplay)); verify(mWm, atLeastOnce()).reconfigureDisplayLocked(eq(dc)); final Configuration config = new Configuration(); mPrimaryDisplay.computeScreenConfiguration(config); assertEquals(123, config.densityDpi); dc.computeScreenConfiguration(config); assertEquals(456, config.densityDpi); } /** * Prepares display settings and stores in {@link #mStorage}. Uses provided display identifier * and stores windowingMode=WINDOWING_MODE_PINNED. Loading