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() {