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

Commit be40d25b authored by Justin Koh's avatar Justin Koh
Browse files

Adjust DreamTile for secondary users.

Adjust DreamTile availability based on config booleans like dream supported, or dream only enabled for secondary users.

Bug: 231588826
Test: Wrote new unit test for this case, verified with guest user.
Change-Id: Ib261d6922b347768c7e104bb4f8dadc81b6ba15b
parent 03ffb3ba
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -17,10 +17,14 @@
package com.android.systemui.dreams.dagger;

import android.content.Context;
import android.content.res.Resources;

import com.android.settingslib.dream.DreamBackend;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.complication.dagger.RegisteredComplicationsModule;

import javax.inject.Named;

import dagger.Module;
import dagger.Provides;

@@ -34,6 +38,10 @@ import dagger.Provides;
            DreamOverlayComponent.class,
        })
public interface DreamModule {
    String DREAM_ONLY_ENABLED_FOR_SYSTEM_USER = "dream_only_enabled_for_system_user";

    String DREAM_SUPPORTED = "dream_supported";

    /**
     * Provides an instance of the dream backend.
     */
@@ -41,4 +49,19 @@ public interface DreamModule {
    static DreamBackend providesDreamBackend(Context context) {
        return DreamBackend.getInstance(context);
    }

    /** */
    @Provides
    @Named(DREAM_ONLY_ENABLED_FOR_SYSTEM_USER)
    static boolean providesDreamOnlyEnabledForSystemUser(@Main Resources resources) {
        return resources.getBoolean(
                com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser);
    }

    /** */
    @Provides
    @Named(DREAM_SUPPORTED)
    static boolean providesDreamSupported(@Main Resources resources) {
        return resources.getBoolean(com.android.internal.R.bool.config_dreamsSupported);
    }
}
+19 −5
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
import android.os.UserManager;
import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.service.quicksettings.Tile;
@@ -42,6 +43,7 @@ import com.android.systemui.R;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dreams.dagger.DreamModule;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile;
@@ -53,16 +55,19 @@ import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.util.settings.SecureSettings;

import javax.inject.Inject;
import javax.inject.Named;

/** Quick settings tile: Screensaver (dream) **/
public class DreamTile extends QSTileImpl<QSTile.BooleanState> {

    private static final String LOG_TAG = "QSDream";
    private final IDreamManager mDreamManager;
    private final SecureSettings mSecureSettings;
    private final BroadcastDispatcher mBroadcastDispatcher;
    private final SettingObserver mEnabledSettingObserver;
    private final SettingObserver mDreamSettingObserver;
    private final UserManager mUserManager;
    private final boolean mDreamSupported;
    private final boolean mDreamOnlyEnabledForSystemUser;

    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
        @Override
@@ -83,12 +88,15 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> {
            QSLogger qsLogger,
            IDreamManager dreamManager,
            SecureSettings secureSettings,
            BroadcastDispatcher broadcastDispatcher
            BroadcastDispatcher broadcastDispatcher,
            UserManager userManager,
            @Named(DreamModule.DREAM_SUPPORTED) boolean dreamSupported,
            @Named(DreamModule.DREAM_ONLY_ENABLED_FOR_SYSTEM_USER)
                    boolean dreamOnlyEnabledForSystemUser
    ) {
        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger);
        mDreamManager = dreamManager;
        mSecureSettings = secureSettings;
        mBroadcastDispatcher = broadcastDispatcher;
        mEnabledSettingObserver = new SettingObserver(secureSettings, mHandler,
                Settings.Secure.SCREENSAVER_ENABLED) {
@@ -104,6 +112,9 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> {
                refreshState();
            }
        };
        mUserManager = userManager;
        mDreamSupported = dreamSupported;
        mDreamOnlyEnabledForSystemUser = dreamOnlyEnabledForSystemUser;
    }

    @Override
@@ -177,8 +188,11 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> {

    @Override
    public boolean isAvailable() {
        // For now, only present on userdebug devices.
        return Build.isDebuggable();
        // Only enable for devices that have dreams for the user(s) that can dream.
        // For now, restrict to debug users.
        return Build.isDebuggable()
                && mDreamSupported
                && (!mDreamOnlyEnabledForSystemUser || mUserManager.isSystemUser());
    }

    @VisibleForTesting
+43 −12
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.qs.tiles;

import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertTrue;

import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -25,6 +27,7 @@ import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserManager;
import android.provider.Settings;
import android.service.dreams.IDreamManager;
import android.service.quicksettings.Tile;
@@ -70,6 +73,8 @@ public class DreamTileTest extends SysuiTestCase {
    private IDreamManager mDreamManager;
    @Mock
    private BroadcastDispatcher mBroadcastDispatcher;
    @Mock
    private UserManager mUserManager;

    private TestableLooper mTestableLooper;

@@ -94,18 +99,7 @@ public class DreamTileTest extends SysuiTestCase {
        when(mHost.getUserId()).thenReturn(DEFAULT_USER);
        when(mHost.getContext()).thenReturn(mContext);

        mTile = spy(new DreamTile(
                mHost,
                mTestableLooper.getLooper(),
                new Handler(mTestableLooper.getLooper()),
                new FalsingManagerFake(),
                mMetricsLogger,
                mStatusBarStateController,
                mActivityStarter,
                mQSLogger,
                mDreamManager,
                mSecureSettings,
                mBroadcastDispatcher));
        mTile = spy(constructTileForTest(true, false));

        mTestableLooper.processAllMessages();
        mTile.initialize();
@@ -195,8 +189,45 @@ public class DreamTileTest extends SysuiTestCase {
                mTile.getContentDescription(testDreamName));
    }

    @Test
    public void testUserAvailability() {
        DreamTile unsupportedTile = constructTileForTest(false, true);
        assertFalse(unsupportedTile.isAvailable());

        DreamTile supportedTileAllUsers = constructTileForTest(true, false);

        when(mUserManager.isSystemUser()).thenReturn(true);
        assertTrue(supportedTileAllUsers.isAvailable());
        when(mUserManager.isSystemUser()).thenReturn(false);
        assertTrue(supportedTileAllUsers.isAvailable());

        DreamTile supportedTileOnlySystemUser = constructTileForTest(true, true);
        when(mUserManager.isSystemUser()).thenReturn(true);
        assertTrue(supportedTileOnlySystemUser.isAvailable());
        when(mUserManager.isSystemUser()).thenReturn(false);
        assertFalse(supportedTileOnlySystemUser.isAvailable());
    }

    private void setScreensaverEnabled(boolean enabled) {
        mSecureSettings.putIntForUser(Settings.Secure.SCREENSAVER_ENABLED, enabled ? 1 : 0,
                DEFAULT_USER);
    }

    private DreamTile constructTileForTest(boolean dreamSupported,
            boolean dreamOnlyEnabledForSystemUser) {
        return new DreamTile(
                mHost,
                mTestableLooper.getLooper(),
                new Handler(mTestableLooper.getLooper()),
                new FalsingManagerFake(),
                mMetricsLogger,
                mStatusBarStateController,
                mActivityStarter,
                mQSLogger,
                mDreamManager,
                mSecureSettings,
                mBroadcastDispatcher,
                mUserManager,
                dreamSupported, dreamOnlyEnabledForSystemUser);
    }
}