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

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

Merge "Update connected display config on settings load."

parents 5a1e015b b5910b4f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -748,6 +748,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
            mWindowManager.setSupportsPictureInPicture(mSupportsPictureInPicture);
            mWindowManager.setSupportsFreeformWindowManagement(mSupportsFreeformWindowManagement);
            mWindowManager.setIsPc(isPc);
            mWindowManager.mRoot.onSettingsRetrieved();
            // This happens before any activities are started, so we can change global configuration
            // in-place.
            updateConfigurationLocked(configuration, null, true);
+18 −0
Original line number Diff line number Diff line
@@ -352,6 +352,24 @@ class DisplayWindowSettings {
        dc.mDisplayScalingDisabled = entry.mForcedScalingMode == FORCE_SCALING_MODE_DISABLED;
    }

    /**
     * Updates settings for the given display after system features are loaded into window manager
     * service, e.g. if this device is PC and if this device supports freeform.
     *
     * @param dc the given display.
     * @return {@code true} if any settings for this display has changed; {@code false} if nothing
     * changed.
     */
    boolean updateSettingsForDisplay(DisplayContent dc) {
        if (dc.getWindowingMode() != getWindowingModeLocked(dc)) {
            // For the time being the only thing that may change is windowing mode, so just update
            // that.
            dc.setWindowingMode(getWindowingModeLocked(dc));
            return true;
        }
        return false;
    }

    private void readSettings() {
        FileInputStream stream;
        try {
+28 −0
Original line number Diff line number Diff line
@@ -245,6 +245,34 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
        return dc;
    }

    /**
     * Called when DisplayWindowSettings values may change.
     */
    void onSettingsRetrieved() {
        final int numDisplays = mChildren.size();
        for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
            final DisplayContent displayContent = mChildren.get(displayNdx);
            final boolean changed = mWmService.mDisplayWindowSettings.updateSettingsForDisplay(
                    displayContent);
            if (!changed) {
                continue;
            }

            displayContent.initializeDisplayOverrideConfiguration();
            mWmService.reconfigureDisplayLocked(displayContent);

            // We need to update global configuration as well if config of default display has
            // changed. Do it inline because ATMS#retrieveSettings() will soon update the
            // configuration inline, which will overwrite the new windowing mode.
            if (displayContent.isDefaultDisplay) {
                final Configuration newConfig = mWmService.computeNewConfiguration(
                        displayContent.getDisplayId());
                mWmService.mAtmService.updateConfigurationLocked(newConfig, null /* starting */,
                        false /* initLocale */);
            }
        }
    }

    boolean isLayoutNeeded() {
        final int numDisplays = mChildren.size();
        for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
+13 −0
Original line number Diff line number Diff line
@@ -147,6 +147,19 @@ public class DisplayWindowSettingsTests extends WindowTestsBase {
                mPrimaryDisplay.getWindowingMode());
    }

    @Test
    public void testPrimaryDisplayUpdateToFreeform_HasFreeformSupport_IsPc() {
        mTarget.applySettingsToDisplayLocked(mPrimaryDisplay);

        mWm.setSupportsFreeformWindowManagement(true);
        mWm.setIsPc(true);

        mTarget.updateSettingsForDisplay(mPrimaryDisplay);

        assertEquals(WindowConfiguration.WINDOWING_MODE_FREEFORM,
                mPrimaryDisplay.getWindowingMode());
    }

    @Test
    public void testSecondaryDisplayDefaultToFullscreen_NoFreeformSupport() {
        mTarget.applySettingsToDisplayLocked(mSecondaryDisplay);
+18 −0
Original line number Diff line number Diff line
@@ -20,9 +20,11 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import android.app.WindowConfiguration;
import android.platform.test.annotations.Presubmit;

import androidx.test.filters.SmallTest;
@@ -71,5 +73,21 @@ public class RootWindowContainerTests extends WindowTestsBase {
        assertFalse(app.isVisible());
        assertFalse(mWm.mRoot.isAnyNonToastWindowVisibleForUid(FAKE_CALLING_UID));
    }

    @Test
    public void testUpdateDefaultDisplayWindowingModeOnSettingsRetrieved() {
        synchronized (mWm.mGlobalLock) {
            assertEquals(WindowConfiguration.WINDOWING_MODE_FULLSCREEN,
                    mWm.getDefaultDisplayContentLocked().getWindowingMode());

            mWm.mIsPc = true;
            mWm.mSupportsFreeformWindowManagement = true;

            mWm.mRoot.onSettingsRetrieved();

            assertEquals(WindowConfiguration.WINDOWING_MODE_FREEFORM,
                    mWm.getDefaultDisplayContentLocked().getWindowingMode());
        }
    }
}