Prune UsageStats data belonging to uninstalled packages.
Add a per-user job to prune any usage stats data which belongs to a recently removed package. This job will be scheduled when a package is removed and it will be executed when the device is considered to be idle. The jobs are persisted by job scheduler and they are also removed when a user is removed since all usage stats data is deleted on user removal. When executed, the job reads all of the stats on disk and removes those that belong to removed packages (packages which don't have a token mapping). If no data is ommitted on read, a write is not performed. If the user is in a locked state when the job is executed, the job will keep getting rescheduled until a sucessful pruning of the data. Additionally, add logic to prune any obsolete usage stats data on a database upgrade, pruning all data belonging to packages which have been uninstalled. This ensures that all data in UsageStats in R belongs to packages that are currently installed or to packages whose DONT_DELETE_DATA flag was set when uninstalling. Also remove the clean-up mappings step on boot. That was added as a safety measure to ensure the mappings file is always updated. However, with the logic to prune on upgrade and on package uninstalls, that step is now unnecessary. This CL also refactors how the UserUsageStatsService is fetched and initialized within UsageStatsService. This is to ensure there is no lock contention when the user service is initialized and it also makes way for other refactorings in the future related to the user service initialization. Bug: 143889121 Test: atest UsageStatsDatabaseTest Test: atest android.app.usage.cts.UsageStatsTest Change-Id: If475fc018a930d0956b85a64b4e34e2c75b2476f
Loading
Please register or sign in to comment