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

Commit bdadf10d authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Use the package name passed through aidl."

parents 67a9c7e9 ccad285f
Loading
Loading
Loading
Loading
+8 −5
Original line number Original line Diff line number Diff line
@@ -335,7 +335,8 @@ public class IccSmsInterfaceManager {
            returnUnspecifiedFailure(sentIntent);
            returnUnspecifiedFailure(sentIntent);
            return;
            return;
        }
        }
        sendDataInternal(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
        sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent,
                deliveryIntent);
    }
    }


    /**
    /**
@@ -348,12 +349,14 @@ public class IccSmsInterfaceManager {
            returnUnspecifiedFailure(sentIntent);
            returnUnspecifiedFailure(sentIntent);
            return;
            return;
        }
        }
        sendDataInternal(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
        sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent,
                deliveryIntent);
    }
    }


    /**
    /**
     * Send a data based SMS to a specific application port.
     * Send a data based SMS to a specific application port.
     *
     *
     * @param callingPackage the package name of the calling app
     * @param destAddr the address to send the message to
     * @param destAddr the address to send the message to
     * @param scAddr is the service center address or null to use
     * @param scAddr is the service center address or null to use
     *  the current default SMSC
     *  the current default SMSC
@@ -377,7 +380,7 @@ public class IccSmsInterfaceManager {
     *  raw pdu of the status report is in the extended data ("pdu").
     *  raw pdu of the status report is in the extended data ("pdu").
     */
     */


    private void sendDataInternal(String destAddr, String scAddr,
    private void sendDataInternal(String callingPackage, String destAddr, String scAddr,
            int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
            int destPort, byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
        if (Rlog.isLoggable("SMS", Log.VERBOSE)) {
        if (Rlog.isLoggable("SMS", Log.VERBOSE)) {
            log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" +
            log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" +
@@ -385,8 +388,8 @@ public class IccSmsInterfaceManager {
                sentIntent + " deliveryIntent=" + deliveryIntent);
                sentIntent + " deliveryIntent=" + deliveryIntent);
        }
        }
        destAddr = filterDestAddress(destAddr);
        destAddr = filterDestAddress(destAddr);
        mDispatchersController.sendData(destAddr, scAddr, destPort, data, sentIntent,
        mDispatchersController.sendData(callingPackage, destAddr, scAddr, destPort, data,
                deliveryIntent);
                sentIntent, deliveryIntent);
    }
    }


    /**
    /**
+39 −51
Original line number Original line Diff line number Diff line
@@ -61,8 +61,8 @@ import android.provider.Telephony.Sms;
import android.service.carrier.CarrierMessagingService;
import android.service.carrier.CarrierMessagingService;
import android.service.carrier.ICarrierMessagingCallback;
import android.service.carrier.ICarrierMessagingCallback;
import android.service.carrier.ICarrierMessagingService;
import android.service.carrier.ICarrierMessagingService;
import android.telephony.CarrierMessagingServiceManager;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierMessagingServiceManager;
import android.telephony.PhoneNumberUtils;
import android.telephony.PhoneNumberUtils;
import android.telephony.Rlog;
import android.telephony.Rlog;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
@@ -754,6 +754,7 @@ public abstract class SMSDispatcher extends Handler {
    /**
    /**
     * Send a data based SMS to a specific application port.
     * Send a data based SMS to a specific application port.
     *
     *
     * @param callingPackage the package name of the calling app
     * @param destAddr the address to send the message to
     * @param destAddr the address to send the message to
     * @param scAddr is the service center address or null to use
     * @param scAddr is the service center address or null to use
     *  the current default SMSC
     *  the current default SMSC
@@ -777,14 +778,14 @@ public abstract class SMSDispatcher extends Handler {
     *  broadcast when the message is delivered to the recipient.  The
     *  broadcast when the message is delivered to the recipient.  The
     *  raw pdu of the status report is in the extended data ("pdu").
     *  raw pdu of the status report is in the extended data ("pdu").
     */
     */
    protected void sendData(String destAddr, String scAddr, int destPort,
    protected void sendData(String callingPackage, String destAddr, String scAddr, int destPort,
            byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
            byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
        SmsMessageBase.SubmitPduBase pdu = getSubmitPdu(
        SmsMessageBase.SubmitPduBase pdu = getSubmitPdu(
                scAddr, destAddr, destPort, data, (deliveryIntent != null));
                scAddr, destAddr, destPort, data, (deliveryIntent != null));
        if (pdu != null) {
        if (pdu != null) {
            HashMap map = getSmsTrackerMap(destAddr, scAddr, destPort, data, pdu);
            HashMap map = getSmsTrackerMap(destAddr, scAddr, destPort, data, pdu);
            SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent, getFormat(),
            SmsTracker tracker = getSmsTracker(callingPackage, map, sentIntent, deliveryIntent,
                    null /*messageUri*/, false /*expectMore*/,
                    getFormat(), null /*messageUri*/, false /*expectMore*/,
                    null /*fullMessageText*/, false /*isText*/,
                    null /*fullMessageText*/, false /*isText*/,
                    true /*persistMessage*/);
                    true /*persistMessage*/);


@@ -851,8 +852,8 @@ public abstract class SMSDispatcher extends Handler {
                scAddr, destAddr, text, (deliveryIntent != null), null, priority, validityPeriod);
                scAddr, destAddr, text, (deliveryIntent != null), null, priority, validityPeriod);
        if (pdu != null) {
        if (pdu != null) {
            HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu);
            HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu);
            SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent, getFormat(),
            SmsTracker tracker = getSmsTracker(callingPkg, map, sentIntent, deliveryIntent,
                    messageUri, expectMore, text, true /*isText*/,
                    getFormat(), messageUri, expectMore, text, true /*isText*/,
                    persistMessage, priority, validityPeriod);
                    persistMessage, priority, validityPeriod);


            if (!sendSmsByCarrierApp(false /* isDataSms */, tracker)) {
            if (!sendSmsByCarrierApp(false /* isDataSms */, tracker)) {
@@ -1027,8 +1028,8 @@ public abstract class SMSDispatcher extends Handler {
            }
            }


            trackers[i] =
            trackers[i] =
                getNewSubmitPduTracker(destAddr, scAddr, parts.get(i), smsHeader, encoding,
                getNewSubmitPduTracker(callingPkg, destAddr, scAddr, parts.get(i), smsHeader,
                        sentIntent, deliveryIntent, (i == (msgCount - 1)),
                        encoding, sentIntent, deliveryIntent, (i == (msgCount - 1)),
                        unsentPartCount, anyPartFailed, messageUri,
                        unsentPartCount, anyPartFailed, messageUri,
                        fullMessageText, priority, expectMore, validityPeriod);
                        fullMessageText, priority, expectMore, validityPeriod);
            if (trackers[i] == null) {
            if (trackers[i] == null) {
@@ -1055,8 +1056,8 @@ public abstract class SMSDispatcher extends Handler {
    /**
    /**
     * Create a new SubmitPdu and return the SMS tracker.
     * Create a new SubmitPdu and return the SMS tracker.
     */
     */
    private SmsTracker getNewSubmitPduTracker(String destinationAddress, String scAddress,
    private SmsTracker getNewSubmitPduTracker(String callingPackage, String destinationAddress,
            String message, SmsHeader smsHeader, int encoding,
            String scAddress, String message, SmsHeader smsHeader, int encoding,
            PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart,
            PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart,
            AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri,
            AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri,
            String fullMessageText, int priority, boolean expectMore, int validityPeriod) {
            String fullMessageText, int priority, boolean expectMore, int validityPeriod) {
@@ -1085,7 +1086,7 @@ public abstract class SMSDispatcher extends Handler {
            if (submitPdu != null) {
            if (submitPdu != null) {
                HashMap map = getSmsTrackerMap(destinationAddress, scAddress,
                HashMap map = getSmsTrackerMap(destinationAddress, scAddress,
                        message, submitPdu);
                        message, submitPdu);
                return getSmsTracker(map, sentIntent, deliveryIntent,
                return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent,
                        getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader,
                        getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader,
                        (!lastPart || expectMore), fullMessageText, true /*isText*/,
                        (!lastPart || expectMore), fullMessageText, true /*isText*/,
                        true /*persistMessage*/, priority, validityPeriod);
                        true /*persistMessage*/, priority, validityPeriod);
@@ -1103,7 +1104,7 @@ public abstract class SMSDispatcher extends Handler {
            if (pdu != null) {
            if (pdu != null) {
                HashMap map =  getSmsTrackerMap(destinationAddress, scAddress,
                HashMap map =  getSmsTrackerMap(destinationAddress, scAddress,
                        message, pdu);
                        message, pdu);
                return getSmsTracker(map, sentIntent,
                return getSmsTracker(callingPackage, map, sentIntent,
                        deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri,
                        deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri,
                        smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/,
                        smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/,
                        false /*persistMessage*/, priority, validityPeriod);
                        false /*persistMessage*/, priority, validityPeriod);
@@ -1154,23 +1155,14 @@ public abstract class SMSDispatcher extends Handler {
            return;
            return;
        }
        }


        // Get calling app package name via UID from Binder call
        String packageName = tracker.getAppPackageName();
        PackageManager pm = mContext.getPackageManager();
        PackageManager pm = mContext.getPackageManager();
        String[] packageNames = pm.getPackagesForUid(Binder.getCallingUid());

        if (packageNames == null || packageNames.length == 0) {
            // Refuse to send SMS if we can't get the calling package name.
            Rlog.e(TAG, "Can't get calling app package name: refusing to send SMS");
            tracker.onFailed(mContext, RESULT_ERROR_GENERIC_FAILURE, 0/*errorCode*/);
            return;
        }


        // Get package info via packagemanager
        // Get package info via packagemanager
        PackageInfo appInfo;
        PackageInfo appInfo;
        try {
        try {
            // XXX this is lossy- apps can share a UID
            appInfo = pm.getPackageInfoAsUser(
            appInfo = pm.getPackageInfoAsUser(
                    packageNames[0], PackageManager.GET_SIGNATURES, tracker.mUserId);
                    packageName, 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*/);
@@ -1754,27 +1746,23 @@ public abstract class SMSDispatcher extends Handler {
        }
        }
    }
    }


    protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
    protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data,
            PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount,
            PendingIntent sentIntent, PendingIntent deliveryIntent, String format,
            AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader,
            AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri,
            boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage,
            SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText,
            int priority, int validityPeriod) {
            boolean persistMessage, int priority, int validityPeriod) {
        // Get calling app package name via UID from Binder call
        // Get calling app package name via UID from Binder call
        PackageManager pm = mContext.getPackageManager();
        PackageManager pm = mContext.getPackageManager();
        String[] packageNames = pm.getPackagesForUid(Binder.getCallingUid());


        // Get package info via packagemanager
        // Get package info via packagemanager
        final int userId = UserHandle.getCallingUserId();
        final int userId = UserHandle.getCallingUserId();
        PackageInfo appInfo = null;
        PackageInfo appInfo = null;
        if (packageNames != null && packageNames.length > 0) {
        try {
        try {
                // XXX this is lossy- apps can share a UID
            appInfo = pm.getPackageInfoAsUser(
            appInfo = pm.getPackageInfoAsUser(
                        packageNames[0], PackageManager.GET_SIGNATURES, userId);
                    callingPackage, PackageManager.GET_SIGNATURES, userId);
        } catch (PackageManager.NameNotFoundException e) {
        } catch (PackageManager.NameNotFoundException e) {
            // error will be logged in sendRawPdu
            // error will be logged in sendRawPdu
        }
        }
        }
        // Strip non-digits from destination phone number before checking for short codes
        // Strip non-digits from destination phone number before checking for short codes
        // and before displaying the number to the user if confirmation is required.
        // and before displaying the number to the user if confirmation is required.
        String destAddr = PhoneNumberUtils.extractNetworkPortion((String) data.get("destAddr"));
        String destAddr = PhoneNumberUtils.extractNetworkPortion((String) data.get("destAddr"));
@@ -1784,22 +1772,22 @@ public abstract class SMSDispatcher extends Handler {
                validityPeriod);
                validityPeriod);
    }
    }


    protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
    protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data,
            PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore,
            PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri,
            String fullMessageText, boolean isText, boolean persistMessage) {
            boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) {
        return getSmsTracker(data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/,
        return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format,
                null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore,
                null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/,
                fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED,
                expectMore, fullMessageText, isText, persistMessage,
                SMS_MESSAGE_PERIOD_NOT_SPECIFIED);
                SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED);
    }
    }


    protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
    protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data,
            PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore,
            PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri,
            String fullMessageText, boolean isText, boolean persistMessage, int priority,
            boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage,
            int validityPeriod) {
            int priority, int validityPeriod) {
        return getSmsTracker(data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/,
        return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format,
                null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText,
                null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/,
                isText, persistMessage, priority, validityPeriod);
                expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod);
    }
    }


    protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr,
    protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr,
+7 −4
Original line number Original line Diff line number Diff line
@@ -544,6 +544,7 @@ public class SmsDispatchersController extends Handler {
    /**
    /**
     * Send a data based SMS to a specific application port.
     * Send a data based SMS to a specific application port.
     *
     *
     * @param callingPackage the package name of the calling app
     * @param destAddr the address to send the message to
     * @param destAddr the address to send the message to
     * @param scAddr is the service center address or null to use
     * @param scAddr is the service center address or null to use
     *  the current default SMSC
     *  the current default SMSC
@@ -567,15 +568,17 @@ public class SmsDispatchersController extends Handler {
     *  broadcast when the message is delivered to the recipient.  The
     *  broadcast when the message is delivered to the recipient.  The
     *  raw pdu of the status report is in the extended data ("pdu").
     *  raw pdu of the status report is in the extended data ("pdu").
     */
     */
    protected void sendData(String destAddr, String scAddr, int destPort,
    protected void sendData(String callingPackage, String destAddr, String scAddr, int destPort,
                            byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
                            byte[] data, PendingIntent sentIntent, PendingIntent deliveryIntent) {
        if (mImsSmsDispatcher.isAvailable()) {
        if (mImsSmsDispatcher.isAvailable()) {
            mImsSmsDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent,
            mImsSmsDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent,
                    deliveryIntent);
                    deliveryIntent);
        } else if (isCdmaMo()) {
        } else if (isCdmaMo()) {
            mCdmaDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
            mCdmaDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent,
                    deliveryIntent);
        } else {
        } else {
            mGsmDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent);
            mGsmDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent,
                    deliveryIntent);
        }
        }
    }
    }


+9 −0
Original line number Original line Diff line number Diff line
@@ -41,7 +41,9 @@ import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.ServiceInfo;
import android.content.res.AssetManager;
import android.content.res.AssetManager;
@@ -556,6 +558,7 @@ public class ContextFixture implements TestFixture<Context> {
    private final BatteryManager mBatteryManager = mock(BatteryManager.class);
    private final BatteryManager mBatteryManager = mock(BatteryManager.class);
    private final EuiccManager mEuiccManager = mock(EuiccManager.class);
    private final EuiccManager mEuiccManager = mock(EuiccManager.class);
    private final TelecomManager mTelecomManager = mock(TelecomManager.class);
    private final TelecomManager mTelecomManager = mock(TelecomManager.class);
    private final PackageInfo mPackageInfo = mock(PackageInfo.class);


    private final ContentProvider mContentProvider = spy(new FakeContentProvider());
    private final ContentProvider mContentProvider = spy(new FakeContentProvider());


@@ -586,6 +589,12 @@ public class ContextFixture implements TestFixture<Context> {
            }
            }
        }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), anyInt());
        }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), anyInt());


        try {
            doReturn(mPackageInfo).when(mPackageManager).getPackageInfoAsUser(any(), anyInt(),
                    anyInt());
        } catch (NameNotFoundException e) {
        }

        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
        //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt());
        //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt());
        doReturn(mBundle).when(mCarrierConfigManager).getConfig();
        doReturn(mBundle).when(mCarrierConfigManager).getConfig();