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

Commit 1d7b03da authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Reconfigure displays on ready to apply DisplayWindowSettings"

parents bd0b206e 046807f0
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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);
        }
+31 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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.