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

Commit 7589f6b6 authored by Matías Hernández's avatar Matías Hernández
Browse files

Check DISALLOW_ADJUST_VOLUME in the Modes tile, same as the DND tile did

Technically, some modes may not adjust volume. But since we disable the whole Modes page in Settings, it's consistent to do the same here.

Fixes: 417390373
Test: atest ModesTileTest + manual
Flag: EXEMPT Trivial bugfix
Change-Id: Ia21bc336427bf16c05cc4d557edf1364d70ef82c
parent 66e62af0
Loading
Loading
Loading
Loading
+37 −1
Original line number Diff line number Diff line
@@ -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
@@ -53,7 +54,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
@@ -65,6 +65,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)
@@ -195,6 +199,7 @@ class ModesTileTest : SysuiTestCase() {

            assertThat(tileState.state).isEqualTo(Tile.STATE_ACTIVE)
            assertThat(tileState.label).isEqualTo("2 Modes")
            assertThat(tileState.disabledByPolicy).isFalse()
        }

    @Test
@@ -214,4 +219,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))
        }
}
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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
@@ -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,
            )

+22 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);
    }
}