summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelV2.kt20
-rw-r--r--PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageDetailsViewModelTest.kt16
2 files changed, 24 insertions, 12 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelV2.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelV2.kt
index 260203b05..bf6fb4a35 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelV2.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelV2.kt
@@ -25,6 +25,7 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
+import com.android.permissioncontroller.R
import com.android.permissioncontroller.appops.data.repository.v31.AppOpRepository
import com.android.permissioncontroller.permission.data.repository.v31.PermissionRepository
import com.android.permissioncontroller.permission.domain.model.v31.PermissionTimelineUsageModel
@@ -64,6 +65,7 @@ class PermissionUsageDetailsViewModelV2(
private val packageRepository: PackageRepository = PackageRepository.getInstance(app)
) : BasePermissionUsageDetailsViewModel(app) {
private val coroutineScope = scope ?: viewModelScope
+ private val context = app
private val showSystemFlow = MutableStateFlow(state[SHOULD_SHOW_SYSTEM_KEY] ?: false)
private val show7DaysFlow = MutableStateFlow(state[SHOULD_SHOW_7_DAYS_KEY] ?: false)
@@ -123,14 +125,18 @@ class PermissionUsageDetailsViewModelV2(
null
}
val proxyLabel = getProxyPackageLabel(clusterOps)
- val subAttributionLabel = clusterOps.attributionLabel
- val showingSubAttribution = !subAttributionLabel.isNullOrEmpty()
- val summary =
- buildUsageSummary(subAttributionLabel, proxyLabel, durationSummaryLabel)
val isEmergencyLocationAccess =
isLocationByPassEnabled() &&
clusterOps.opNames.any { it == OPSTR_EMERGENCY_LOCATION }
-
+ val subAttributionLabel =
+ if (isEmergencyLocationAccess) {
+ emergencyLocationAttributionLabel
+ } else {
+ clusterOps.attributionLabel
+ }
+ val showingSubAttribution = !subAttributionLabel.isNullOrEmpty()
+ val summary =
+ buildUsageSummary(subAttributionLabel, proxyLabel, durationSummaryLabel)
PermissionUsageDetailsViewModel.AppPermissionAccessUiInfo(
UserHandle.of(clusterOps.userId),
clusterOps.packageName,
@@ -152,6 +158,10 @@ class PermissionUsageDetailsViewModelV2(
return PermissionUsageDetailsUiState.Success(result, containsSystemUsages)
}
+ private val emergencyLocationAttributionLabel: String by lazy {
+ context.getString(R.string.privacy_dashboard_emergency_location_enforced_attribution_label)
+ }
+
override fun getShowSystem(): Boolean = showSystemFlow.value
override val showSystemLiveData =
diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageDetailsViewModelTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageDetailsViewModelTest.kt
index 828df4bf5..a0a6a3500 100644
--- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageDetailsViewModelTest.kt
+++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageDetailsViewModelTest.kt
@@ -20,6 +20,7 @@ import android.app.AppOpsManager
import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
+import android.permission.flags.Flags
import androidx.lifecycle.SavedStateHandle
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito
@@ -89,6 +90,7 @@ class PermissionUsageDetailsViewModelTest {
.mockStatic(PermissionControllerApplication::class.java)
.mockStatic(Utils::class.java)
.mockStatic(StringUtils::class.java)
+ .mockStatic(Flags::class.java)
.strictness(Strictness.LENIENT)
.startMocking()
@@ -355,15 +357,14 @@ class PermissionUsageDetailsViewModelTest {
}
@Test
- fun verifyLocationBypassAccess() = runTest {
+ fun verifyEmergencyLocationAccessWithAttribution() = runTest {
+ Assume.assumeTrue(SdkLevel.isAtLeastV())
+ whenever(Flags.locationBypassPrivacyDashboardEnabled()).thenReturn(true)
+ whenever(application.getString(anyInt())).thenReturn("emergency attr label")
val accessTimeMillis = (getCurrentTime() - TimeUnit.HOURS.toMillis(5))
val appOpEvents =
listOf(
- DiscreteOpModel(
- AppOpsManager.OPSTR_EMERGENCY_LOCATION,
- accessTimeMillis,
- TimeUnit.MINUTES.toMillis(1)
- ),
+ DiscreteOpModel(AppOpsManager.OPSTR_EMERGENCY_LOCATION, accessTimeMillis, -1),
)
val discretePackageOps = flow {
emit(
@@ -377,12 +378,13 @@ class PermissionUsageDetailsViewModelTest {
getViewModel(
LOCATION_PERMISSION_GROUP,
discretePackageOps,
- savedStateMap = mapOf("show7Days" to false, "showSystem" to false)
)
val uiState = getPermissionUsageDetailsUiState(underTest)
assertThat(uiState.appPermissionAccessUiInfoList.size).isEqualTo(1)
val timelineRow = uiState.appPermissionAccessUiInfoList.first()
assertThat(timelineRow.isEmergencyLocationAccess).isTrue()
+ assertThat(timelineRow.showingAttribution).isTrue()
+ assertThat(timelineRow.summaryText).isEqualTo("emergency attr label")
}
@Test