summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHai Zhang <zhanghai@google.com>2019-09-23 15:19:06 -0700
committerHai Zhang <zhanghai@google.com>2019-10-01 22:52:18 +0000
commit6cd5ab63e01fc34cc31a66dd58bf432f7037e77a (patch)
tree77df066f761a285035e8de5d0de4b817049c9e85
parent1189512b64f1992b69634d715ac62a280ac55314 (diff)
downloadandroid_packages_apps_PackageInstaller-6cd5ab63e01fc34cc31a66dd58bf432f7037e77a.tar.gz
android_packages_apps_PackageInstaller-6cd5ab63e01fc34cc31a66dd58bf432f7037e77a.tar.bz2
android_packages_apps_PackageInstaller-6cd5ab63e01fc34cc31a66dd58bf432f7037e77a.zip
Keep "None" set for assistant upon device upgrade.
If the assistant role is added for the first time, the device is upgrading, and legacy role resolution didn't set any holder, it implies the user selected "None" for assistant, and we need to keep that in our new implementation. Fixes: 141255935 Test: manual Test: Upgrade P => Q without this CL and "None" assistant is lost Test: Upgrade P => Q with this CL and "None" assistant is kept Test: Fresh Q with this CL gets the default assistant set Change-Id: Ie2668d29c43751686dbe9523bcc298b73618fc91 (cherry picked from commit 2055184476e39e013219924616fc3d9b002ad494)
-rw-r--r--src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java16
-rw-r--r--src/com/android/packageinstaller/role/model/Role.java11
-rw-r--r--src/com/android/packageinstaller/role/model/RoleBehavior.java5
-rw-r--r--src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java8
4 files changed, 40 insertions, 0 deletions
diff --git a/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java b/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
index f79522ea..bd08349e 100644
--- a/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
+++ b/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
@@ -18,6 +18,7 @@ package com.android.packageinstaller.role.model;
import android.app.ActivityManager;
import android.app.Application;
+import android.app.role.RoleManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -25,6 +26,7 @@ import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
+import android.os.Process;
import android.os.UserHandle;
import android.provider.Settings;
import android.service.voice.VoiceInteractionService;
@@ -59,6 +61,20 @@ public class AssistantRoleBehavior implements RoleBehavior {
private static final Intent ASSIST_ACTIVITY_PROBE = new Intent(Intent.ACTION_ASSIST);
@Override
+ public void onRoleAdded(@NonNull Role role, @NonNull Context context) {
+ PackageManager packageManager = context.getPackageManager();
+ if (packageManager.isDeviceUpgrading()) {
+ RoleManager roleManager = context.getSystemService(RoleManager.class);
+ List<String> packageNames = roleManager.getRoleHolders(role.getName());
+ if (packageNames.isEmpty()) {
+ // If the device was upgraded, and there isn't any legacy role holders, it means
+ // user selected "None" in Settings and we need to keep that.
+ role.onNoneHolderSelectedAsUser(Process.myUserHandle(), context);
+ }
+ }
+ }
+
+ @Override
public boolean isAvailableAsUser(@NonNull Role role, @NonNull UserHandle user,
@NonNull Context context) {
return !UserUtils.isWorkProfile(user, context);
diff --git a/src/com/android/packageinstaller/role/model/Role.java b/src/com/android/packageinstaller/role/model/Role.java
index e3332db0..281e964a 100644
--- a/src/com/android/packageinstaller/role/model/Role.java
+++ b/src/com/android/packageinstaller/role/model/Role.java
@@ -254,6 +254,17 @@ public class Role {
}
/**
+ * Callback when this role is added to the system for the first time.
+ *
+ * @param context the {@code Context} to retrieve system services
+ */
+ public void onRoleAdded(@NonNull Context context) {
+ if (mBehavior != null) {
+ mBehavior.onRoleAdded(this, context);
+ }
+ }
+
+ /**
* Check whether this role is available.
*
* @param user the user to check for
diff --git a/src/com/android/packageinstaller/role/model/RoleBehavior.java b/src/com/android/packageinstaller/role/model/RoleBehavior.java
index 41ffb455..a43d7ad5 100644
--- a/src/com/android/packageinstaller/role/model/RoleBehavior.java
+++ b/src/com/android/packageinstaller/role/model/RoleBehavior.java
@@ -36,6 +36,11 @@ import java.util.List;
public interface RoleBehavior {
/**
+ * @see Role#onRoleAdded(Context)
+ */
+ default void onRoleAdded(@NonNull Role role, @NonNull Context context) {}
+
+ /**
* @see Role#isAvailableAsUser(UserHandle, Context)
*/
default boolean isAvailableAsUser(@NonNull Role role, @NonNull UserHandle user,
diff --git a/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java b/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java
index bee43205..d45d6bb3 100644
--- a/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java
+++ b/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java
@@ -89,6 +89,14 @@ public class RoleControllerServiceImpl extends RoleControllerService {
// Set the available role names in RoleManager.
mRoleManager.setRoleNamesFromController(roleNames);
+ int addedRoleNamesSize = addedRoleNames.size();
+ for (int i = 0; i < addedRoleNamesSize; i++) {
+ String roleName = addedRoleNames.valueAt(i);
+
+ Role role = roleMap.get(roleName);
+ role.onRoleAdded(this);
+ }
+
// Go through the holders of all roles.
int rolesSize = roles.size();
for (int rolesIndex = 0; rolesIndex < rolesSize; rolesIndex++) {