diff options
7 files changed, 92 insertions, 20 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageDetailsFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageDetailsFragment.java index 8482545df..61693836a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageDetailsFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageDetailsFragment.java @@ -262,10 +262,9 @@ public class PermissionUsageDetailsFragment extends SettingsWithLargeHeader { setPreferenceScreen(screen); } screen.removeAll(); - boolean show7Days = mViewModel.getShow7Days(); Preference subtitlePreference = new Preference(context); - updateShow7DaysToggle(show7Days); - int usageSubtitle = show7Days + updateShow7DaysToggle(uiData.getShow7Days()); + int usageSubtitle = uiData.getShow7Days() ? R.string.permission_group_usage_subtitle_7d : R.string.permission_group_usage_subtitle_24h; @@ -282,7 +281,7 @@ public class PermissionUsageDetailsFragment extends SettingsWithLargeHeader { if (mHasSystemApps != containsSystemAppAccesses) { mHasSystemApps = containsSystemAppAccesses; } - updateShowSystemToggle(mViewModel.getShowSystem()); + updateShowSystemToggle(uiData.getShowSystem()); // Make these variables effectively final so that // we can use these captured variables in the below lambda expression diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageFragment.java index 633f18f5d..d99d531a0 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageFragment.java @@ -47,7 +47,6 @@ import com.android.permissioncontroller.permission.ui.viewmodel.v31.PermissionUs import com.android.permissioncontroller.permission.ui.viewmodel.v31.PermissionUsageViewModelFactory; import com.android.permissioncontroller.permission.ui.viewmodel.v31.PermissionUsagesUiState; import com.android.permissioncontroller.permission.utils.KotlinUtils; -import com.android.settingslib.HelpUtils; import java.util.ArrayList; import java.util.Comparator; @@ -217,8 +216,6 @@ public class PermissionUsageFragment extends SettingsWithLargeHeader { } mMenuItemsCreated = true; updateShowSystemToggle(mViewModel.getShowSystemApps()); - HelpUtils.prepareHelpMenuItem( - getActivity(), menu, R.string.help_permission_usage, getClass().getName()); } @Override @@ -318,7 +315,6 @@ public class PermissionUsageFragment extends SettingsWithLargeHeader { mSessionId, PERMISSION_USAGE_FRAGMENT_INTERACTION__ACTION__SEE_OTHER_PERMISSIONS_CLICKED); }); - boolean containsSystemAppUsages = permissionUsagesUiData.getContainsSystemAppUsage(); Map<String, Integer> permissionGroupWithUsageCounts = permissionUsagesUiData.getPermissionGroupUsageCount(); List<Map.Entry<String, Integer>> permissionGroupWithUsageCountsEntries = @@ -332,13 +328,14 @@ public class PermissionUsageFragment extends SettingsWithLargeHeader { mViewModel.getPermissionGroupLabel( context, permissionGroupWithUsageCount.getKey()))); + boolean containsSystemAppUsages = permissionUsagesUiData.getContainsSystemAppUsage(); if (mHasSystemApps != containsSystemAppUsages) { mHasSystemApps = containsSystemAppUsages; } - - boolean show7Days = mViewModel.getShow7DaysData(); + boolean show7Days = permissionUsagesUiData.getShow7Days(); + boolean showSystem = permissionUsagesUiData.getShowSystem(); updateShow7DaysToggle(show7Days); - updateShowSystemToggle(mViewModel.getShowSystemApps()); + updateShowSystemToggle(showSystem); mGraphic = new PermissionUsageGraphicPreference(context, show7Days); screen.addPreference(mGraphic); @@ -351,7 +348,8 @@ public class PermissionUsageFragment extends SettingsWithLargeHeader { getAdvancedInfoSummaryString(context, permissionGroupWithUsageCountsEntries); screen.setSummary(advancedInfoSummary); - addUIContent(context, permissionGroupWithUsageCountsEntries, category); + addUIContent(context, permissionGroupWithUsageCountsEntries, category, + showSystem, show7Days); } private CharSequence getAdvancedInfoSummaryString( @@ -404,10 +402,10 @@ public class PermissionUsageFragment extends SettingsWithLargeHeader { private void addUIContent( Context context, List<Map.Entry<String, Integer>> permissionGroupWithUsageCounts, - PreferenceCategory category) { - boolean showSystem = mViewModel.getShowSystemApps(); - boolean show7Days = mViewModel.getShow7DaysData(); - + PreferenceCategory category, + boolean showSystem, + boolean show7Days + ) { for (int i = 0; i < permissionGroupWithUsageCounts.size(); i++) { Map.Entry<String, Integer> permissionGroupWithUsageCount = permissionGroupWithUsageCounts.get(i); diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt index b2f50be0e..849ce3c8c 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt @@ -125,7 +125,9 @@ class PermissionUsageDetailsViewModel( startTime, showSystem ), - containsSystemAppUsages(allLightHistoricalPackageOpsLiveData, startTime) + containsSystemAppUsages(allLightHistoricalPackageOpsLiveData, startTime), + showSystem, + show7Days ) } @@ -571,6 +573,8 @@ class PermissionUsageDetailsViewModel( data class Success( val appPermissionAccessUiInfoList: List<AppPermissionAccessUiInfo>, val containsSystemAppUsage: Boolean, + val showSystem: Boolean, + val show7Days: Boolean, ) : PermissionUsageDetailsUiState() } 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 6808cf263..15ed88683 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 @@ -157,7 +157,12 @@ class PermissionUsageDetailsViewModelV2( ) } .sortedBy { -1 * it.accessStartTime } - return PermissionUsageDetailsUiState.Success(result, containsSystemUsages) + return PermissionUsageDetailsUiState.Success( + result, + containsSystemUsages, + showSystem, + show7Days + ) } private val emergencyLocationAttributionLabel: String by lazy { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/viewmodel/v31/PermissionUsageViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/viewmodel/v31/PermissionUsageViewModel.kt index e1be94866..c1929dd42 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/viewmodel/v31/PermissionUsageViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/viewmodel/v31/PermissionUsageViewModel.kt @@ -132,7 +132,9 @@ class PermissionUsageViewModel( } return PermissionUsagesUiState.Success( permGroupOps.any { !it.isUserSensitive }, - permissionUsageCountMap + permissionUsageCountMap, + showSystemApps, + show7DaysData ) } @@ -181,7 +183,9 @@ sealed class PermissionUsagesUiState { data class Success( val containsSystemAppUsage: Boolean, - val permissionGroupUsageCount: Map<String, Int> + val permissionGroupUsageCount: Map<String, Int>, + val showSystem: Boolean, + val show7Days: Boolean, ) : PermissionUsagesUiState() } 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 25ae74e40..c387a0b9b 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 @@ -450,6 +450,40 @@ class PermissionUsageDetailsViewModelTest { assertThat(uiState.appPermissionAccessUiInfoList.size).isEqualTo(1) } + @Test + fun verifyObserverIsNotifiedOnUserActionWhenDataIsSame() = runTest { + val accessTimeMillis = (getCurrentTime() - TimeUnit.HOURS.toMillis(2)) + val appOpEvents = + listOf( + DiscreteOpModel( + AppOpsManager.OPSTR_COARSE_LOCATION, + accessTimeMillis, + TimeUnit.MINUTES.toMillis(1) + ), + ) + + val discretePackageOps = flow { + emit( + listOf( + DiscretePackageOpsModel(testPackageName, currentUser.identifier, appOpEvents), + ) + ) + } + val underTest = + getViewModel( + LOCATION_PERMISSION_GROUP, + discretePackageOps, + ) + + val uiState = getPermissionUsageDetailsUiState(underTest) + assertThat(uiState.show7Days).isFalse() + + // perform user action + underTest.updateShow7DaysToggle(true) + val uiState2 = getPermissionUsageDetailsUiState(underTest) + assertThat(uiState2.show7Days).isTrue() + } + private fun getPermissionGroupUsageDetailsUseCase( permissionGroup: String, discreteUsageFlow: Flow<List<DiscretePackageOpsModel>>, diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageViewModelTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageViewModelTest.kt index 1356da2a6..fdd6534f5 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageViewModelTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageViewModelTest.kt @@ -216,6 +216,34 @@ class PermissionUsageViewModelTest { assertThat(permissionGroupsCount[MICROPHONE_PERMISSION_GROUP]).isEqualTo(1) } + @Test + fun verifyObserverIsNotifiedOnUserActionWhenDataIsSame() = runTest { + val timestamp = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(2) + val appOpsUsage = + listOf( + AppOpUsageModel(AppOpsManager.OPSTR_CAMERA, timestamp), + AppOpUsageModel(AppOpsManager.OPSTR_PHONE_CALL_MICROPHONE, timestamp), + ) + val appOpsUsageModels = + listOf( + PackageAppOpUsageModel(testPackageName, appOpsUsage, currentUser.identifier), + ) + val permissionUsageUseCase = getPermissionGroupUsageUseCase(appOpsUsageModels) + val permissionUsageViewModel = + getViewModel( + useCase = permissionUsageUseCase, + savedStateHandle = SavedStateHandle(mapOf("show7Days" to false)) + ) + + val uiState = getPermissionUsageUiState(permissionUsageViewModel) + assertThat(uiState.show7Days).isFalse() + + // perform user action + permissionUsageViewModel.updateShow7Days(true) + val uiState2 = getPermissionUsageUiState(permissionUsageViewModel) + assertThat(uiState2.show7Days).isTrue() + } + private fun TestScope.getViewModel( useCase: GetPermissionGroupUsageUseCase = getPermissionGroupUsageUseCase(), is7DayToggleEnabled: Boolean = false, |