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

Commit 1a2774e3 authored by Anubhav Kakkar's avatar Anubhav Kakkar
Browse files

Add trunk flag check to prevent changing the special app access settings for...

Add trunk flag check to prevent changing the special app access settings for 'Change media output' for direct intent based entry when trunk flag is not enabled.

Bug: 321905521
Test: Ensure trunk flag is disabled > Open app specific settings for 'Change media output' > Ensure that settings should not be changeable
Change-Id: Iedfd82d97eb49fc65c56d332bde815ff41e24736
parent 00f4225c
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.app.role.RoleManager
import android.app.settings.SettingsEnums
import android.companion.AssociationRequest
import android.content.Context
import com.android.media.flags.Flags;
import com.android.settings.R
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settingslib.spaprivileged.template.app.AppOpPermissionListModel
@@ -48,8 +49,9 @@ class MediaRoutingControlAppsListModel(context: Context) : AppOpPermissionListMo
    }

    override fun isChangeable(record: AppOpPermissionRecord): Boolean {
        return super.isChangeable(record) && (this.roleManager
                ?.getRoleHolders(AssociationRequest.DEVICE_PROFILE_WATCH)
        return Flags.enablePrivilegedRoutingForMediaRoutingControl()
                && super.isChangeable(record)
                && (this.roleManager?.getRoleHolders(AssociationRequest.DEVICE_PROFILE_WATCH)
                ?.contains(record.app.packageName) == true)
    }

+27 −1
Original line number Diff line number Diff line
@@ -23,9 +23,11 @@ import android.app.settings.SettingsEnums
import android.companion.AssociationRequest
import android.content.Context
import android.content.pm.ApplicationInfo
import android.platform.test.flag.junit.SetFlagsRule
import androidx.lifecycle.MutableLiveData
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.media.flags.Flags
import com.android.settings.R
import com.android.settings.testutils.FakeFeatureFactory
import com.android.settingslib.spaprivileged.model.app.IAppOpsController
@@ -36,17 +38,19 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.verify
import org.mockito.Spy
import org.mockito.junit.MockitoJUnit
import org.mockito.junit.MockitoRule
import org.mockito.Mockito.`when` as whenever
import org.mockito.Mockito.verify

@RunWith(AndroidJUnit4::class)
class MediaRoutingControlTest {
    @get:Rule
    val mockito: MockitoRule = MockitoJUnit.rule()

    @get:Rule val setFlagsRule: SetFlagsRule = SetFlagsRule();

    @Spy
    private val context: Context = ApplicationProvider.getApplicationContext()

@@ -143,6 +147,7 @@ class MediaRoutingControlTest {

    @Test
    fun isChangeable_permissionRequestedByAppAndWatchCompanionRoleAssigned_shouldReturnTrue() {
        setFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
        val permissionRequestedRecord =
                AppOpPermissionRecord(
                        app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
@@ -161,6 +166,7 @@ class MediaRoutingControlTest {

    @Test
    fun isChangeable_permissionNotRequestedByAppButWatchCompanionRoleAssigned_shouldReturnFalse() {
        setFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
        val permissionNotRequestedRecord =
                AppOpPermissionRecord(
                        app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
@@ -179,6 +185,7 @@ class MediaRoutingControlTest {

    @Test
    fun isChangeable_permissionRequestedByAppButWatchCompanionRoleNotAssigned_shouldReturnFalse() {
        setFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
        val permissionRequestedRecord =
                AppOpPermissionRecord(
                        app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
@@ -195,6 +202,25 @@ class MediaRoutingControlTest {
        assertThat(isSpecialAccessChangeable).isFalse()
    }

    @Test
    fun isChangeable_withFlagDisabled_shouldReturnFalse() {
        setFlagsRule.disableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
        val permissionRequestedRecord =
                AppOpPermissionRecord(
                        app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
                        hasRequestPermission = true,
                        hasRequestBroaderPermission = false,
                        appOpsController =
                        FakeAppOpsController(fakeMode = AppOpsManager.MODE_DEFAULT),
                )
        whenever(mockRoleManager.getRoleHolders(AssociationRequest.DEVICE_PROFILE_WATCH))
                .thenReturn(listOf(PACKAGE_NAME))

        val isSpecialAccessChangeable = listModel.isChangeable(permissionRequestedRecord)

        assertThat(isSpecialAccessChangeable).isFalse()
    }

    private class FakeAppOpsController(fakeMode: Int) : IAppOpsController {

        override val mode = MutableLiveData(fakeMode)