summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-10-26 23:01:57 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-10-26 23:01:57 +0000
commitcd0889648df1c6810f5769dd98b764a024cb7d9c (patch)
tree2bb095c749581b09800c1ef9e374cc5fba24df6d
parentc5fa59dd48eebcfe5419f117f6fdaef72daac83c (diff)
parentea47782c915259d5ea0aa9063ce67d3a5439b891 (diff)
downloadandroid_packages_apps_PackageInstaller-cd0889648df1c6810f5769dd98b764a024cb7d9c.tar.gz
android_packages_apps_PackageInstaller-cd0889648df1c6810f5769dd98b764a024cb7d9c.tar.bz2
android_packages_apps_PackageInstaller-cd0889648df1c6810f5769dd98b764a024cb7d9c.zip
Snap for 5968679 from ea47782c915259d5ea0aa9063ce67d3a5439b891 to qt-qpr2-release
Change-Id: If2e22da7d7b94d85dd21e0839255c5cb1a4ea472
-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
-rw-r--r--src/com/android/packageinstaller/role/ui/RequestRoleFragment.java13
5 files changed, 50 insertions, 3 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++) {
diff --git a/src/com/android/packageinstaller/role/ui/RequestRoleFragment.java b/src/com/android/packageinstaller/role/ui/RequestRoleFragment.java
index 7991a2fb..d4a09bc5 100644
--- a/src/com/android/packageinstaller/role/ui/RequestRoleFragment.java
+++ b/src/com/android/packageinstaller/role/ui/RequestRoleFragment.java
@@ -226,7 +226,7 @@ public class RequestRoleFragment extends DialogFragment {
// Postponed to onStart() so that the list view in dialog is created.
mViewModel = ViewModelProviders.of(this, new RequestRoleViewModel.Factory(mRole,
requireActivity().getApplication())).get(RequestRoleViewModel.class);
- mViewModel.getRoleLiveData().observe(this, mAdapter::replace);
+ mViewModel.getRoleLiveData().observe(this, this::onRoleDataChanged);
mViewModel.getManageRoleHolderStateLiveData().observe(this,
this::onManageRoleHolderStateChanged);
}
@@ -262,6 +262,12 @@ public class RequestRoleFragment extends DialogFragment {
setDeniedOnceAndFinish();
}
+ private void onRoleDataChanged(
+ @NonNull List<Pair<ApplicationInfo, Boolean>> qualifyingApplications) {
+ mAdapter.replace(qualifyingApplications);
+ updateUi();
+ }
+
private void onItemClicked(int position) {
mAdapter.onItemClicked(position);
updateUi();
@@ -344,8 +350,9 @@ public class RequestRoleFragment extends DialogFragment {
boolean dontAskAgain = mDontAskAgainCheck != null && mDontAskAgainCheck.isChecked();
mAdapter.setDontAskAgain(dontAskAgain);
AlertDialog dialog = getDialog();
- dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(enabled && (dontAskAgain
- || !mAdapter.isHolderApplicationChecked()));
+ boolean hasRoleData = mViewModel.getRoleLiveData().getValue() != null;
+ dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(enabled && hasRoleData
+ && (dontAskAgain || !mAdapter.isHolderApplicationChecked()));
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(enabled);
}