Check for NameNotFoundException when querying for PackageInfo
PackageManager.getPackageInfo will throw NameNotFoundException if package was/is being removed.
Test: atest FullScreenIntentPermissionPreferenceControllerTest
Bug: 296163845
Change-Id: I3242ac7e68fa7ed99fe99c7de7cd97aaf87948ee
diff --git a/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt b/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt
index 2cc26f6..4349b4c 100644
--- a/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt
+++ b/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceController.kt
@@ -21,6 +21,7 @@
import android.app.AppOpsManager.OP_USE_FULL_SCREEN_INTENT
import android.content.AttributionSource
import android.content.Context
+import android.content.pm.PackageManager.NameNotFoundException
import android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET
import android.content.pm.PackageManager.GET_PERMISSIONS
import android.os.UserHandle
@@ -79,12 +80,16 @@
}
private fun isPermissionRequested(): Boolean {
- val packageInfo = packageManager.getPackageInfo(packageName, GET_PERMISSIONS)
+ try {
+ val packageInfo = packageManager.getPackageInfo(packageName, GET_PERMISSIONS)
- for (requestedPermission in packageInfo.requestedPermissions.orEmpty()) {
- if (USE_FULL_SCREEN_INTENT.equals(requestedPermission)) {
- return true
+ for (requestedPermission in packageInfo.requestedPermissions.orEmpty()) {
+ if (USE_FULL_SCREEN_INTENT.equals(requestedPermission)) {
+ return true
+ }
}
+ } catch (exception: NameNotFoundException) {
+ Log.e(TAG, "isPermissionRequested failed: $exception")
}
return false
diff --git a/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt b/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt
index 64bb849..89e33ee 100644
--- a/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt
+++ b/tests/robotests/src/com/android/settings/notification/app/FullScreenIntentPermissionPreferenceControllerTest.kt
@@ -30,6 +30,7 @@
import android.content.pm.PackageManager
import android.content.pm.PackageManager.FLAG_PERMISSION_USER_SET
import android.content.pm.PackageManager.GET_PERMISSIONS
+import android.content.pm.PackageManager.NameNotFoundException
import android.os.UserHandle
import android.permission.PermissionManager.PERMISSION_GRANTED
import android.permission.PermissionManager.PERMISSION_HARD_DENIED
@@ -134,6 +135,14 @@
}
@Test
+ fun testIsAvailable_notWhenPackageNotFound() {
+ setPackageInfoNotFound()
+ initController()
+
+ assertFalse(controller.isAvailable)
+ }
+
+ @Test
fun testIsEnabled_notWhenDisabledByAdmin() {
setPermissionRequestedInManifest()
initController(admin = makeTestAdmin())
@@ -242,6 +251,12 @@
})
}
+ private fun setPackageInfoNotFound() {
+ whenever(packageManager.getPackageInfo(TEST_PACKAGE, GET_PERMISSIONS)).thenThrow(
+ NameNotFoundException(TEST_PACKAGE)
+ )
+ }
+
private fun setPermissionResult(@PermissionResult result: Int) {
ShadowPermissionChecker.setResult(TEST_PACKAGE, USE_FULL_SCREEN_INTENT, result)
}