Fixed get packages for HSUM devices

On HSUM devices, packages installed on secondary users can't
be retrieved by the system users' package manager. Fixed by
using corresponding user's package manager.

Fix: 356827794
Fix: 362253919
Test: Basic telephony functionality tests
Test: atest FrameworksTelephonyTests TeleServicesTests
Flag: com.android.internal.telephony.flags.hsum_broadcast

Change-Id: Ic8c973caac761882481a6b2be319f41497012095
diff --git a/src/com/android/phone/SimPhonebookProvider.java b/src/com/android/phone/SimPhonebookProvider.java
index 3917d83..d912389 100644
--- a/src/com/android/phone/SimPhonebookProvider.java
+++ b/src/com/android/phone/SimPhonebookProvider.java
@@ -30,6 +30,7 @@
 import android.database.Cursor;
 import android.database.MatrixCursor;
 import android.net.Uri;
+import android.os.Binder;
 import android.os.Bundle;
 import android.os.CancellationSignal;
 import android.os.RemoteException;
@@ -677,8 +678,14 @@
         String callingPackage = getCallingPackage();
         int granted = PackageManager.PERMISSION_DENIED;
         if (callingPackage != null) {
-            granted = getContext().getPackageManager().checkPermission(
-                    Manifest.permission.MODIFY_PHONE_STATE, callingPackage);
+            if (Flags.hsumPackageManager()) {
+                granted = getContext().createContextAsUser(Binder.getCallingUserHandle(), 0)
+                        .getPackageManager().checkPermission(
+                                Manifest.permission.MODIFY_PHONE_STATE, callingPackage);
+            } else {
+                granted = getContext().getPackageManager().checkPermission(
+                        Manifest.permission.MODIFY_PHONE_STATE, callingPackage);
+            }
         }
         return granted == PackageManager.PERMISSION_GRANTED
                 || telephonyManager.hasCarrierPrivileges(args.subscriptionId);