diff options
author | 2024-08-23 03:13:51 +0000 | |
---|---|---|
committer | 2024-08-23 03:13:51 +0000 | |
commit | 36a4a64c86eeefe07fdb8e5d29621c5dbcece60c (patch) | |
tree | 5149a0e88fff0519057fcb4ec8d687e657b8fb26 | |
parent | ad9221f4f7740c25e075639662d0ba8b70332441 (diff) | |
parent | ad58828cc46269c5df123fc0f620a9dc94000729 (diff) |
Merge "Fix attribution label for emergency location app op" into main
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 |