Loading packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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. */ Loading @@ -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); } } packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java +19 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading @@ -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) { Loading @@ -104,6 +112,9 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> { refreshState(); } }; mUserManager = userManager; mDreamSupported = dreamSupported; mDreamOnlyEnabledForSystemUser = dreamOnlyEnabledForSystemUser; } @Override Loading Loading @@ -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 Loading packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java +43 −12 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -70,6 +73,8 @@ public class DreamTileTest extends SysuiTestCase { private IDreamManager mDreamManager; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private UserManager mUserManager; private TestableLooper mTestableLooper; Loading @@ -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(); Loading Loading @@ -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); } } Loading
packages/SystemUI/src/com/android/systemui/dreams/dagger/DreamModule.java +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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. */ Loading @@ -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); } }
packages/SystemUI/src/com/android/systemui/qs/tiles/DreamTile.java +19 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading @@ -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) { Loading @@ -104,6 +112,9 @@ public class DreamTile extends QSTileImpl<QSTile.BooleanState> { refreshState(); } }; mUserManager = userManager; mDreamSupported = dreamSupported; mDreamOnlyEnabledForSystemUser = dreamOnlyEnabledForSystemUser; } @Override Loading Loading @@ -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 Loading
packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DreamTileTest.java +43 −12 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -70,6 +73,8 @@ public class DreamTileTest extends SysuiTestCase { private IDreamManager mDreamManager; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private UserManager mUserManager; private TestableLooper mTestableLooper; Loading @@ -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(); Loading Loading @@ -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); } }