diff options
Diffstat (limited to 'PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt')
-rw-r--r-- | PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt | 92 |
1 files changed, 53 insertions, 39 deletions
diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt index 27681cd90..e657a6869 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/LightPackageInfoLiveData.kt @@ -37,11 +37,13 @@ import kotlinx.coroutines.Job * @param packageName The name of the package this LiveData will watch for mode changes for * @param user The user for whom the packageInfo will be defined */ -class LightPackageInfoLiveData private constructor( +class LightPackageInfoLiveData +private constructor( private val app: Application, private val packageName: String, private val user: UserHandle -) : SmartAsyncMediatorLiveData<LightPackageInfo?>(alwaysUpdateOnActive = false), +) : + SmartAsyncMediatorLiveData<LightPackageInfo?>(alwaysUpdateOnActive = false), PackageBroadcastReceiver.PackageBroadcastListener, PermissionListenerMultiplexer.PermissionChangeCallback { @@ -49,13 +51,9 @@ class LightPackageInfoLiveData private constructor( private val userPackagesLiveData = UserPackageInfosLiveData[user] private var uid: Int? = null - /** - * The currently registered UID on which this LiveData is listening for permission changes. - */ + /** The currently registered UID on which this LiveData is listening for permission changes. */ private var registeredUid: Int? = null - /** - * Whether or not this package livedata is watching the UserPackageInfosLiveData - */ + /** Whether or not this package livedata is watching the UserPackageInfosLiveData */ private var watchingUserPackagesLiveData: Boolean = false /** @@ -73,8 +71,11 @@ class LightPackageInfoLiveData private constructor( uid = packageInfo.uid if (hasActiveObservers()) { - PermissionListenerMultiplexer.addOrReplaceCallback(registeredUid, - packageInfo.uid, this) + PermissionListenerMultiplexer.addOrReplaceCallback( + registeredUid, + packageInfo.uid, + this + ) registeredUid = uid } } @@ -95,30 +96,37 @@ class LightPackageInfoLiveData private constructor( if (job.isCancelled) { return } - postValue(try { - var flags = PackageManager.GET_PERMISSIONS - if (SdkLevel.isAtLeastS()) { - flags = flags or PackageManager.GET_ATTRIBUTIONS - } + postValue( + try { + var flags = PackageManager.GET_PERMISSIONS + if (SdkLevel.isAtLeastS()) { + flags = flags or PackageManager.GET_ATTRIBUTIONS + } - LightPackageInfo(Utils.getUserContext(app, user).packageManager - .getPackageInfo(packageName, flags)) - } catch (e: Exception) { - if (e is PackageManager.NameNotFoundException) { - Log.w(LOG_TAG, "Package \"$packageName\" not found for user $user") - } else { - val profiles = app.getSystemService(UserManager::class.java)!!.userProfiles - Log.e(LOG_TAG, "Failed to create context for user $user. " + - "User exists : ${user in profiles }", e) + LightPackageInfo( + Utils.getUserContext(app, user) + .packageManager + .getPackageInfo(packageName, flags) + ) + } catch (e: Exception) { + if (e is PackageManager.NameNotFoundException) { + Log.w(LOG_TAG, "Package \"$packageName\" not found for user $user") + } else { + val profiles = app.getSystemService(UserManager::class.java)!!.userProfiles + Log.e( + LOG_TAG, + "Failed to create context for user $user. " + + "User exists : ${user in profiles }", + e + ) + } + invalidateSingle(packageName to user) + null } - invalidateSingle(packageName to user) - null - }) + ) } - /** - * Callback from the PermissionListener. Either deletes or generates package data. - */ + /** Callback from the PermissionListener. Either deletes or generates package data. */ override fun onPermissionChange() { updateAsync() } @@ -131,8 +139,11 @@ class LightPackageInfoLiveData private constructor( registeredUid = uid PermissionListenerMultiplexer.addCallback(it, this) } - if (userPackagesLiveData.hasActiveObservers() && !watchingUserPackagesLiveData && - !userPackagesLiveData.permChangeStale) { + if ( + userPackagesLiveData.hasActiveObservers() && + !watchingUserPackagesLiveData && + !userPackagesLiveData.permChangeStale + ) { watchingUserPackagesLiveData = true addSource(userPackagesLiveData, userPackageInfosObserver) } else { @@ -140,9 +151,8 @@ class LightPackageInfoLiveData private constructor( } } - private val userPackageInfosObserver = Observer<List<LightPackageInfo>> { - updateFromUserPackageInfosLiveData() - } + private val userPackageInfosObserver = + Observer<List<LightPackageInfo>> { updateFromUserPackageInfosLiveData() } @MainThread private fun updateFromUserPackageInfosLiveData() { @@ -183,14 +193,18 @@ class LightPackageInfoLiveData private constructor( /** * Repository for LightPackageInfoLiveDatas + * * <p> Key value is a string package name and UserHandle pair, value is its corresponding * LiveData. */ - companion object : DataRepositoryForPackage<Pair<String, UserHandle>, - LightPackageInfoLiveData>() { + companion object : + DataRepositoryForPackage<Pair<String, UserHandle>, LightPackageInfoLiveData>() { override fun newValue(key: Pair<String, UserHandle>): LightPackageInfoLiveData { - return LightPackageInfoLiveData(PermissionControllerApplication.get(), - key.first, key.second) + return LightPackageInfoLiveData( + PermissionControllerApplication.get(), + key.first, + key.second + ) } } } |