diff --git a/src/com/android/settings/spa/app/specialaccess/MediaRoutingControl.kt b/src/com/android/settings/spa/app/specialaccess/MediaRoutingControl.kt index 91c49285c8f..b9fb9b8cd9a 100644 --- a/src/com/android/settings/spa/app/specialaccess/MediaRoutingControl.kt +++ b/src/com/android/settings/spa/app/specialaccess/MediaRoutingControl.kt @@ -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) } diff --git a/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/MediaRoutingControlTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/MediaRoutingControlTest.kt index 5f0f2c6dd25..2f4740e65d4 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/MediaRoutingControlTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/specialaccess/MediaRoutingControlTest.kt @@ -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)