Snap for 12404440 from 22f4624ba8fda729d886dc29ca37f1f2cbf01924 to 24Q4-release
Change-Id: If6cb5240f06b88a6b805f009777654c5eb6fc5da
diff --git a/flags/misc.aconfig b/flags/misc.aconfig
index 0ebaeba..860c864 100644
--- a/flags/misc.aconfig
+++ b/flags/misc.aconfig
@@ -217,3 +217,15 @@
purpose: PURPOSE_BUGFIX
}
}
+
+# OWNER=jackyu TARGET=25Q2
+flag {
+ name: "hsum_package_manager"
+ namespace: "telephony"
+ description: "Fixed the bug that package manager is not for the right user"
+ bug:"356827794"
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index c7c05bc..ca03f5d 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -75,6 +75,7 @@
import com.android.internal.telephony.analytics.TelephonyAnalytics;
import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics;
import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.Flags;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.satellite.metrics.CarrierRoamingSatelliteSessionStats;
import com.android.internal.telephony.util.NotificationChannelController;
@@ -2153,10 +2154,13 @@
// TODO(b/355049884): This is looking at sms package of the wrong user!
UserManager userManager =
(UserManager) context.getSystemService(Context.USER_SERVICE);
+ PackageManager pm = context.getPackageManager();
+ if (Flags.hsumPackageManager()) {
+ pm = context.createContextAsUser(UserHandle.CURRENT, 0).getPackageManager();
+ }
if (userManager.isUserUnlocked()) {
- context.startActivityAsUser(context.getPackageManager()
- .getLaunchIntentForPackage(Telephony.Sms.getDefaultSmsPackage(context)),
- UserHandle.CURRENT);
+ context.startActivityAsUser(pm.getLaunchIntentForPackage(
+ Telephony.Sms.getDefaultSmsPackage(context)), UserHandle.CURRENT);
}
}
}
diff --git a/src/java/com/android/internal/telephony/PhoneSubInfoController.java b/src/java/com/android/internal/telephony/PhoneSubInfoController.java
index 073e242..7ee3de2 100644
--- a/src/java/com/android/internal/telephony/PhoneSubInfoController.java
+++ b/src/java/com/android/internal/telephony/PhoneSubInfoController.java
@@ -785,9 +785,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/java/com/android/internal/telephony/SmsController.java b/src/java/com/android/internal/telephony/SmsController.java
index 1295f38..e3c409d 100644
--- a/src/java/com/android/internal/telephony/SmsController.java
+++ b/src/java/com/android/internal/telephony/SmsController.java
@@ -224,7 +224,15 @@
}
}
+ @NonNull
private String getCallingPackage() {
+ if (mFlags.hsumPackageManager()) {
+ PackageManager pm = mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager();
+ String[] packages = pm.getPackagesForUid(Binder.getCallingUid());
+ if (packages == null || packages.length == 0) return "";
+ return packages[0];
+ }
return mContext.getPackageManager().getPackagesForUid(Binder.getCallingUid())[0];
}
@@ -412,9 +420,7 @@
boolean persistMessageForNonDefaultSmsApp, long messageId) {
// This is different from the checking of other method. It prefers the package name
// returned by getCallPackage() for backward-compatibility.
- if (getCallingPackage() != null) {
- callingPackage = getCallingPackage();
- }
+ callingPackage = getCallingPackage();
UserHandle callingUser = Binder.getCallingUserHandle();
Rlog.d(LOG_TAG, "sendMultipartTextForSubscriber caller=" + callingPackage);
diff --git a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
index 87d6d27..353493b 100644
--- a/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
+++ b/src/java/com/android/internal/telephony/subscription/SubscriptionManagerService.java
@@ -4561,6 +4561,10 @@
// Too many packages running with phone uid. Just return one here.
return "com.android.phone";
}
+ if (mFeatureFlags.hsumPackageManager()) {
+ return Arrays.toString(mContext.createContextAsUser(Binder.getCallingUserHandle(), 0)
+ .getPackageManager().getPackagesForUid(Binder.getCallingUid()));
+ }
return Arrays.toString(mContext.getPackageManager().getPackagesForUid(
Binder.getCallingUid()));
}
@@ -4765,9 +4769,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/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
index dd4d63a..d80c9a2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/TelephonyTest.java
@@ -582,6 +582,7 @@
doReturn(true).when(mFeatureFlags).minimalTelephonyCdmCheck();
doReturn(true).when(mFeatureFlags).supportNetworkProvider();
doReturn(true).when(mFeatureFlags).hsumBroadcast();
+ doReturn(true).when(mFeatureFlags).hsumPackageManager();
TelephonyManager.disableServiceHandleCaching();
PropertyInvalidatedCache.disableForTestMode();