diff --git a/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java b/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
index f79522e..bd08349 100644
--- a/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
+++ b/src/com/android/packageinstaller/role/model/AssistantRoleBehavior.java
@@ -18,6 +18,7 @@
 
 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.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 @@
     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 e3332db..281e964 100644
--- a/src/com/android/packageinstaller/role/model/Role.java
+++ b/src/com/android/packageinstaller/role/model/Role.java
@@ -254,6 +254,17 @@
     }
 
     /**
+     * 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 41ffb45..a43d7ad 100644
--- a/src/com/android/packageinstaller/role/model/RoleBehavior.java
+++ b/src/com/android/packageinstaller/role/model/RoleBehavior.java
@@ -36,6 +36,11 @@
 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 bee4320..d45d6bb 100644
--- a/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java
+++ b/src/com/android/packageinstaller/role/service/RoleControllerServiceImpl.java
@@ -89,6 +89,14 @@
         // 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++) {
