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/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 46f20f5..c6c26b0 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -1872,9 +1872,16 @@
*/
@Nullable
private String getCurrentPackageName() {
+ if (mFeatureFlags.hsumPackageManager()) {
+ PackageManager pm = mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager();
+ if (pm == null) return null;
+ String[] callingPackageNames = pm.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
+ }
if (mPackageManager == null) return null;
- String[] callingUids = mPackageManager.getPackagesForUid(Binder.getCallingUid());
- return (callingUids == null) ? null : callingUids[0];
+ String[] callingPackageNames = mPackageManager.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
}
/**
diff --git a/src/com/android/phone/ImsRcsController.java b/src/com/android/phone/ImsRcsController.java
index 766d719..e2ae343 100644
--- a/src/com/android/phone/ImsRcsController.java
+++ b/src/com/android/phone/ImsRcsController.java
@@ -986,9 +986,16 @@
*/
@Nullable
private String getCurrentPackageName() {
+ if (mFeatureFlags.hsumPackageManager()) {
+ PackageManager pm = mApp.getBaseContext().createContextAsUser(
+ Binder.getCallingUserHandle(), 0).getPackageManager();
+ if (pm == null) return null;
+ String[] callingPackageNames = pm.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
+ }
if (mPackageManager == null) return null;
- String[] callingUids = mPackageManager.getPackagesForUid(Binder.getCallingUid());
- return (callingUids == null) ? null : callingUids[0];
+ String[] callingPackageNames = mPackageManager.getPackagesForUid(Binder.getCallingUid());
+ return (callingPackageNames == null) ? null : callingPackageNames[0];
}
/**
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 3cd9a8b..3c7b321 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -519,8 +519,14 @@
return false;
}
- List<ResolveInfo> receivers = mContext.getPackageManager()
- .queryBroadcastReceivers(intent, 0);
+ List<ResolveInfo> receivers;
+ if (mFeatureFlags.hsumPackageManager()) {
+ receivers = mContext.createContextAsUser(userHandle, 0)
+ .getPackageManager().queryBroadcastReceivers(intent, 0);
+ } else {
+ receivers = mContext.getPackageManager()
+ .queryBroadcastReceivers(intent, 0);
+ }
return receivers.size() > 0;
}
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 53ef07e..7342580 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -9606,7 +9606,15 @@
}
private WorkSource getWorkSource(int uid) {
- String packageName = mApp.getPackageManager().getNameForUid(uid);
+ PackageManager pm;
+ if (mFeatureFlags.hsumPackageManager()) {
+ pm = mApp.getBaseContext().createContextAsUser(UserHandle.getUserHandleForUid(uid), 0)
+ .getPackageManager();
+ } else {
+ pm = mApp.getPackageManager();
+ }
+
+ String packageName = pm.getNameForUid(uid);
if (UserHandle.isSameApp(uid, Process.ROOT_UID) && packageName == null) {
// Downstream WorkSource attribution inside the RIL requires both a UID and package name
// to be set for wakelock tracking, otherwise RIL requests fail with a runtime
@@ -10876,9 +10884,16 @@
*/
@Override
public @Nullable String getCurrentPackageName() {
- PackageManager pm = mApp.getPackageManager();
- String[] packageNames = pm == null ? null : pm.getPackagesForUid(Binder.getCallingUid());
- return packageNames == null ? null : packageNames[0];
+ if (mFeatureFlags.hsumPackageManager()) {
+ PackageManager pm = mApp.getBaseContext().createContextAsUser(
+ Binder.getCallingUserHandle(), 0).getPackageManager();
+ if (pm == null) return null;
+ String[] callingUids = pm.getPackagesForUid(Binder.getCallingUid());
+ return (callingUids == null) ? null : callingUids[0];
+ }
+ if (mPackageManager == null) return null;
+ String[] callingUids = mPackageManager.getPackagesForUid(Binder.getCallingUid());
+ return (callingUids == null) ? null : callingUids[0];
}
/**
@@ -10888,7 +10903,13 @@
* Note: This is for logging purposes only and should not be used for security checks.
*/
private String getCurrentPackageNameOrPhone() {
- PackageManager pm = mApp.getPackageManager();
+ PackageManager pm;
+ if (mFeatureFlags.hsumPackageManager()) {
+ pm = mApp.getBaseContext().createContextAsUser(
+ Binder.getCallingUserHandle(), 0).getPackageManager();
+ } else {
+ pm = mApp.getPackageManager();
+ }
String uidName = pm == null ? null : pm.getNameForUid(Binder.getCallingUid());
if (uidName != null && !uidName.isEmpty()) return uidName;
return getCurrentPackageName();
@@ -12564,8 +12585,13 @@
String callingProcess;
try {
- callingProcess = mApp.getPackageManager().getApplicationInfo(
- getCurrentPackageName(), 0).processName;
+ if (mFeatureFlags.hsumPackageManager()) {
+ callingProcess = mApp.getPackageManager().getApplicationInfoAsUser(
+ getCurrentPackageName(), 0, Binder.getCallingUserHandle()).processName;
+ } else {
+ callingProcess = mApp.getPackageManager().getApplicationInfo(
+ getCurrentPackageName(), 0).processName;
+ }
} catch (PackageManager.NameNotFoundException e) {
callingProcess = getCurrentPackageName();
}
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);
diff --git a/src/com/android/phone/utils/CarrierAllowListInfo.java b/src/com/android/phone/utils/CarrierAllowListInfo.java
index 3ab9733..b230a9e 100644
--- a/src/com/android/phone/utils/CarrierAllowListInfo.java
+++ b/src/com/android/phone/utils/CarrierAllowListInfo.java
@@ -21,9 +21,11 @@
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.Signature;
+import android.os.Binder;
import android.telephony.Rlog;
import android.text.TextUtils;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.uicc.IccUtils;
import org.json.JSONArray;
@@ -155,7 +157,11 @@
// package name is mandatory
return false;
}
- final PackageManager packageManager = context.getPackageManager();
+ PackageManager packageManager = context.getPackageManager();
+ if (Flags.hsumPackageManager()) {
+ packageManager = context.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager();
+ }
try {
MessageDigest sha256MDigest = MessageDigest.getInstance(MESSAGE_DIGEST_256_ALGORITHM);
final PackageInfo packageInfo = packageManager.getPackageInfo(packageName,