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
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user