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

Commit 9fb0d53b authored by Tony Mak's avatar Tony Mak Committed by Gerrit Code Review
Browse files

Merge "Track the calling user id in SmsTracker"

parents 20312ddd 32cc74b9
Loading
Loading
Loading
Loading
+16 −8
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import static android.telephony.SmsManager.RESULT_ERROR_NULL_PDU;
import static android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF;
import static android.telephony.SmsManager.RESULT_ERROR_RADIO_OFF;


import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.PendingIntent;
@@ -980,7 +981,8 @@ public abstract class SMSDispatcher extends Handler {
        PackageInfo appInfo;
        PackageInfo appInfo;
        try {
        try {
            // XXX this is lossy- apps can share a UID
            // XXX this is lossy- apps can share a UID
            appInfo = pm.getPackageInfo(packageNames[0], PackageManager.GET_SIGNATURES);
            appInfo = pm.getPackageInfoAsUser(
                    packageNames[0], PackageManager.GET_SIGNATURES, tracker.mUserId);
        } catch (PackageManager.NameNotFoundException e) {
        } catch (PackageManager.NameNotFoundException e) {
            Rlog.e(TAG, "Can't get calling app package info: refusing to send SMS");
            Rlog.e(TAG, "Can't get calling app package info: refusing to send SMS");
            tracker.onFailed(mContext, RESULT_ERROR_GENERIC_FAILURE, 0/*errorCode*/);
            tracker.onFailed(mContext, RESULT_ERROR_GENERIC_FAILURE, 0/*errorCode*/);
@@ -1105,10 +1107,10 @@ public abstract class SMSDispatcher extends Handler {
     * @param appPackage the package name of the app requesting to send an SMS
     * @param appPackage the package name of the app requesting to send an SMS
     * @return the label for the specified app, or the package name if getApplicationInfo() fails
     * @return the label for the specified app, or the package name if getApplicationInfo() fails
     */
     */
    private CharSequence getAppLabel(String appPackage) {
    private CharSequence getAppLabel(String appPackage, @UserIdInt int userId) {
        PackageManager pm = mContext.getPackageManager();
        PackageManager pm = mContext.getPackageManager();
        try {
        try {
            ApplicationInfo appInfo = pm.getApplicationInfo(appPackage, 0);
            ApplicationInfo appInfo = pm.getApplicationInfoAsUser(appPackage, 0, userId);
            return appInfo.loadSafeLabel(pm);
            return appInfo.loadSafeLabel(pm);
        } catch (PackageManager.NameNotFoundException e) {
        } catch (PackageManager.NameNotFoundException e) {
            Rlog.e(TAG, "PackageManager Name Not Found for package " + appPackage);
            Rlog.e(TAG, "PackageManager Name Not Found for package " + appPackage);
@@ -1125,7 +1127,7 @@ public abstract class SMSDispatcher extends Handler {
            return;     // queue limit reached; error was returned to caller
            return;     // queue limit reached; error was returned to caller
        }
        }


        CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName);
        CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName, tracker.mUserId);
        Resources r = Resources.getSystem();
        Resources r = Resources.getSystem();
        Spanned messageText = Html.fromHtml(r.getString(R.string.sms_control_message, appLabel));
        Spanned messageText = Html.fromHtml(r.getString(R.string.sms_control_message, appLabel));


@@ -1161,7 +1163,7 @@ public abstract class SMSDispatcher extends Handler {
            detailsId = R.string.sms_short_code_details;
            detailsId = R.string.sms_short_code_details;
        }
        }


        CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName);
        CharSequence appLabel = getAppLabel(tracker.mAppInfo.packageName, tracker.mUserId);
        Resources r = Resources.getSystem();
        Resources r = Resources.getSystem();
        Spanned messageText = Html.fromHtml(r.getString(R.string.sms_short_code_confirm_message,
        Spanned messageText = Html.fromHtml(r.getString(R.string.sms_short_code_confirm_message,
                appLabel, tracker.mDestAddress));
                appLabel, tracker.mDestAddress));
@@ -1330,11 +1332,14 @@ public abstract class SMSDispatcher extends Handler {


        private boolean mPersistMessage;
        private boolean mPersistMessage;


        // User who sends the SMS.
        private final @UserIdInt int mUserId;

        private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
        private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
                PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format,
                PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format,
                AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri,
                AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri,
                SmsHeader smsHeader, boolean isExpectMore, String fullMessageText, int subId,
                SmsHeader smsHeader, boolean isExpectMore, String fullMessageText, int subId,
                boolean isText, boolean persistMessage) {
                boolean isText, boolean persistMessage, int userId) {
            mData = data;
            mData = data;
            mSentIntent = sentIntent;
            mSentIntent = sentIntent;
            mDeliveryIntent = deliveryIntent;
            mDeliveryIntent = deliveryIntent;
@@ -1353,6 +1358,7 @@ public abstract class SMSDispatcher extends Handler {
            mSubId = subId;
            mSubId = subId;
            mIsText = isText;
            mIsText = isText;
            mPersistMessage = persistMessage;
            mPersistMessage = persistMessage;
            mUserId = userId;
        }
        }


        /**
        /**
@@ -1566,11 +1572,13 @@ public abstract class SMSDispatcher extends Handler {
        String[] packageNames = pm.getPackagesForUid(Binder.getCallingUid());
        String[] packageNames = pm.getPackagesForUid(Binder.getCallingUid());


        // Get package info via packagemanager
        // Get package info via packagemanager
        final int userId = UserHandle.getCallingUserId();
        PackageInfo appInfo = null;
        PackageInfo appInfo = null;
        if (packageNames != null && packageNames.length > 0) {
        if (packageNames != null && packageNames.length > 0) {
            try {
            try {
                // XXX this is lossy- apps can share a UID
                // XXX this is lossy- apps can share a UID
                appInfo = pm.getPackageInfo(packageNames[0], PackageManager.GET_SIGNATURES);
                appInfo = pm.getPackageInfoAsUser(
                        packageNames[0], PackageManager.GET_SIGNATURES, userId);
            } catch (PackageManager.NameNotFoundException e) {
            } catch (PackageManager.NameNotFoundException e) {
                // error will be logged in sendRawPdu
                // error will be logged in sendRawPdu
            }
            }
@@ -1580,7 +1588,7 @@ public abstract class SMSDispatcher extends Handler {
        String destAddr = PhoneNumberUtils.extractNetworkPortion((String) data.get("destAddr"));
        String destAddr = PhoneNumberUtils.extractNetworkPortion((String) data.get("destAddr"));
        return new SmsTracker(data, sentIntent, deliveryIntent, appInfo, destAddr, format,
        return new SmsTracker(data, sentIntent, deliveryIntent, appInfo, destAddr, format,
                unsentPartCount, anyPartFailed, messageUri, smsHeader, isExpectMore,
                unsentPartCount, anyPartFailed, messageUri, smsHeader, isExpectMore,
                fullMessageText, getSubId(), isText, persistMessage);
                fullMessageText, getSubId(), isText, persistMessage, userId);
    }
    }


    protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
    protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
+2 −0
Original line number Original line Diff line number Diff line
@@ -470,5 +470,7 @@ public abstract class TelephonyTest {
    protected void setupMockPackagePermissionChecks() throws Exception {
    protected void setupMockPackagePermissionChecks() throws Exception {
        doReturn(new String[]{TAG}).when(mPackageManager).getPackagesForUid(anyInt());
        doReturn(new String[]{TAG}).when(mPackageManager).getPackagesForUid(anyInt());
        doReturn(mPackageInfo).when(mPackageManager).getPackageInfo(eq(TAG), anyInt());
        doReturn(mPackageInfo).when(mPackageManager).getPackageInfo(eq(TAG), anyInt());
        doReturn(mPackageInfo).when(mPackageManager).getPackageInfoAsUser(
                eq(TAG), anyInt(), anyInt());
    }
    }
}
}