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

Commit 27090e03 authored by Justin Koh's avatar Justin Koh Committed by Android (Google) Code Review
Browse files

Merge "Adjust DreamTile for secondary users." into tm-qpr-dev

parents c3565a50 be40d25b
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);
    }
}