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

Commit 8f4c0294 authored by Victor Truong's avatar Victor Truong
Browse files

Add is MainUser check for HSUM.

Bug: 257333623
Bug: 265212342
Test: atest DreamTileTest
Change-Id: I6d1d929073e53ec916d094f6ef8b6db758f3a001
parent d38fcd3c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -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);
+16 −19
Original line number Diff line number Diff line
@@ -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());
    }

+5 −2
Original line number Diff line number Diff line
@@ -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) {