Loading src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +8 −5 Original line number Diff line number Diff line Loading @@ -348,7 +348,8 @@ public class IccSmsInterfaceManager { returnUnspecifiedFailure(sentIntent); return; } sendDataInternal(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } /** Loading @@ -362,12 +363,14 @@ public class IccSmsInterfaceManager { returnUnspecifiedFailure(sentIntent); 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. * * @param callingPackage the package name of the calling app * @param destAddr the address to send the message to * @param scAddr is the service center address or null to use * the current default SMSC Loading @@ -391,7 +394,7 @@ public class IccSmsInterfaceManager { * 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) { if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + Loading @@ -399,8 +402,8 @@ public class IccSmsInterfaceManager { sentIntent + " deliveryIntent=" + deliveryIntent); } destAddr = filterDestAddress(destAddr); mDispatchersController.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); mDispatchersController.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } /** Loading src/java/com/android/internal/telephony/SMSDispatcher.java +39 −51 Original line number Diff line number Diff line Loading @@ -63,8 +63,8 @@ import android.provider.Telephony.Sms; import android.service.carrier.CarrierMessagingService; import android.service.carrier.ICarrierMessagingCallback; import android.service.carrier.ICarrierMessagingService; import android.telephony.CarrierMessagingServiceManager; import android.telephony.CarrierConfigManager; import android.telephony.CarrierMessagingServiceManager; import android.telephony.PhoneNumberUtils; import android.telephony.Rlog; import android.telephony.ServiceState; Loading Loading @@ -767,6 +767,7 @@ public abstract class SMSDispatcher extends Handler { /** * 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 scAddr is the service center address or null to use * the current default SMSC Loading @@ -791,14 +792,14 @@ public abstract class SMSDispatcher extends Handler { * raw pdu of the status report is in the extended data ("pdu"). */ @UnsupportedAppUsage 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) { SmsMessageBase.SubmitPduBase pdu = getSubmitPdu( scAddr, destAddr, destPort, data, (deliveryIntent != null)); if (pdu != null) { HashMap map = getSmsTrackerMap(destAddr, scAddr, destPort, data, pdu); SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent, getFormat(), null /*messageUri*/, false /*expectMore*/, SmsTracker tracker = getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), null /*messageUri*/, false /*expectMore*/, null /*fullMessageText*/, false /*isText*/, true /*persistMessage*/); Loading Loading @@ -865,8 +866,8 @@ public abstract class SMSDispatcher extends Handler { scAddr, destAddr, text, (deliveryIntent != null), null, priority, validityPeriod); if (pdu != null) { HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu); SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent, getFormat(), messageUri, expectMore, text, true /*isText*/, SmsTracker tracker = getSmsTracker(callingPkg, map, sentIntent, deliveryIntent, getFormat(), messageUri, expectMore, text, true /*isText*/, persistMessage, priority, validityPeriod); if (!sendSmsByCarrierApp(false /* isDataSms */, tracker)) { Loading Loading @@ -1042,8 +1043,8 @@ public abstract class SMSDispatcher extends Handler { } trackers[i] = getNewSubmitPduTracker(destAddr, scAddr, parts.get(i), smsHeader, encoding, sentIntent, deliveryIntent, (i == (msgCount - 1)), getNewSubmitPduTracker(callingPkg, destAddr, scAddr, parts.get(i), smsHeader, encoding, sentIntent, deliveryIntent, (i == (msgCount - 1)), unsentPartCount, anyPartFailed, messageUri, fullMessageText, priority, expectMore, validityPeriod); if (trackers[i] == null) { Loading @@ -1070,8 +1071,8 @@ public abstract class SMSDispatcher extends Handler { /** * Create a new SubmitPdu and return the SMS tracker. */ private SmsTracker getNewSubmitPduTracker(String destinationAddress, String scAddress, String message, SmsHeader smsHeader, int encoding, private SmsTracker getNewSubmitPduTracker(String callingPackage, String destinationAddress, String scAddress, String message, SmsHeader smsHeader, int encoding, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, String fullMessageText, int priority, boolean expectMore, int validityPeriod) { Loading Loading @@ -1100,7 +1101,7 @@ public abstract class SMSDispatcher extends Handler { if (submitPdu != null) { HashMap map = getSmsTrackerMap(destinationAddress, scAddress, message, submitPdu); return getSmsTracker(map, sentIntent, deliveryIntent, return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, true /*persistMessage*/, priority, validityPeriod); Loading @@ -1118,7 +1119,7 @@ public abstract class SMSDispatcher extends Handler { if (pdu != null) { HashMap map = getSmsTrackerMap(destinationAddress, scAddress, message, pdu); return getSmsTracker(map, sentIntent, return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, false /*persistMessage*/, priority, validityPeriod); Loading Loading @@ -1169,23 +1170,14 @@ public abstract class SMSDispatcher extends Handler { return; } // Get calling app package name via UID from Binder call String packageName = tracker.getAppPackageName(); 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 PackageInfo appInfo; try { // XXX this is lossy- apps can share a UID appInfo = pm.getPackageInfoAsUser( packageNames[0], PackageManager.GET_SIGNATURES, tracker.mUserId); packageName, PackageManager.GET_SIGNATURES, tracker.mUserId); } catch (PackageManager.NameNotFoundException e) { Rlog.e(TAG, "Can't get calling app package info: refusing to send SMS"); tracker.onFailed(mContext, RESULT_ERROR_GENERIC_FAILURE, 0/*errorCode*/); Loading Loading @@ -1787,27 +1779,23 @@ public abstract class SMSDispatcher extends Handler { } } protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { // Get calling app package name via UID from Binder call PackageManager pm = mContext.getPackageManager(); String[] packageNames = pm.getPackagesForUid(Binder.getCallingUid()); // Get package info via packagemanager final int userId = UserHandle.getCallingUserId(); PackageInfo appInfo = null; if (packageNames != null && packageNames.length > 0) { try { // XXX this is lossy- apps can share a UID appInfo = pm.getPackageInfoAsUser( packageNames[0], PackageManager.GET_SIGNATURES, userId); callingPackage, PackageManager.GET_SIGNATURES, userId); } catch (PackageManager.NameNotFoundException e) { // error will be logged in sendRawPdu } } // Strip non-digits from destination phone number before checking for short codes // and before displaying the number to the user if confirmation is required. String destAddr = PhoneNumberUtils.extractNetworkPortion((String) data.get("destAddr")); Loading @@ -1817,22 +1805,22 @@ public abstract class SMSDispatcher extends Handler { validityPeriod); } protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) { return getSmsTracker(data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); } protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { return getSmsTracker(data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod); protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod); } protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr, Loading src/java/com/android/internal/telephony/SmsDispatchersController.java +7 −4 Original line number Diff line number Diff line Loading @@ -544,6 +544,7 @@ public class SmsDispatchersController extends Handler { /** * 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 scAddr is the service center address or null to use * the current default SMSC Loading @@ -567,15 +568,17 @@ public class SmsDispatchersController extends Handler { * broadcast when the message is delivered to the recipient. The * 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) { if (mImsSmsDispatcher.isAvailable()) { mImsSmsDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, mImsSmsDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } else if (isCdmaMo()) { mCdmaDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); mCdmaDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } else { mGsmDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); mGsmDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } } Loading tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +9 −0 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.AssetManager; Loading Loading @@ -557,6 +559,7 @@ public class ContextFixture implements TestFixture<Context> { private final BatteryManager mBatteryManager = mock(BatteryManager.class); private final EuiccManager mEuiccManager = mock(EuiccManager.class); private final TelecomManager mTelecomManager = mock(TelecomManager.class); private final PackageInfo mPackageInfo = mock(PackageInfo.class); private final ContentProvider mContentProvider = spy(new FakeContentProvider()); Loading Loading @@ -587,6 +590,12 @@ public class ContextFixture implements TestFixture<Context> { } }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), anyInt()); try { doReturn(mPackageInfo).when(mPackageManager).getPackageInfoAsUser(any(), anyInt(), anyInt()); } catch (NameNotFoundException e) { } doAnswer((Answer<Boolean>) invocation -> mSystemFeatures.contains((String) invocation.getArgument(0))) .when(mPackageManager).hasSystemFeature(any()); Loading Loading
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +8 −5 Original line number Diff line number Diff line Loading @@ -348,7 +348,8 @@ public class IccSmsInterfaceManager { returnUnspecifiedFailure(sentIntent); return; } sendDataInternal(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); sendDataInternal(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } /** Loading @@ -362,12 +363,14 @@ public class IccSmsInterfaceManager { returnUnspecifiedFailure(sentIntent); 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. * * @param callingPackage the package name of the calling app * @param destAddr the address to send the message to * @param scAddr is the service center address or null to use * the current default SMSC Loading @@ -391,7 +394,7 @@ public class IccSmsInterfaceManager { * 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) { if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("sendData: destAddr=" + destAddr + " scAddr=" + scAddr + " destPort=" + Loading @@ -399,8 +402,8 @@ public class IccSmsInterfaceManager { sentIntent + " deliveryIntent=" + deliveryIntent); } destAddr = filterDestAddress(destAddr); mDispatchersController.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); mDispatchersController.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } /** Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +39 −51 Original line number Diff line number Diff line Loading @@ -63,8 +63,8 @@ import android.provider.Telephony.Sms; import android.service.carrier.CarrierMessagingService; import android.service.carrier.ICarrierMessagingCallback; import android.service.carrier.ICarrierMessagingService; import android.telephony.CarrierMessagingServiceManager; import android.telephony.CarrierConfigManager; import android.telephony.CarrierMessagingServiceManager; import android.telephony.PhoneNumberUtils; import android.telephony.Rlog; import android.telephony.ServiceState; Loading Loading @@ -767,6 +767,7 @@ public abstract class SMSDispatcher extends Handler { /** * 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 scAddr is the service center address or null to use * the current default SMSC Loading @@ -791,14 +792,14 @@ public abstract class SMSDispatcher extends Handler { * raw pdu of the status report is in the extended data ("pdu"). */ @UnsupportedAppUsage 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) { SmsMessageBase.SubmitPduBase pdu = getSubmitPdu( scAddr, destAddr, destPort, data, (deliveryIntent != null)); if (pdu != null) { HashMap map = getSmsTrackerMap(destAddr, scAddr, destPort, data, pdu); SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent, getFormat(), null /*messageUri*/, false /*expectMore*/, SmsTracker tracker = getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), null /*messageUri*/, false /*expectMore*/, null /*fullMessageText*/, false /*isText*/, true /*persistMessage*/); Loading Loading @@ -865,8 +866,8 @@ public abstract class SMSDispatcher extends Handler { scAddr, destAddr, text, (deliveryIntent != null), null, priority, validityPeriod); if (pdu != null) { HashMap map = getSmsTrackerMap(destAddr, scAddr, text, pdu); SmsTracker tracker = getSmsTracker(map, sentIntent, deliveryIntent, getFormat(), messageUri, expectMore, text, true /*isText*/, SmsTracker tracker = getSmsTracker(callingPkg, map, sentIntent, deliveryIntent, getFormat(), messageUri, expectMore, text, true /*isText*/, persistMessage, priority, validityPeriod); if (!sendSmsByCarrierApp(false /* isDataSms */, tracker)) { Loading Loading @@ -1042,8 +1043,8 @@ public abstract class SMSDispatcher extends Handler { } trackers[i] = getNewSubmitPduTracker(destAddr, scAddr, parts.get(i), smsHeader, encoding, sentIntent, deliveryIntent, (i == (msgCount - 1)), getNewSubmitPduTracker(callingPkg, destAddr, scAddr, parts.get(i), smsHeader, encoding, sentIntent, deliveryIntent, (i == (msgCount - 1)), unsentPartCount, anyPartFailed, messageUri, fullMessageText, priority, expectMore, validityPeriod); if (trackers[i] == null) { Loading @@ -1070,8 +1071,8 @@ public abstract class SMSDispatcher extends Handler { /** * Create a new SubmitPdu and return the SMS tracker. */ private SmsTracker getNewSubmitPduTracker(String destinationAddress, String scAddress, String message, SmsHeader smsHeader, int encoding, private SmsTracker getNewSubmitPduTracker(String callingPackage, String destinationAddress, String scAddress, String message, SmsHeader smsHeader, int encoding, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean lastPart, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, String fullMessageText, int priority, boolean expectMore, int validityPeriod) { Loading Loading @@ -1100,7 +1101,7 @@ public abstract class SMSDispatcher extends Handler { if (submitPdu != null) { HashMap map = getSmsTrackerMap(destinationAddress, scAddress, message, submitPdu); return getSmsTracker(map, sentIntent, deliveryIntent, return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, true /*persistMessage*/, priority, validityPeriod); Loading @@ -1118,7 +1119,7 @@ public abstract class SMSDispatcher extends Handler { if (pdu != null) { HashMap map = getSmsTrackerMap(destinationAddress, scAddress, message, pdu); return getSmsTracker(map, sentIntent, return getSmsTracker(callingPackage, map, sentIntent, deliveryIntent, getFormat(), unsentPartCount, anyPartFailed, messageUri, smsHeader, (!lastPart || expectMore), fullMessageText, true /*isText*/, false /*persistMessage*/, priority, validityPeriod); Loading Loading @@ -1169,23 +1170,14 @@ public abstract class SMSDispatcher extends Handler { return; } // Get calling app package name via UID from Binder call String packageName = tracker.getAppPackageName(); 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 PackageInfo appInfo; try { // XXX this is lossy- apps can share a UID appInfo = pm.getPackageInfoAsUser( packageNames[0], PackageManager.GET_SIGNATURES, tracker.mUserId); packageName, PackageManager.GET_SIGNATURES, tracker.mUserId); } catch (PackageManager.NameNotFoundException e) { Rlog.e(TAG, "Can't get calling app package info: refusing to send SMS"); tracker.onFailed(mContext, RESULT_ERROR_GENERIC_FAILURE, 0/*errorCode*/); Loading Loading @@ -1787,27 +1779,23 @@ public abstract class SMSDispatcher extends Handler { } } protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, AtomicInteger unsentPartCount, AtomicBoolean anyPartFailed, Uri messageUri, SmsHeader smsHeader, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { // Get calling app package name via UID from Binder call PackageManager pm = mContext.getPackageManager(); String[] packageNames = pm.getPackagesForUid(Binder.getCallingUid()); // Get package info via packagemanager final int userId = UserHandle.getCallingUserId(); PackageInfo appInfo = null; if (packageNames != null && packageNames.length > 0) { try { // XXX this is lossy- apps can share a UID appInfo = pm.getPackageInfoAsUser( packageNames[0], PackageManager.GET_SIGNATURES, userId); callingPackage, PackageManager.GET_SIGNATURES, userId); } catch (PackageManager.NameNotFoundException e) { // error will be logged in sendRawPdu } } // Strip non-digits from destination phone number before checking for short codes // and before displaying the number to the user if confirmation is required. String destAddr = PhoneNumberUtils.extractNetworkPortion((String) data.get("destAddr")); Loading @@ -1817,22 +1805,22 @@ public abstract class SMSDispatcher extends Handler { validityPeriod); } protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) { return getSmsTracker(data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, SMS_MESSAGE_PRIORITY_NOT_SPECIFIED, SMS_MESSAGE_PERIOD_NOT_SPECIFIED); } protected SmsTracker getSmsTracker(HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { return getSmsTracker(data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod); protected SmsTracker getSmsTracker(String callingPackage, HashMap<String, Object> data, PendingIntent sentIntent, PendingIntent deliveryIntent, String format, Uri messageUri, boolean expectMore, String fullMessageText, boolean isText, boolean persistMessage, int priority, int validityPeriod) { return getSmsTracker(callingPackage, data, sentIntent, deliveryIntent, format, null/*unsentPartCount*/, null/*anyPartFailed*/, messageUri, null/*smsHeader*/, expectMore, fullMessageText, isText, persistMessage, priority, validityPeriod); } protected HashMap<String, Object> getSmsTrackerMap(String destAddr, String scAddr, Loading
src/java/com/android/internal/telephony/SmsDispatchersController.java +7 −4 Original line number Diff line number Diff line Loading @@ -544,6 +544,7 @@ public class SmsDispatchersController extends Handler { /** * 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 scAddr is the service center address or null to use * the current default SMSC Loading @@ -567,15 +568,17 @@ public class SmsDispatchersController extends Handler { * broadcast when the message is delivered to the recipient. The * 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) { if (mImsSmsDispatcher.isAvailable()) { mImsSmsDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, mImsSmsDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } else if (isCdmaMo()) { mCdmaDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); mCdmaDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } else { mGsmDispatcher.sendData(destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); mGsmDispatcher.sendData(callingPackage, destAddr, scAddr, destPort, data, sentIntent, deliveryIntent); } } Loading
tests/telephonytests/src/com/android/internal/telephony/ContextFixture.java +9 −0 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.res.AssetManager; Loading Loading @@ -557,6 +559,7 @@ public class ContextFixture implements TestFixture<Context> { private final BatteryManager mBatteryManager = mock(BatteryManager.class); private final EuiccManager mEuiccManager = mock(EuiccManager.class); private final TelecomManager mTelecomManager = mock(TelecomManager.class); private final PackageInfo mPackageInfo = mock(PackageInfo.class); private final ContentProvider mContentProvider = spy(new FakeContentProvider()); Loading Loading @@ -587,6 +590,12 @@ public class ContextFixture implements TestFixture<Context> { } }).when(mPackageManager).queryIntentServicesAsUser((Intent) any(), anyInt(), anyInt()); try { doReturn(mPackageInfo).when(mPackageManager).getPackageInfoAsUser(any(), anyInt(), anyInt()); } catch (NameNotFoundException e) { } doAnswer((Answer<Boolean>) invocation -> mSystemFeatures.contains((String) invocation.getArgument(0))) .when(mPackageManager).hasSystemFeature(any()); Loading