Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -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,7 +86,8 @@ class AppListRepositoryImpl(
        userId: Int,
        loadInstantApps: Boolean,
        matchAnyUserForAdmin: Boolean,
    ): List<ApplicationInfo> = coroutineScope {
    ): List<ApplicationInfo> = try {
        coroutineScope {
            val hiddenSystemModulesDeferred = async { packageManager.getHiddenSystemModules() }
            val hideWhenDisabledPackagesDeferred = async {
                context.resources.getStringArray(R.array.config_hideWhenDisabled_packageNames)
@@ -99,6 +101,10 @@ class AppListRepositoryImpl(
                app.isInAppList(loadInstantApps, hiddenSystemModules, hideWhenDisabledPackages)
            }
        }
    } catch (e: Exception) {
        Log.e(TAG, "loadApps failed", e)
        emptyList()
    }

    private suspend fun getInstalledApplications(
        userId: Int,
@@ -210,6 +216,8 @@ class AppListRepositoryImpl(
    }

    companion object {
        private const val TAG = "AppListRepository"

        private fun ApplicationInfo.isInAppList(
            showInstantApps: Boolean,
            hiddenSystemModules: Set<String>,
+16 −0
Original line number Diff line number Diff line
@@ -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