diff --git a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java index 1f553a26e94..8082bcdc046 100644 --- a/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java +++ b/src/com/android/settings/notification/zen/ZenModeSliceBuilder.java @@ -26,6 +26,8 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; +import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; import androidx.core.graphics.drawable.IconCompat; @@ -40,6 +42,8 @@ import com.android.settings.Utils; import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.SliceBroadcastReceiver; import com.android.settings.slices.SliceBuilderUtils; +import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; +import com.android.settingslib.RestrictedLockUtilsInternal; public class ZenModeSliceBuilder { @@ -84,8 +88,11 @@ public class ZenModeSliceBuilder { isZenModeEnabled); final RowBuilder rowBuilder = new RowBuilder() .setTitle(title) - .addEndItem(toggleSliceAction) .setPrimaryAction(primarySliceAction); + if (!isManagedByAdmin(context)) { + rowBuilder.addEndItem(toggleSliceAction); + } + if (!Utils.isSettingsIntelligence(context)) { rowBuilder.setSubtitle(subtitle); } @@ -152,4 +159,10 @@ public class ZenModeSliceBuilder { return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_MUTABLE); } + + private static boolean isManagedByAdmin(Context context) { + EnforcedAdmin enforcedAdmin = RestrictedLockUtilsInternal.checkIfRestrictionEnforced( + context, UserManager.DISALLOW_ADJUST_VOLUME, UserHandle.myUserId()); + return enforcedAdmin != null; + } } diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java index 400543cb724..71f896df7c9 100644 --- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java +++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeSliceBuilderTest.java @@ -32,9 +32,10 @@ import androidx.slice.core.SliceAction; import androidx.slice.widget.SliceLiveData; import com.android.settings.R; -import com.android.settings.notification.zen.ZenModeSliceBuilder; import com.android.settings.testutils.shadow.ShadowNotificationManager; +import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsInternal; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -44,7 +45,7 @@ import org.robolectric.annotation.Config; import java.util.List; -@Config(shadows = ShadowNotificationManager.class) +@Config(shadows = {ShadowNotificationManager.class, ShadowRestrictedLockUtilsInternal.class}) @RunWith(RobolectricTestRunner.class) public class ZenModeSliceBuilderTest { @@ -58,6 +59,11 @@ public class ZenModeSliceBuilderTest { SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); } + @After + public void tearDown() { + ShadowRestrictedLockUtilsInternal.reset(); + } + @Test public void getZenModeSlice_correctSliceContent() { final Slice dndSlice = ZenModeSliceBuilder.getSlice(mContext); @@ -73,6 +79,22 @@ public class ZenModeSliceBuilderTest { assertThat(primaryAction.getIcon()).isNull(); } + @Test + public void getZenModeSlice_managedByAdmin_shouldNotHaveToggle() { + ShadowRestrictedLockUtilsInternal.setRestricted(true); + final Slice dndSlice = ZenModeSliceBuilder.getSlice(mContext); + + final SliceMetadata metadata = SliceMetadata.from(mContext, dndSlice); + assertThat(metadata.getTitle()).isEqualTo( + mContext.getString(R.string.zen_mode_settings_title)); + + final List toggles = metadata.getToggles(); + assertThat(toggles).hasSize(0); + + final SliceAction primaryAction = metadata.getPrimaryAction(); + assertThat(primaryAction.getIcon()).isNull(); + } + @Test public void handleUriChange_turnOn_zenModeTurnsOn() { final Intent intent = new Intent();