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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user