From 8f4c02947b91a8545ecc5356f5ce638356205be1 Mon Sep 17 00:00:00 2001 From: Victor Truong Date: Mon, 30 Jan 2023 17:08:56 -0500 Subject: [PATCH] Add is MainUser check for HSUM. Bug: 257333623 Bug: 265212342 Test: atest DreamTileTest Change-Id: I6d1d929073e53ec916d094f6ef8b6db758f3a001 --- .../android/systemui/qs/tiles/DreamTile.java | 6 ++-- .../systemui/qs/tiles/DreamTileTest.java | 35 +++++++++---------- .../server/dreams/DreamManagerService.java | 7 ++-- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java index 5bc209a840cb4..7316f46cd237d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java @@ -203,8 +203,7 @@ public class DreamTile extends QSTileImpl { // For now, restrict to debug users. return Build.isDebuggable() && mDreamSupported - // TODO(b/257333623): Allow the Dock User to be non-SystemUser user in HSUM. - && (!mDreamOnlyEnabledForDockUser || mUserTracker.getUserHandle().isSystem()); + && (!mDreamOnlyEnabledForDockUser || mUserTracker.getUserInfo().isMain()); } @VisibleForTesting @@ -224,7 +223,8 @@ public class DreamTile extends QSTileImpl { private ComponentName getActiveDream() { try { - final ComponentName[] dreams = mDreamManager.getDreamComponents(); + final ComponentName[] dreams = mDreamManager.getDreamComponentsForUser( + mUserTracker.getUserId()); return dreams != null && dreams.length > 0 ? dreams[0] : null; } catch (RemoteException e) { Log.w(TAG, "Failed to get active dream", e); diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java index a13bece4b489e..15545a41ca106 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java @@ -29,9 +29,9 @@ import static org.mockito.Mockito.when; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Intent; +import android.content.pm.UserInfo; import android.os.Handler; import android.os.RemoteException; -import android.os.UserHandle; import android.provider.Settings; import android.service.dreams.IDreamManager; import android.service.quicksettings.Tile; @@ -123,7 +123,7 @@ public class DreamTileTest extends SysuiTestCase { // Should not be available if component is not set mSecureSettings.putInt(Settings.Secure.SCREENSAVER_ENABLED, 1); - when(mDreamManager.getDreamComponents()).thenReturn(null); + when(mDreamManager.getDreamComponentsForUser(mUserTracker.getUserId())).thenReturn(null); mTestableLooper.processAllMessages(); assertEquals(Tile.STATE_UNAVAILABLE, mTile.getState().state); @@ -134,9 +134,8 @@ public class DreamTileTest extends SysuiTestCase { public void testInactiveWhenDreaming() throws RemoteException { setScreensaverEnabled(true); - when(mDreamManager.getDreamComponents()).thenReturn(new ComponentName[]{ - COLORS_DREAM_COMPONENT_NAME - }); + when(mDreamManager.getDreamComponentsForUser(mUserTracker.getUserId())) + .thenReturn(new ComponentName[]{COLORS_DREAM_COMPONENT_NAME}); when(mDreamManager.isDreaming()).thenReturn(false); mTile.refreshState(); @@ -148,9 +147,8 @@ public class DreamTileTest extends SysuiTestCase { public void testActive() throws RemoteException { setScreensaverEnabled(true); - when(mDreamManager.getDreamComponents()).thenReturn(new ComponentName[]{ - COLORS_DREAM_COMPONENT_NAME - }); + when(mDreamManager.getDreamComponentsForUser(mUserTracker.getUserId())) + .thenReturn(new ComponentName[]{COLORS_DREAM_COMPONENT_NAME}); when(mDreamManager.isDreaming()).thenReturn(true); mTile.refreshState(); @@ -162,9 +160,8 @@ public class DreamTileTest extends SysuiTestCase { public void testClick() throws RemoteException { // Set the AOSP dream enabled as the base setup. setScreensaverEnabled(true); - when(mDreamManager.getDreamComponents()).thenReturn(new ComponentName[]{ - COLORS_DREAM_COMPONENT_NAME - }); + when(mDreamManager.getDreamComponentsForUser(mUserTracker.getUserId())) + .thenReturn(new ComponentName[]{COLORS_DREAM_COMPONENT_NAME}); when(mDreamManager.isDreaming()).thenReturn(false); mTile.refreshState(); @@ -203,21 +200,21 @@ public class DreamTileTest extends SysuiTestCase { DreamTile supportedTileAllUsers = constructTileForTest(true, false); - UserHandle systemUserHandle = mock(UserHandle.class); - when(systemUserHandle.isSystem()).thenReturn(true); + UserInfo mainUserInfo = mock(UserInfo.class); + when(mainUserInfo.isMain()).thenReturn(true); - UserHandle nonSystemUserHandle = mock(UserHandle.class); - when(nonSystemUserHandle.isSystem()).thenReturn(false); + UserInfo nonMainUserInfo = mock(UserInfo.class); + when(nonMainUserInfo.isMain()).thenReturn(false); - when(mUserTracker.getUserHandle()).thenReturn(systemUserHandle); + when(mUserTracker.getUserInfo()).thenReturn(mainUserInfo); assertTrue(supportedTileAllUsers.isAvailable()); - when(mUserTracker.getUserHandle()).thenReturn(nonSystemUserHandle); + when(mUserTracker.getUserInfo()).thenReturn(nonMainUserInfo); assertTrue(supportedTileAllUsers.isAvailable()); DreamTile supportedTileOnlySystemUser = constructTileForTest(true, true); - when(mUserTracker.getUserHandle()).thenReturn(systemUserHandle); + when(mUserTracker.getUserInfo()).thenReturn(mainUserInfo); assertTrue(supportedTileOnlySystemUser.isAvailable()); - when(mUserTracker.getUserHandle()).thenReturn(nonSystemUserHandle); + when(mUserTracker.getUserInfo()).thenReturn(nonMainUserInfo); assertFalse(supportedTileOnlySystemUser.isAvailable()); } diff --git a/services/core/java/com/android/server/dreams/DreamManagerService.java b/services/core/java/com/android/server/dreams/DreamManagerService.java index d9cdba7af9150..caa5036638806 100644 --- a/services/core/java/com/android/server/dreams/DreamManagerService.java +++ b/services/core/java/com/android/server/dreams/DreamManagerService.java @@ -72,6 +72,7 @@ import com.android.server.FgThread; import com.android.server.LocalServices; import com.android.server.SystemService; import com.android.server.input.InputManagerInternal; +import com.android.server.pm.UserManagerInternal; import com.android.server.wm.ActivityInterceptorCallback; import com.android.server.wm.ActivityTaskManagerInternal; @@ -639,8 +640,10 @@ public final class DreamManagerService extends SystemService { } private boolean dreamsEnabledForUser(int userId) { - // TODO(b/257333623): Support non-system Dock Users in HSUM. - return !mDreamsOnlyEnabledForDockUser || (userId == UserHandle.USER_SYSTEM); + if (!mDreamsOnlyEnabledForDockUser) return true; + if (userId < 0) return false; + final int mainUserId = LocalServices.getService(UserManagerInternal.class).getMainUserId(); + return userId == mainUserId; } private ServiceInfo getServiceInfo(ComponentName name) {