Fix assistant role availability on low ram devices.
The assistant role should be available on low ram devices, just that
only assistant activities but not assistant services can be qualified.
Fixes: 137388024
Test: presubmit & manual
Change-Id: Ie84fd163fb49c0514f51ba64ba89c225dceb2e5b
(cherry picked from commit 2300b89008de4476b2e692daeade9a1729cb3077)
diff --git a/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java b/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
index a950d93..f79522e 100644
--- a/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
+++ b/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
@@ -61,8 +61,7 @@
@Override
public boolean isAvailableAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
- return !UserUtils.isWorkProfile(user, context)
- && !context.getSystemService(ActivityManager.class).isLowRamDevice();
+ return !UserUtils.isWorkProfile(user, context);
}
@Nullable
@@ -97,19 +96,22 @@
public List<String> getQualifyingPackagesAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
Context userContext = UserUtils.getUserContext(context, user);
+ ActivityManager userActivityManager = userContext.getSystemService(ActivityManager.class);
PackageManager userPackageManager = userContext.getPackageManager();
Set<String> availableAssistants = new ArraySet<>();
- List<ResolveInfo> services = userPackageManager.queryIntentServices(ASSIST_SERVICE_PROBE,
- PackageManager.GET_META_DATA | PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ if (!userActivityManager.isLowRamDevice()) {
+ List<ResolveInfo> services = userPackageManager.queryIntentServices(
+ ASSIST_SERVICE_PROBE, PackageManager.GET_META_DATA
+ | PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ int numServices = services.size();
+ for (int i = 0; i < numServices; i++) {
+ ResolveInfo service = services.get(i);
- int numServices = services.size();
- for (int i = 0; i < numServices; i++) {
- ResolveInfo service = services.get(i);
-
- if (isAssistantVoiceInteractionService(userPackageManager, service.serviceInfo)) {
- availableAssistants.add(service.serviceInfo.packageName);
+ if (isAssistantVoiceInteractionService(userPackageManager, service.serviceInfo)) {
+ availableAssistants.add(service.serviceInfo.packageName);
+ }
}
}
@@ -117,7 +119,6 @@
ASSIST_ACTIVITY_PROBE, PackageManager.MATCH_DEFAULT_ONLY
| PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
-
int numActivities = activities.size();
for (int i = 0; i < numActivities; i++) {
availableAssistants.add(activities.get(i).activityInfo.packageName);
@@ -130,31 +131,34 @@
@Override
public Boolean isPackageQualified(@NonNull Role role, @NonNull String packageName,
@NonNull Context context) {
- PackageManager pm = context.getPackageManager();
+ ActivityManager activityManager = context.getSystemService(ActivityManager.class);
+ PackageManager packageManager = context.getPackageManager();
- Intent pkgServiceProbe = new Intent(ASSIST_SERVICE_PROBE).setPackage(packageName);
- List<ResolveInfo> services = pm.queryIntentServices(pkgServiceProbe,
- PackageManager.GET_META_DATA | PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ boolean hasAssistantService = false;
+ if (!activityManager.isLowRamDevice()) {
+ Intent pkgServiceProbe = new Intent(ASSIST_SERVICE_PROBE).setPackage(packageName);
+ List<ResolveInfo> services = packageManager.queryIntentServices(pkgServiceProbe,
+ PackageManager.GET_META_DATA | PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ hasAssistantService = !services.isEmpty();
+ int numServices = services.size();
+ for (int i = 0; i < numServices; i++) {
+ ResolveInfo service = services.get(i);
- int numServices = services.size();
- for (int i = 0; i < numServices; i++) {
- ResolveInfo service = services.get(i);
-
- if (isAssistantVoiceInteractionService(pm, service.serviceInfo)) {
- return true;
+ if (isAssistantVoiceInteractionService(packageManager, service.serviceInfo)) {
+ return true;
+ }
}
}
Intent pkgActivityProbe = new Intent(ASSIST_ACTIVITY_PROBE).setPackage(packageName);
- boolean hasAssistantActivity = !pm.queryIntentActivities(pkgActivityProbe,
+ boolean hasAssistantActivity = !packageManager.queryIntentActivities(pkgActivityProbe,
PackageManager.MATCH_DEFAULT_ONLY | PackageManager.MATCH_DIRECT_BOOT_AWARE
| PackageManager.MATCH_DIRECT_BOOT_UNAWARE).isEmpty();
-
if (!hasAssistantActivity) {
Log.w(LOG_TAG, "Package " + packageName + " not qualified for " + role.getName()
- + " due to " + (services.isEmpty() ? "missing service"
- : "service without qualifying metadata") + " and missing activity");
+ + " due to " + (hasAssistantService ? "unqualified" : "missing")
+ + " service and missing activity");
}
return hasAssistantActivity;