Merge "Support fetching PackageInfo for archived apps" into main
This commit is contained in:
@@ -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,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user