Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdd60932 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Keep "None" set for assistant upon device upgrade." into qt-qpr1-dev

parents 36d39e5e 6cd5ab63
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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;
@@ -58,6 +60,20 @@ public class AssistantRoleBehavior implements RoleBehavior {
            new Intent(VoiceInteractionService.SERVICE_INTERFACE);
    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) {
+11 −0
Original line number Diff line number Diff line
@@ -253,6 +253,17 @@ public class Role {
        return mPreferredActivities;
    }

    /**
     * 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.
     *
+5 −0
Original line number Diff line number Diff line
@@ -35,6 +35,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)
     */
+8 −0
Original line number Diff line number Diff line
@@ -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++) {