Skip to content
Snippets Groups Projects
Commit 87a5ae0c authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Catch exception when loadApps()" into main

parents b40bddba e71e6695
No related branches found
No related tags found
No related merge requests found
......@@ -26,6 +26,7 @@ import android.content.pm.PackageManager
import android.content.pm.PackageManager.ApplicationInfoFlags
import android.content.pm.ResolveInfo
import android.os.SystemProperties
import android.util.Log
import com.android.internal.R
import com.android.settingslib.spaprivileged.framework.common.userManager
import kotlinx.coroutines.async
......@@ -85,19 +86,24 @@ class AppListRepositoryImpl(
userId: Int,
loadInstantApps: Boolean,
matchAnyUserForAdmin: Boolean,
): List<ApplicationInfo> = coroutineScope {
val hiddenSystemModulesDeferred = async { packageManager.getHiddenSystemModules() }
val hideWhenDisabledPackagesDeferred = async {
context.resources.getStringArray(R.array.config_hideWhenDisabled_packageNames)
}
val installedApplicationsAsUser =
getInstalledApplications(userId, matchAnyUserForAdmin)
): List<ApplicationInfo> = try {
coroutineScope {
val hiddenSystemModulesDeferred = async { packageManager.getHiddenSystemModules() }
val hideWhenDisabledPackagesDeferred = async {
context.resources.getStringArray(R.array.config_hideWhenDisabled_packageNames)
}
val installedApplicationsAsUser =
getInstalledApplications(userId, matchAnyUserForAdmin)
val hiddenSystemModules = hiddenSystemModulesDeferred.await()
val hideWhenDisabledPackages = hideWhenDisabledPackagesDeferred.await()
installedApplicationsAsUser.filter { app ->
app.isInAppList(loadInstantApps, hiddenSystemModules, hideWhenDisabledPackages)
val hiddenSystemModules = hiddenSystemModulesDeferred.await()
val hideWhenDisabledPackages = hideWhenDisabledPackagesDeferred.await()
installedApplicationsAsUser.filter { app ->
app.isInAppList(loadInstantApps, hiddenSystemModules, hideWhenDisabledPackages)
}
}
} catch (e: Exception) {
Log.e(TAG, "loadApps failed", e)
emptyList()
}
private suspend fun getInstalledApplications(
......@@ -210,6 +216,8 @@ class AppListRepositoryImpl(
}
companion object {
private const val TAG = "AppListRepository"
private fun ApplicationInfo.isInAppList(
showInstantApps: Boolean,
hiddenSystemModules: Set<String>,
......
......@@ -28,6 +28,8 @@ import android.content.pm.PackageManager.ResolveInfoFlags
import android.content.pm.ResolveInfo
import android.content.pm.UserInfo
import android.content.res.Resources
import android.os.BadParcelableException
import android.os.DeadObjectException
import android.os.UserManager
import android.platform.test.flag.junit.SetFlagsRule
import androidx.test.core.app.ApplicationProvider
......@@ -44,6 +46,7 @@ import org.mockito.kotlin.any
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.doAnswer
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.doThrow
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.spy
......@@ -310,6 +313,19 @@ class AppListRepositoryTest {
assertThat(appList).containsExactly(NORMAL_APP, HIDDEN_APEX_APP)
}
@Test
fun loadApps_hasException_returnEmptyList() = runTest {
packageManager.stub {
on {
getInstalledApplicationsAsUser(any<ApplicationInfoFlags>(), eq(ADMIN_USER_ID))
} doThrow BadParcelableException(DeadObjectException())
}
val appList = repository.loadApps(userId = ADMIN_USER_ID)
assertThat(appList).isEmpty()
}
@Test
fun showSystemPredicate_showSystem() = runTest {
val app = SYSTEM_APP
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment