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

Commit 9942248d authored by Mark Kim's avatar Mark Kim
Browse files

Support fetching PackageInfo for archived apps

Test: PackageInfoPresenterTest

Bug: 304256071
Change-Id: Ia8f160c160acf41aa4f25f9d02efa4d470a56a63
parent 8557ab05
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.app.settings.SettingsEnums
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.FeatureFlags
import android.content.pm.FeatureFlagsImpl
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.UserHandle
@@ -50,6 +52,7 @@ class PackageInfoPresenter(
    val userId: Int,
    private val coroutineScope: CoroutineScope,
    private val packageManagers: IPackageManagers = PackageManagers,
    private val featureFlags: FeatureFlags = FeatureFlagsImpl(),
) {
    private val metricsFeatureProvider = featureFactory.metricsFeatureProvider
    private val userHandle = UserHandle.of(userId)
@@ -141,9 +144,10 @@ class PackageInfoPresenter(
    private fun getPackageInfo() =
        packageManagers.getPackageInfoAsUser(
            packageName = packageName,
            flags = PackageManager.MATCH_ANY_USER or
                PackageManager.MATCH_DISABLED_COMPONENTS or
                PackageManager.GET_PERMISSIONS,
            flags = PackageManager.MATCH_ANY_USER.toLong() or
                PackageManager.MATCH_DISABLED_COMPONENTS.toLong() or
                PackageManager.GET_PERMISSIONS.toLong() or
                if (featureFlags.archiving()) PackageManager.MATCH_ARCHIVED_PACKAGES else 0,
            userId = userId,
        )
}
+37 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.app.ActivityManager
import android.app.settings.SettingsEnums
import android.content.Context
import android.content.Intent
import android.content.pm.FakeFeatureFlagsImpl
import android.content.pm.Flags
import android.content.pm.PackageManager
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -155,6 +157,41 @@ class PackageInfoPresenterTest {
        verifyAction(123)
    }

    @Test
    fun reloadPackageInfo_archivingDisabled() = runTest {
        coroutineScope {
            val fakeFeatureFlags = FakeFeatureFlagsImpl()
            fakeFeatureFlags.setFlag(Flags.FLAG_ARCHIVING, false)
            val packageInfoPresenter =
                PackageInfoPresenter(context, PACKAGE_NAME, USER_ID, this, packageManagers, fakeFeatureFlags)

            packageInfoPresenter.reloadPackageInfo()
        }

        val flags = PackageManager.MATCH_ANY_USER.toLong() or
            PackageManager.MATCH_DISABLED_COMPONENTS.toLong() or
            PackageManager.GET_PERMISSIONS.toLong()
        verify(packageManagers).getPackageInfoAsUser(PACKAGE_NAME, flags, USER_ID)
    }

    @Test
    fun reloadPackageInfo_archivingEnabled() = runTest {
        coroutineScope {
            val fakeFeatureFlags = FakeFeatureFlagsImpl()
            fakeFeatureFlags.setFlag(Flags.FLAG_ARCHIVING, true)
            val packageInfoPresenter =
                PackageInfoPresenter(context, PACKAGE_NAME, USER_ID, this, packageManagers, fakeFeatureFlags)

            packageInfoPresenter.reloadPackageInfo()
        }

        val flags = PackageManager.MATCH_ANY_USER.toLong() or
            PackageManager.MATCH_DISABLED_COMPONENTS.toLong() or
            PackageManager.GET_PERMISSIONS.toLong() or
            PackageManager.MATCH_ARCHIVED_PACKAGES
        verify(packageManagers).getPackageInfoAsUser(PACKAGE_NAME, flags, USER_ID)
    }

    private fun verifyAction(category: Int) {
        verify(metricsFeatureProvider).action(context, category, PACKAGE_NAME)
    }