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:
@@ -22,6 +22,7 @@ import android.app.role.RoleManager
|
|||||||
import android.app.settings.SettingsEnums
|
import android.app.settings.SettingsEnums
|
||||||
import android.companion.AssociationRequest
|
import android.companion.AssociationRequest
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import com.android.media.flags.Flags;
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
||||||
import com.android.settingslib.spaprivileged.template.app.AppOpPermissionListModel
|
import com.android.settingslib.spaprivileged.template.app.AppOpPermissionListModel
|
||||||
@@ -48,8 +49,9 @@ class MediaRoutingControlAppsListModel(context: Context) : AppOpPermissionListMo
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun isChangeable(record: AppOpPermissionRecord): Boolean {
|
override fun isChangeable(record: AppOpPermissionRecord): Boolean {
|
||||||
return super.isChangeable(record) && (this.roleManager
|
return Flags.enablePrivilegedRoutingForMediaRoutingControl()
|
||||||
?.getRoleHolders(AssociationRequest.DEVICE_PROFILE_WATCH)
|
&& super.isChangeable(record)
|
||||||
|
&& (this.roleManager?.getRoleHolders(AssociationRequest.DEVICE_PROFILE_WATCH)
|
||||||
?.contains(record.app.packageName) == true)
|
?.contains(record.app.packageName) == true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -23,9 +23,11 @@ import android.app.settings.SettingsEnums
|
|||||||
import android.companion.AssociationRequest
|
import android.companion.AssociationRequest
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
|
import android.platform.test.flag.junit.SetFlagsRule
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import com.android.media.flags.Flags
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.testutils.FakeFeatureFactory
|
import com.android.settings.testutils.FakeFeatureFactory
|
||||||
import com.android.settingslib.spaprivileged.model.app.IAppOpsController
|
import com.android.settingslib.spaprivileged.model.app.IAppOpsController
|
||||||
@@ -36,17 +38,19 @@ import org.junit.Rule
|
|||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Mock
|
import org.mockito.Mock
|
||||||
|
import org.mockito.Mockito.verify
|
||||||
import org.mockito.Spy
|
import org.mockito.Spy
|
||||||
import org.mockito.junit.MockitoJUnit
|
import org.mockito.junit.MockitoJUnit
|
||||||
import org.mockito.junit.MockitoRule
|
import org.mockito.junit.MockitoRule
|
||||||
import org.mockito.Mockito.`when` as whenever
|
import org.mockito.Mockito.`when` as whenever
|
||||||
import org.mockito.Mockito.verify
|
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class MediaRoutingControlTest {
|
class MediaRoutingControlTest {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val mockito: MockitoRule = MockitoJUnit.rule()
|
val mockito: MockitoRule = MockitoJUnit.rule()
|
||||||
|
|
||||||
|
@get:Rule val setFlagsRule: SetFlagsRule = SetFlagsRule();
|
||||||
|
|
||||||
@Spy
|
@Spy
|
||||||
private val context: Context = ApplicationProvider.getApplicationContext()
|
private val context: Context = ApplicationProvider.getApplicationContext()
|
||||||
|
|
||||||
@@ -143,6 +147,7 @@ class MediaRoutingControlTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun isChangeable_permissionRequestedByAppAndWatchCompanionRoleAssigned_shouldReturnTrue() {
|
fun isChangeable_permissionRequestedByAppAndWatchCompanionRoleAssigned_shouldReturnTrue() {
|
||||||
|
setFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
|
||||||
val permissionRequestedRecord =
|
val permissionRequestedRecord =
|
||||||
AppOpPermissionRecord(
|
AppOpPermissionRecord(
|
||||||
app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
|
app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
|
||||||
@@ -161,6 +166,7 @@ class MediaRoutingControlTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun isChangeable_permissionNotRequestedByAppButWatchCompanionRoleAssigned_shouldReturnFalse() {
|
fun isChangeable_permissionNotRequestedByAppButWatchCompanionRoleAssigned_shouldReturnFalse() {
|
||||||
|
setFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
|
||||||
val permissionNotRequestedRecord =
|
val permissionNotRequestedRecord =
|
||||||
AppOpPermissionRecord(
|
AppOpPermissionRecord(
|
||||||
app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
|
app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
|
||||||
@@ -179,6 +185,7 @@ class MediaRoutingControlTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun isChangeable_permissionRequestedByAppButWatchCompanionRoleNotAssigned_shouldReturnFalse() {
|
fun isChangeable_permissionRequestedByAppButWatchCompanionRoleNotAssigned_shouldReturnFalse() {
|
||||||
|
setFlagsRule.enableFlags(Flags.FLAG_ENABLE_PRIVILEGED_ROUTING_FOR_MEDIA_ROUTING_CONTROL)
|
||||||
val permissionRequestedRecord =
|
val permissionRequestedRecord =
|
||||||
AppOpPermissionRecord(
|
AppOpPermissionRecord(
|
||||||
app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
|
app = ApplicationInfo().apply { packageName = PACKAGE_NAME },
|
||||||
@@ -195,6 +202,25 @@ class MediaRoutingControlTest {
|
|||||||
assertThat(isSpecialAccessChangeable).isFalse()
|
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 {
|
private class FakeAppOpsController(fakeMode: Int) : IAppOpsController {
|
||||||
|
|
||||||
override val mode = MutableLiveData(fakeMode)
|
override val mode = MutableLiveData(fakeMode)
|
||||||
|
Reference in New Issue
Block a user