Handle PackageManager.NameNotFoundException thrown from

`PackageManager.isAppArchivable` as false

Test: AppArchiveButtonTest
Bug: 333465028
Change-Id: I4ecbdabbf3869615834eda5c3fbe489c5ad9eadb
This commit is contained in:
Mark Kim
2024-04-15 20:00:52 +00:00
parent 02f1db61d8
commit 88dc6c43c3
2 changed files with 23 additions and 5 deletions

View File

@@ -21,6 +21,7 @@ import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.pm.ApplicationInfo import android.content.pm.ApplicationInfo
import android.content.pm.PackageInstaller import android.content.pm.PackageInstaller
import android.content.pm.PackageManager
import android.os.UserHandle import android.os.UserHandle
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
@@ -87,11 +88,15 @@ class AppArchiveButton(
} }
private fun ApplicationInfo.isActionButtonEnabled(): Boolean { private fun ApplicationInfo.isActionButtonEnabled(): Boolean {
return !isArchived return try {
&& userPackageManager.isAppArchivable(packageName) (!isArchived
// We apply the same device policy for both the uninstallation and archive && userPackageManager.isAppArchivable(packageName)
// button. // We apply the same device policy for both the uninstallation and archive
&& !appButtonRepository.isUninstallBlockedByAdmin(this) // button.
&& !appButtonRepository.isUninstallBlockedByAdmin(this))
} catch (e: PackageManager.NameNotFoundException) {
false
}
} }
private fun onArchiveClicked(app: ApplicationInfo) { private fun onArchiveClicked(app: ApplicationInfo) {

View File

@@ -109,6 +109,19 @@ class AppArchiveButtonTest {
assertThat(enabledActionButton.enabled).isFalse() assertThat(enabledActionButton.enabled).isFalse()
} }
@Test
fun appArchiveButton_whenPackageIsNotFound_isDisabled() {
val app = ApplicationInfo().apply {
packageName = PACKAGE_NAME
isArchived = false
}
whenever(userPackageManager.isAppArchivable(app.packageName)).thenThrow(PackageManager.NameNotFoundException())
val actionButton = setContent(app)
assertThat(actionButton.enabled).isFalse()
}
@Test @Test
fun appArchiveButton_displaysRightTextAndIcon() { fun appArchiveButton_displaysRightTextAndIcon() {
val app = ApplicationInfo().apply { val app = ApplicationInfo().apply {