Add is MainUser check for HSUM.

Bug: 257333623
Bug: 265212342
Test: atest DreamTileTest
Change-Id: I6d1d929073e53ec916d094f6ef8b6db758f3a001
This commit is contained in:
Victor Truong
2023-01-30 17:08:56 -05:00
parent d38fcd3cf0
commit 8f4c02947b
3 changed files with 24 additions and 24 deletions

View File

@@ -203,8 +203,7 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> {
// 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<QSTile.BooleanState> {
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);

View File

@@ -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());
}

View File

@@ -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) {