Listen to changes in unused threshold
CTS tests were failing because some classes were using a cached value
for the unused threshold, causing apps to be used when we wanted them to
be unused under test. We register a callback for when the property
changes to update the value to fix this.
Bug: 188092696
Test: atest CtsOsTestCases
Change-Id: I7dea406738d42f286436a31640a4bd626ad7d369
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/UnusedPackagesLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/UnusedPackagesLiveData.kt
index 85cbbf9..b97c275 100644
--- a/PermissionController/src/com/android/permissioncontroller/permission/data/UnusedPackagesLiveData.kt
+++ b/PermissionController/src/com/android/permissioncontroller/permission/data/UnusedPackagesLiveData.kt
@@ -17,11 +17,15 @@
package com.android.permissioncontroller.permission.data
import android.os.UserHandle
+import android.provider.DeviceConfig
+import android.provider.DeviceConfig.NAMESPACE_PERMISSIONS
import android.util.ArraySet
import android.util.Log
+import com.android.permissioncontroller.PermissionControllerApplication
import com.android.permissioncontroller.hibernation.getUnusedThresholdMs
import com.android.permissioncontroller.hibernation.isHibernationEnabled
import com.android.permissioncontroller.hibernation.lastTimePackageUsed
+import com.android.permissioncontroller.permission.utils.Utils
/**
* Gets all unused packages from an existing live data that have not been opened in a few months
@@ -37,8 +41,8 @@
private val LOG_TAG = UnusedPackagesLiveData::class.java.simpleName
- private val unusedThreshold = getUnusedThresholdMs()
- private val usageStatsLiveData = UsageStatsLiveData[unusedThreshold]
+ private var unusedThreshold = getUnusedThresholdMs()
+ private var usageStatsLiveData = UsageStatsLiveData[unusedThreshold]
init {
addSource(usageStatsLiveData) {
@@ -50,6 +54,22 @@
addSource(sourceLiveData) {
update()
}
+ DeviceConfig.addOnPropertiesChangedListener(
+ NAMESPACE_PERMISSIONS,
+ PermissionControllerApplication.get().mainExecutor,
+ { properties ->
+ for (key in properties.keyset) {
+ if (key == Utils.PROPERTY_HIBERNATION_UNUSED_THRESHOLD_MILLIS) {
+ removeSource(usageStatsLiveData)
+ unusedThreshold = getUnusedThresholdMs()
+ usageStatsLiveData = UsageStatsLiveData[unusedThreshold]
+ addSource(usageStatsLiveData) {
+ update()
+ }
+ }
+ }
+ }
+ )
}
override fun onUpdate() {