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

Commit c4371ef0 authored by Gaurav Bhola's avatar Gaurav Bhola
Browse files

Ensure that display settings fallsback to DApolicy

- currently windowing-mode set on default tda is overridden by the
  one coming from the display_settings.xml (after its resolved by
  checking freeform support and falls back to fullscreen)
- with this change it will instead fallback to the one that is
  already set in the defaultTDA which comes from the Policy.

Flag: EXEMPT bugfix
Bug: 348677823
Test: atest DisplayWindowSettingsTests
Test: Tried out by setting a custom DaPolicy
Change-Id: I8c77fbb7ef8b5b84df4b7fda1e3dd3e33234b391
parent ff29ab29
Loading
Loading
Loading
Loading
+20 −8
Original line number Diff line number Diff line
@@ -129,21 +129,33 @@ class DisplayWindowSettings {
    @WindowConfiguration.WindowingMode
    private int getWindowingModeLocked(@NonNull SettingsProvider.SettingsEntry settings,
            @NonNull DisplayContent dc) {
        int windowingMode = settings.mWindowingMode;
        final int windowingModeFromDisplaySettings = settings.mWindowingMode;
        // This display used to be in freeform, but we don't support freeform anymore, so fall
        // back to fullscreen.
        if (windowingMode == WindowConfiguration.WINDOWING_MODE_FREEFORM
        if (windowingModeFromDisplaySettings == WindowConfiguration.WINDOWING_MODE_FREEFORM
                && !mService.mAtmService.mSupportsFreeformWindowManagement) {
            return WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
        }
        if (windowingModeFromDisplaySettings != WindowConfiguration.WINDOWING_MODE_UNDEFINED) {
            return windowingModeFromDisplaySettings;
        }
        // No record is present so use default windowing mode policy.
        if (windowingMode == WindowConfiguration.WINDOWING_MODE_UNDEFINED) {
            windowingMode = mService.mAtmService.mSupportsFreeformWindowManagement
                    && (mService.mIsPc || dc.forceDesktopMode())
                    ? WindowConfiguration.WINDOWING_MODE_FREEFORM
                    : WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
        final boolean forceFreeForm = mService.mAtmService.mSupportsFreeformWindowManagement
                && (mService.mIsPc || dc.forceDesktopMode());
        if (forceFreeForm) {
            return WindowConfiguration.WINDOWING_MODE_FREEFORM;
        }
        final int currentWindowingMode = dc.getDefaultTaskDisplayArea().getWindowingMode();
        if (currentWindowingMode == WindowConfiguration.WINDOWING_MODE_UNDEFINED) {
            // No record preset in settings + no mode set via the display area policy.
            // Move to fullscreen as a fallback.
            return WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
        }
        if (currentWindowingMode == WindowConfiguration.WINDOWING_MODE_FREEFORM) {
            // Freeform was enabled before but disabled now, the TDA should now move to fullscreen.
            return WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
        }
        return windowingMode;
        return currentWindowingMode;
    }

    @WindowConfiguration.WindowingMode
+11 −0
Original line number Diff line number Diff line
@@ -114,6 +114,17 @@ public class DisplayWindowSettingsTests extends WindowTestsBase {
                mPrimaryDisplay.getDefaultTaskDisplayArea().getWindowingMode());
    }

    @Test
    public void testPrimaryDisplayUnchanged_whenWindowingModeAlreadySet_NoFreeformSupport() {
        mPrimaryDisplay.getDefaultTaskDisplayArea().setWindowingMode(
                WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW);

        mDisplayWindowSettings.applySettingsToDisplayLocked(mPrimaryDisplay);

        assertEquals(WindowConfiguration.WINDOWING_MODE_MULTI_WINDOW,
                mPrimaryDisplay.getDefaultTaskDisplayArea().getWindowingMode());
    }

    @Test
    public void testPrimaryDisplayDefaultToFullscreen_HasFreeformSupport_NonPc_NoDesktopMode() {
        mWm.mAtmService.mSupportsFreeformWindowManagement = true;