diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/InstallDependencyHelper.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/pm/InstallDependencyHelper.java b/services/core/java/com/android/server/pm/InstallDependencyHelper.java index 5bd2c994160c..42b8dd71c6e2 100644 --- a/services/core/java/com/android/server/pm/InstallDependencyHelper.java +++ b/services/core/java/com/android/server/pm/InstallDependencyHelper.java @@ -21,6 +21,7 @@ import static android.content.pm.PackageManager.INSTALL_FAILED_MISSING_SHARED_LI import static android.os.Process.SYSTEM_UID; import android.annotation.NonNull; +import android.app.role.RoleManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -35,6 +36,7 @@ import android.os.Handler; import android.os.OutcomeReceiver; import android.os.Process; import android.os.RemoteException; +import android.os.UserHandle; import android.util.ArraySet; import android.util.Slog; @@ -52,6 +54,8 @@ import java.util.concurrent.TimeUnit; public class InstallDependencyHelper { private static final String TAG = InstallDependencyHelper.class.getSimpleName(); private static final boolean DEBUG = true; + private static final String ROLE_SYSTEM_DEPENDENCY_INSTALLER = + "android.app.role.SYSTEM_DEPENDENCY_INSTALLER"; // The maximum amount of time to wait before the system unbinds from the verifier. private static final long UNBIND_TIMEOUT_MILLIS = TimeUnit.HOURS.toMillis(6); private static final long REQUEST_TIMEOUT_MILLIS = TimeUnit.MINUTES.toMillis(1); @@ -154,8 +158,20 @@ public class InstallDependencyHelper { } } + RoleManager roleManager = mContext.getSystemService(RoleManager.class); + if (roleManager == null) { + Slog.w(TAG, "Cannot find RoleManager system service"); + return false; + } + List<String> holders = roleManager.getRoleHoldersAsUser( + ROLE_SYSTEM_DEPENDENCY_INSTALLER, UserHandle.of(userId)); + if (holders.isEmpty()) { + Slog.w(TAG, "No holders of ROLE_SYSTEM_DEPENDENCY_INSTALLER found"); + return false; + } + Intent serviceIntent = new Intent(ACTION_INSTALL_DEPENDENCY); - // TODO(b/372862145): Use RoleManager to find the package name + serviceIntent.setPackage(holders.getFirst()); List<ResolveInfo> resolvedIntents = snapshot.queryIntentServicesInternal( serviceIntent, /*resolvedType=*/ null, /*flags=*/0, userId, SYSTEM_UID, Process.INVALID_PID, @@ -165,7 +181,6 @@ public class InstallDependencyHelper { return false; } - ResolveInfo resolveInfo = resolvedIntents.getFirst(); ComponentName componentName = resolveInfo.getComponentInfo().getComponentName(); serviceIntent.setComponent(componentName); |