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
This commit is contained in:
Anubhav Kakkar
2024-01-19 16:34:17 +00:00
parent 00f4225c2c
commit 1a2774e3d8
2 changed files with 31 additions and 3 deletions

View File

@@ -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)
}

View File

@@ -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)