Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 22f4624b authored by Jack Yu's avatar Jack Yu
Browse files

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: I34c4a310eb977fed944045a0a7f1cdda4fc41200
parent 98813474
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -217,3 +217,15 @@ flag {
        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
    }
}
+7 −3
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ import com.android.internal.telephony.SmsConstants.MessageClass;
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 @@ public abstract class InboundSmsHandler extends StateMachine {
                // 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);
                }
            }
        }
+9 −2
Original line number Diff line number Diff line
@@ -785,9 +785,16 @@ public class PhoneSubInfoController extends IPhoneSubInfo.Stub {
     */
    @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];
    }

    /**
+9 −3
Original line number Diff line number Diff line
@@ -224,7 +224,15 @@ public class SmsController extends ISmsImplBase {
        }
    }

    @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 @@ public class SmsController extends ISmsImplBase {
            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();
        }
        UserHandle callingUser = Binder.getCallingUserHandle();

        Rlog.d(LOG_TAG, "sendMultipartTextForSubscriber caller=" + callingPackage);
+13 −2
Original line number Diff line number Diff line
@@ -4561,6 +4561,10 @@ public class SubscriptionManagerService extends ISub.Stub {
            // 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 @@ public class SubscriptionManagerService extends ISub.Stub {
     */
    @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];
    }

    /**
Loading