Merge 25Q1 (ab/BP1A.250305.020) to AOSP main

Bug: 385190204
Merged-In: Ibc6513ba88f2de0a39661fb5d5219be2bfef7d58
Change-Id: If8ae7daed5314bac501f6b14bc14dfa3ea9ffd60
diff --git a/src/com/android/ons/OpportunisticNetworkService.java b/src/com/android/ons/OpportunisticNetworkService.java
index 3e9a52a..771a21b 100644
--- a/src/com/android/ons/OpportunisticNetworkService.java
+++ b/src/com/android/ons/OpportunisticNetworkService.java
@@ -20,6 +20,7 @@
 
 import android.annotation.NonNull;
 import android.annotation.Nullable;
+import android.app.ActivityManager;
 import android.app.Service;
 import android.app.compat.CompatChanges;
 import android.compat.Compatibility;
@@ -40,6 +41,7 @@
 import android.os.RemoteException;
 import android.os.SystemProperties;
 import android.os.TelephonyServiceManager.ServiceRegisterer;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.telephony.AvailableNetworkInfo;
 import android.telephony.CarrierConfigManager;
@@ -210,7 +212,7 @@
 
     private boolean hasOpportunisticSubPrivilege(String callingPackage, int subId) {
         return mTelephonyManager.hasCarrierPrivileges(subId)
-                || mSubscriptionManager.canManageSubscription(
+                || canManageSubscription(
                 mProfileSelector.getOpprotunisticSubInfo(subId), callingPackage);
     }
 
@@ -831,6 +833,15 @@
         }
     }
 
+    private boolean canManageSubscription(SubscriptionInfo subInfo, String packageName) {
+        if (Flags.hsumPackageManager() && UserManager.isHeadlessSystemUserMode()) {
+            return mSubscriptionManager.canManageSubscriptionAsUser(subInfo, packageName,
+                    UserHandle.of(ActivityManager.getCurrentUser()));
+        } else {
+            return mSubscriptionManager.canManageSubscription(subInfo, packageName);
+        }
+    }
+
     private void log(String msg) {
         Rlog.d(TAG, msg);
     }