Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +37 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles import android.graphics.drawable.TestStubDrawable import android.os.Handler import android.os.UserManager import android.platform.test.annotations.EnableFlags import android.service.quicksettings.Tile import android.testing.TestableLooper Loading Loading @@ -56,7 +57,6 @@ import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.modesDialogViewModel import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.settings.SecureSettings import com.google.common.truth.Truth.assertThat Loading @@ -68,6 +68,10 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever @EnableFlags(android.app.Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST) Loading Loading @@ -206,6 +210,7 @@ class ModesTileTest : SysuiTestCase() { assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE) assertThat(tileState.label).isEqualTo("2 Modes") assertThat(tileState.disabledByPolicy).isFalse() } @Test Loading @@ -225,4 +230,35 @@ class ModesTileTest : SysuiTestCase() { assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE) assertThat(tileState.label).isEqualTo("2 Modes") } @Test fun handleUpdateState_checksUserRestriction() = testScope.runTest { val tileState = QSTile.State().apply { state = Tile.STATE_INACTIVE } val model = ModesTileModel( isActivated = false, activeModes = listOf(), icon = TestStubDrawable().asIcon(), quickMode = TestModeBuilder.MANUAL_DND, ) val userManager = mock<UserManager>() whenever(userManager.getUserRestrictionSources(any(), any())) .thenReturn( listOf( UserManager.EnforcingUser( context.userId, UserManager.RESTRICTION_SOURCE_DEVICE_OWNER, ) ) ) context.addMockSystemService(UserManager::class.java, userManager) context.prepareCreatePackageContextAsUser(context.packageName, context.user, context) underTest.handleUpdateState(tileState, model) assertThat(tileState.disabledByPolicy).isTrue() verify(userManager) .getUserRestrictionSources(eq(UserManager.DISALLOW_ADJUST_VOLUME), eq(context.user)) } } packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles import android.content.Intent import android.os.Handler import android.os.Looper import android.os.UserManager.DISALLOW_ADJUST_VOLUME import android.service.quicksettings.Tile import androidx.annotation.DrawableRes import androidx.annotation.VisibleForTesting Loading Loading @@ -137,6 +138,7 @@ constructor( tileState = tileMapper.map(config, model) state?.apply { checkIfRestrictionEnforcedByAdminOnly(state, DISALLOW_ADJUST_VOLUME) this.state = tileState.activationState.legacyState icon = tileState.icon?.asQSTileIcon() ?: maybeLoadResourceIcon(ICON_RES_ID) label = tileLabel Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/PolicyModule.kt +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.policy import android.hardware.SensorPrivacyManager.Sensors.CAMERA import android.hardware.SensorPrivacyManager.Sensors.MICROPHONE import android.os.UserManager.DISALLOW_ADJUST_VOLUME import android.os.UserManager.DISALLOW_CAMERA_TOGGLE import android.os.UserManager.DISALLOW_CONFIG_LOCATION import android.os.UserManager.DISALLOW_MICROPHONE_TOGGLE Loading Loading @@ -417,6 +418,7 @@ interface PolicyModule { labelRes = R.string.quick_settings_modes_label, ), instanceId = uiEventLogger.getNewInstanceId(), policy = QSTilePolicy.Restricted(listOf(DISALLOW_ADJUST_VOLUME)), category = TileCategory.UTILITIES, ) Loading packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java +22 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.testing.LeakCheck; import android.testing.TestableContext; import android.util.ArraySet; import android.util.Log; import android.util.Pair; import android.view.Display; import androidx.annotation.Nullable; Loading @@ -44,6 +45,7 @@ public class SysuiTestableContext extends TestableContext { private final Set<BroadcastReceiver> mRegisteredReceivers = new ArraySet<>(); private final Map<UserHandle, Context> mContextForUser = new HashMap<>(); private final Map<String, Context> mContextForPackage = new HashMap<>(); private final Map<Pair<String, UserHandle>, Context> mContextForPackageUser = new HashMap<>(); @Nullable private Display mCustomDisplay; Loading Loading @@ -220,4 +222,24 @@ public class SysuiTestableContext extends TestableContext { } return super.createPackageContext(packageName, flags); } /** * Sets a Context object that will be returned as the result of * {@link #createPackageContextAsUser} for a specific {@code packageName} and {@code user}. */ public void prepareCreatePackageContextAsUser(String packageName, UserHandle user, Context context) { mContextForPackageUser.put(new Pair<>(packageName, user), context); } @Override @NonNull public Context createPackageContextAsUser(String packageName, int flags, UserHandle user) throws PackageManager.NameNotFoundException { Context packageUserContext = mContextForPackageUser.get(new Pair<>(packageName, user)); if (packageUserContext != null) { return packageUserContext; } return super.createPackageContextAsUser(packageName, flags, user); } } Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/ModesTileTest.kt +37 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.qs.tiles import android.graphics.drawable.TestStubDrawable import android.os.Handler import android.os.UserManager import android.platform.test.annotations.EnableFlags import android.service.quicksettings.Tile import android.testing.TestableLooper Loading Loading @@ -56,7 +57,6 @@ import com.android.systemui.statusbar.policy.ui.dialog.ModesDialogDelegate import com.android.systemui.statusbar.policy.ui.dialog.modesDialogEventLogger import com.android.systemui.statusbar.policy.ui.dialog.viewmodel.modesDialogViewModel import com.android.systemui.testKosmos import com.android.systemui.util.mockito.any import com.android.systemui.util.settings.FakeSettings import com.android.systemui.util.settings.SecureSettings import com.google.common.truth.Truth.assertThat Loading @@ -68,6 +68,10 @@ import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever @EnableFlags(android.app.Flags.FLAG_MODES_UI_TILE_REACTIVATES_LAST) Loading Loading @@ -206,6 +210,7 @@ class ModesTileTest : SysuiTestCase() { assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE) assertThat(tileState.label).isEqualTo("2 Modes") assertThat(tileState.disabledByPolicy).isFalse() } @Test Loading @@ -225,4 +230,35 @@ class ModesTileTest : SysuiTestCase() { assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE) assertThat(tileState.label).isEqualTo("2 Modes") } @Test fun handleUpdateState_checksUserRestriction() = testScope.runTest { val tileState = QSTile.State().apply { state = Tile.STATE_INACTIVE } val model = ModesTileModel( isActivated = false, activeModes = listOf(), icon = TestStubDrawable().asIcon(), quickMode = TestModeBuilder.MANUAL_DND, ) val userManager = mock<UserManager>() whenever(userManager.getUserRestrictionSources(any(), any())) .thenReturn( listOf( UserManager.EnforcingUser( context.userId, UserManager.RESTRICTION_SOURCE_DEVICE_OWNER, ) ) ) context.addMockSystemService(UserManager::class.java, userManager) context.prepareCreatePackageContextAsUser(context.packageName, context.user, context) underTest.handleUpdateState(tileState, model) assertThat(tileState.disabledByPolicy).isTrue() verify(userManager) .getUserRestrictionSources(eq(UserManager.DISALLOW_ADJUST_VOLUME), eq(context.user)) } }
packages/SystemUI/src/com/android/systemui/qs/tiles/ModesTile.kt +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.systemui.qs.tiles import android.content.Intent import android.os.Handler import android.os.Looper import android.os.UserManager.DISALLOW_ADJUST_VOLUME import android.service.quicksettings.Tile import androidx.annotation.DrawableRes import androidx.annotation.VisibleForTesting Loading Loading @@ -137,6 +138,7 @@ constructor( tileState = tileMapper.map(config, model) state?.apply { checkIfRestrictionEnforcedByAdminOnly(state, DISALLOW_ADJUST_VOLUME) this.state = tileState.activationState.legacyState icon = tileState.icon?.asQSTileIcon() ?: maybeLoadResourceIcon(ICON_RES_ID) label = tileLabel Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/PolicyModule.kt +2 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.policy import android.hardware.SensorPrivacyManager.Sensors.CAMERA import android.hardware.SensorPrivacyManager.Sensors.MICROPHONE import android.os.UserManager.DISALLOW_ADJUST_VOLUME import android.os.UserManager.DISALLOW_CAMERA_TOGGLE import android.os.UserManager.DISALLOW_CONFIG_LOCATION import android.os.UserManager.DISALLOW_MICROPHONE_TOGGLE Loading Loading @@ -417,6 +418,7 @@ interface PolicyModule { labelRes = R.string.quick_settings_modes_label, ), instanceId = uiEventLogger.getNewInstanceId(), policy = QSTilePolicy.Restricted(listOf(DISALLOW_ADJUST_VOLUME)), category = TileCategory.UTILITIES, ) Loading
packages/SystemUI/tests/utils/src/com/android/systemui/SysuiTestableContext.java +22 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.testing.LeakCheck; import android.testing.TestableContext; import android.util.ArraySet; import android.util.Log; import android.util.Pair; import android.view.Display; import androidx.annotation.Nullable; Loading @@ -44,6 +45,7 @@ public class SysuiTestableContext extends TestableContext { private final Set<BroadcastReceiver> mRegisteredReceivers = new ArraySet<>(); private final Map<UserHandle, Context> mContextForUser = new HashMap<>(); private final Map<String, Context> mContextForPackage = new HashMap<>(); private final Map<Pair<String, UserHandle>, Context> mContextForPackageUser = new HashMap<>(); @Nullable private Display mCustomDisplay; Loading Loading @@ -220,4 +222,24 @@ public class SysuiTestableContext extends TestableContext { } return super.createPackageContext(packageName, flags); } /** * Sets a Context object that will be returned as the result of * {@link #createPackageContextAsUser} for a specific {@code packageName} and {@code user}. */ public void prepareCreatePackageContextAsUser(String packageName, UserHandle user, Context context) { mContextForPackageUser.put(new Pair<>(packageName, user), context); } @Override @NonNull public Context createPackageContextAsUser(String packageName, int flags, UserHandle user) throws PackageManager.NameNotFoundException { Context packageUserContext = mContextForPackageUser.get(new Pair<>(packageName, user)); if (packageUserContext != null) { return packageUserContext; } return super.createPackageContextAsUser(packageName, flags, user); } }