diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2019-10-26 23:01:57 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2019-10-26 23:01:57 +0000 |
commit | cd0889648df1c6810f5769dd98b764a024cb7d9c (patch) | |
tree | 2bb095c749581b09800c1ef9e374cc5fba24df6d | |
parent | c5fa59dd48eebcfe5419f117f6fdaef72daac83c (diff) | |
parent | ea47782c915259d5ea0aa9063ce67d3a5439b891 (diff) | |
download | android_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
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); } |