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

Commit 8d829ef4 authored by Bryce Lee's avatar Bryce Lee
Browse files

Update DreamOverlayService to work with Headless System User Mode.

The DreamOverlayService must run as part of the system user SystemUI
instance as the user-specific instance only has secondary components
enabled. As a result, the added overlay window must be set to show
for all users.

Test: atest DreamOverlayServiceTest#testSystemFlagShowForAllUsersSetOnWindow
Test: manual - verified overlay appears when dream shown in HSUM
Fixes: 283486171
Change-Id: I14d3335cb0d2a78780258300737f5d0dbe8d97e1
parent a46f7d77
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -817,7 +817,8 @@
        <service
            android:name=".dreams.DreamOverlayService"
            android:enabled="false"
            android:exported="true" />
            android:exported="true"
            android:singleUser="true" />

        <activity android:name=".keyguard.WorkLockActivity"
                  android:label="@string/accessibility_desc_work_lock"
+1 −0
Original line number Diff line number Diff line
@@ -283,6 +283,7 @@ public class DreamOverlayService extends android.service.dreams.DreamOverlayServ

        mWindow.clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        mWindow.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
        mWindow.addPrivateFlags(WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS);
        mWindow.requestFeature(Window.FEATURE_NO_TITLE);
        // Hide all insets when the dream is showing
        mWindow.getDecorView().getWindowInsetsController().hide(WindowInsets.Type.systemBars());
+21 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.systemui.dreams;

import static android.view.WindowManager.LayoutParams.SYSTEM_FLAG_SHOW_FOR_ALL_USERS;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
@@ -512,4 +514,23 @@ public class DreamOverlayServiceTest extends SysuiTestCase {
        mMainExecutor.runAllReady();
        verify(mDreamOverlayContainerViewController, never()).wakeUp(callback, mMainExecutor);
    }

    @Test
    public void testSystemFlagShowForAllUsersSetOnWindow() throws RemoteException {
        final IDreamOverlayClient client = getClient();

        // Inform the overlay service of dream starting. Do not show dream complications.
        client.startDream(mWindowParams, mDreamOverlayCallback, DREAM_COMPONENT,
                false /*shouldShowComplication*/);
        mMainExecutor.runAllReady();

        final ArgumentCaptor<WindowManager.LayoutParams> paramsCaptor =
                ArgumentCaptor.forClass(WindowManager.LayoutParams.class);

        // Verify that a new window is added.
        verify(mWindowManager).addView(any(), paramsCaptor.capture());

        assertThat((paramsCaptor.getValue().privateFlags & SYSTEM_FLAG_SHOW_FOR_ALL_USERS)
                == SYSTEM_FLAG_SHOW_FOR_ALL_USERS).isTrue();
    }
}