Merge "Support fetching PackageInfo for archived apps" into main

This commit is contained in:
Mark Kim
2023-10-31 12:08:00 +00:00
committed by Android (Google) Code Review
2 changed files with 44 additions and 3 deletions

View File

@@ -20,6 +20,8 @@ import android.app.settings.SettingsEnums
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.IntentFilter import android.content.IntentFilter
import android.content.pm.FeatureFlags
import android.content.pm.FeatureFlagsImpl
import android.content.pm.PackageInfo import android.content.pm.PackageInfo
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.UserHandle import android.os.UserHandle
@@ -50,6 +52,7 @@ class PackageInfoPresenter(
val userId: Int, val userId: Int,
private val coroutineScope: CoroutineScope, private val coroutineScope: CoroutineScope,
private val packageManagers: IPackageManagers = PackageManagers, private val packageManagers: IPackageManagers = PackageManagers,
private val featureFlags: FeatureFlags = FeatureFlagsImpl(),
) { ) {
private val metricsFeatureProvider = featureFactory.metricsFeatureProvider private val metricsFeatureProvider = featureFactory.metricsFeatureProvider
private val userHandle = UserHandle.of(userId) private val userHandle = UserHandle.of(userId)
@@ -141,9 +144,10 @@ class PackageInfoPresenter(
private fun getPackageInfo() = private fun getPackageInfo() =
packageManagers.getPackageInfoAsUser( packageManagers.getPackageInfoAsUser(
packageName = packageName, packageName = packageName,
flags = PackageManager.MATCH_ANY_USER or flags = PackageManager.MATCH_ANY_USER.toLong() or
PackageManager.MATCH_DISABLED_COMPONENTS or PackageManager.MATCH_DISABLED_COMPONENTS.toLong() or
PackageManager.GET_PERMISSIONS, PackageManager.GET_PERMISSIONS.toLong() or
if (featureFlags.archiving()) PackageManager.MATCH_ARCHIVED_PACKAGES else 0,
userId = userId, userId = userId,
) )
} }

View File

@@ -20,6 +20,8 @@ import android.app.ActivityManager
import android.app.settings.SettingsEnums import android.app.settings.SettingsEnums
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.FakeFeatureFlagsImpl
import android.content.pm.Flags
import android.content.pm.PackageManager import android.content.pm.PackageManager
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -155,6 +157,41 @@ class PackageInfoPresenterTest {
verifyAction(123) 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) { private fun verifyAction(category: Int) {
verify(metricsFeatureProvider).action(context, category, PACKAGE_NAME) verify(metricsFeatureProvider).action(context, category, PACKAGE_NAME)
} }