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.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,
)
}

View File

@@ -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)
}