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

Commit c0b13b32 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Check DISALLOW_ADJUST_VOLUME in the Modes tile, same as the DND tile did" into main

parents 849bf284 7589f6b6
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
@@ -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
@@ -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)
@@ -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
@@ -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))
        }
}
+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);
    }
}