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

Commit 1d8487d0 authored by Hall Liu's avatar Hall Liu
Browse files

Fix usages of PackageManager APIs in Telephony

Remove usages of the hidden PackageManager#*asUser methods from
Telephony, and add some unit tests to verify the functionality.

Test: atest FrameworksTelephonyTests
Test: atest TelephonyCommonTests
Bug: 146834818
Change-Id: Ifc32ee29c488193c49070db11555899a93ceec0d
Merged-In: Ifc32ee29c488193c49070db11555899a93ceec0d
parent 0604c377
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -1239,15 +1239,15 @@ public abstract class SMSDispatcher extends Handler {
            }

            if (error == RESULT_ERROR_NONE) {
                PackageManager pm = mContext.getPackageManager();
                UserHandle userHandle = UserHandle.of(trackers[0].mUserId);
                PackageManager pm = mContext.createContextAsUser(userHandle, 0).getPackageManager();

                try {
                    // Get package info via packagemanager
                    appInfo =
                            pm.getPackageInfoAsUser(
                            pm.getPackageInfo(
                                    trackers[0].getAppPackageName(),
                                    PackageManager.GET_SIGNATURES,
                                    trackers[0].mUserId);
                                    PackageManager.GET_SIGNATURES);
                } catch (PackageManager.NameNotFoundException e) {
                    Rlog.e(TAG, "Can't get calling app package info: refusing to send SMS");
                    error = RESULT_ERROR_GENERIC_FAILURE;
@@ -1840,15 +1840,14 @@ public abstract class SMSDispatcher extends Handler {
            AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri,
            SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText,
            boolean persistMessage, int priority, int validityPeriod, boolean isForVvm) {
        // Get calling app package name via UID from Binder call
        PackageManager pm = mContext.getPackageManager();

        // Get package info via packagemanager
        final int userId = UserHandle.getUserHandleForUid(Binder.getCallingUid()).getIdentifier();
        UserHandle callingUser = UserHandle.getUserHandleForUid(Binder.getCallingUid());
        final int userId = callingUser.getIdentifier();
        PackageManager pm = mContext.createContextAsUser(callingUser, 0).getPackageManager();
        PackageInfo appInfo = null;
        try {
            appInfo = pm.getPackageInfoAsUser(
                    callingPackage, PackageManager.GET_SIGNATURES, userId);
            appInfo = pm.getPackageInfo(callingPackage, PackageManager.GET_SIGNATURES);
        } catch (PackageManager.NameNotFoundException e) {
            // error will be logged in sendRawPdu
        }
+2 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony;

import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doAnswer;
@@ -622,7 +623,7 @@ public class ContextFixture implements TestFixture<Context> {
        }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), any());

        try {
            doReturn(mPackageInfo).when(mPackageManager).getPackageInfoAsUser(any(), anyInt(),
            doReturn(mPackageInfo).when(mPackageManager).getPackageInfo(nullable(String.class),
                    anyInt());
        } catch (NameNotFoundException e) {
        }
+0 −2
Original line number Diff line number Diff line
@@ -711,8 +711,6 @@ public abstract class TelephonyTest {
    protected void setupMockPackagePermissionChecks() throws Exception {
        doReturn(new String[]{TAG}).when(mPackageManager).getPackagesForUid(anyInt());
        doReturn(mPackageInfo).when(mPackageManager).getPackageInfo(eq(TAG), anyInt());
        doReturn(mPackageInfo).when(mPackageManager).getPackageInfoAsUser(
                eq(TAG), anyInt(), anyInt());
    }

    protected void setupMocksForTelephonyPermissions() throws Exception {