summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author mrulhania <mrulhania@google.com> 2024-08-27 14:18:24 -0700
committer Manjeet Rulhania <mrulhania@google.com> 2024-08-27 22:23:55 +0000
commit73c754ae3575586f9548c4409b17a9c2485cd854 (patch)
treea2149fdbf4d67fa34db037fda1f18e90b6fd558b
parentdce105ffc1f9d1f47df74f1930a07d9883b54a28 (diff)
Refresh UI on user action even when permission usage data is same
UiState should have user action, so that the observed value is different even when the permission usage data is same. This allows livedata to notify observers and refresh ui. also, removing unnecessary code for help icon. Test: atest PermissionUsageViewModelTest PermissionUsageDetailsViewModelTest Fix: 362567668 Flag: EXEMPT bug fix Relnote: bug fix Change-Id: I3950a4e51b01e323cc122f63b1137d04a85d3015
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageDetailsFragment.java7
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v31/PermissionUsageFragment.java22
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModel.kt6
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/model/v31/PermissionUsageDetailsViewModelV2.kt7
-rw-r--r--PermissionController/src/com/android/permissioncontroller/permission/ui/viewmodel/v31/PermissionUsageViewModel.kt8
-rw-r--r--PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageDetailsViewModelTest.kt34
-rw-r--r--PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/permission/ui/model/PermissionUsageViewModelTest.kt28
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,