Loading src/java/android/telephony/SmsManager.java +27 −18 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.telephony; package android.telephony; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.ActivityThread; import android.app.PendingIntent; import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException; Loading Loading @@ -298,13 +299,13 @@ public final class SmsManager { public void sendTextMessage( public void sendTextMessage( String destinationAddress, String scAddress, String text, String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) { PendingIntent sentIntent, PendingIntent deliveryIntent) { sendTextMessageInternal(destinationAddress, scAddress, text, sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent, sentIntent, deliveryIntent, true /* persistMessageForCarrierApp*/); true /* persistMessage*/); } } private void sendTextMessageInternal(String destinationAddress, String scAddress, private void sendTextMessageInternal(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean persistMessageForCarrierApp) { boolean persistMessage) { if (TextUtils.isEmpty(destinationAddress)) { if (TextUtils.isEmpty(destinationAddress)) { throw new IllegalArgumentException("Invalid destinationAddress"); throw new IllegalArgumentException("Invalid destinationAddress"); } } Loading @@ -318,7 +319,7 @@ public final class SmsManager { iccISms.sendTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), iccISms.sendTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, destinationAddress, scAddress, text, sentIntent, deliveryIntent, scAddress, text, sentIntent, deliveryIntent, persistMessageForCarrierApp); persistMessage); } catch (RemoteException ex) { } catch (RemoteException ex) { // ignore it // ignore it } } Loading @@ -327,16 +328,20 @@ public final class SmsManager { /** /** * Send a text based SMS without writing it into the SMS Provider. * Send a text based SMS without writing it into the SMS Provider. * * * <p>Only the carrier app can call this method.</p> * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE} or the calling app has carrier * privileges. * </p> * * * @see #sendTextMessage(String, String, String, PendingIntent, PendingIntent) * @see #sendTextMessage(String, String, String, PendingIntent, PendingIntent) * @hide * @hide */ */ @SystemApi public void sendTextMessageWithoutPersisting( public void sendTextMessageWithoutPersisting( String destinationAddress, String scAddress, String text, String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) { PendingIntent sentIntent, PendingIntent deliveryIntent) { sendTextMessageInternal(destinationAddress, scAddress, text, sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent, sentIntent, deliveryIntent, false /* persistMessageForCarrierApp*/); false /* persistMessage */); } } /** /** Loading Loading @@ -465,14 +470,14 @@ public final class SmsManager { public void sendMultipartTextMessage( public void sendMultipartTextMessage( String destinationAddress, String scAddress, ArrayList<String> parts, String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) { ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) { sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents, sentIntents, deliveryIntents, true /* persistMessageForCarrierApp*/); deliveryIntents, true /* persistMessage*/); } } private void sendMultipartTextMessageInternal( private void sendMultipartTextMessageInternal( String destinationAddress, String scAddress, ArrayList<String> parts, String destinationAddress, String scAddress, List<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents, List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents, boolean persistMessageForCarrierApp) { boolean persistMessage) { if (TextUtils.isEmpty(destinationAddress)) { if (TextUtils.isEmpty(destinationAddress)) { throw new IllegalArgumentException("Invalid destinationAddress"); throw new IllegalArgumentException("Invalid destinationAddress"); } } Loading @@ -486,7 +491,7 @@ public final class SmsManager { iccISms.sendMultipartTextForSubscriber(getSubscriptionId(), iccISms.sendMultipartTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), ActivityThread.currentPackageName(), destinationAddress, scAddress, parts, destinationAddress, scAddress, parts, sentIntents, deliveryIntents, persistMessageForCarrierApp); sentIntents, deliveryIntents, persistMessage); } catch (RemoteException ex) { } catch (RemoteException ex) { // ignore it // ignore it } } Loading @@ -507,16 +512,20 @@ public final class SmsManager { /** /** * Send a multi-part text based SMS without writing it into the SMS Provider. * Send a multi-part text based SMS without writing it into the SMS Provider. * * * <p>Only the carrier app can call this method.</p> * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE} or the calling app has carrier * privileges. * </p> * * * @see #sendMultipartTextMessage(String, String, ArrayList, ArrayList, ArrayList) * @see #sendMultipartTextMessage(String, String, ArrayList, ArrayList, ArrayList) * @hide * @hide **/ **/ @SystemApi public void sendMultipartTextMessageWithoutPersisting( public void sendMultipartTextMessageWithoutPersisting( String destinationAddress, String scAddress, ArrayList<String> parts, String destinationAddress, String scAddress, List<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) { List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents) { sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents, sentIntents, deliveryIntents, false /* persistMessageForCarrierApp*/); deliveryIntents, false /* persistMessage*/); } } /** /** Loading src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +6 −6 Original line number Original line Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.os.AsyncResult; import android.os.Binder; import android.os.Binder; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; import android.os.Process; import android.os.UserManager; import android.os.UserManager; import android.provider.Telephony; import android.provider.Telephony; import android.service.carrier.CarrierMessagingService; import android.service.carrier.CarrierMessagingService; Loading Loading @@ -1118,20 +1117,20 @@ public class IccSmsInterfaceManager { } } /** /** * Enforces that the caller is one of the following: * Enforces that the caller has {@link android.Manifest.permission#MODIFY_PHONE_STATE} * permission or is one of the following apps: * <ul> * <ul> * <li> Phone process * <li> IMS App * <li> IMS App * <li> Carrier App * <li> Carrier App * </ul> * </ul> */ */ private void enforcePrivilegedAppPermissions() { private void enforcePrivilegedAppPermissions() { int callingUid = Binder.getCallingUid(); if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE) // Allow the phone process itself to send, inject messages. == PackageManager.PERMISSION_GRANTED) { if (callingUid == Process.PHONE_UID) { return; return; } } int callingUid = Binder.getCallingUid(); String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); new Intent(CarrierMessagingService.SERVICE_INTERFACE)); try { try { Loading @@ -1145,6 +1144,7 @@ public class IccSmsInterfaceManager { log("Cannot find configured carrier ims package"); log("Cannot find configured carrier ims package"); } } } } enforceCarrierPrivilege(); enforceCarrierPrivilege(); } } Loading Loading
src/java/android/telephony/SmsManager.java +27 −18 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.telephony; package android.telephony; import android.annotation.SystemApi; import android.app.ActivityThread; import android.app.ActivityThread; import android.app.PendingIntent; import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException; Loading Loading @@ -298,13 +299,13 @@ public final class SmsManager { public void sendTextMessage( public void sendTextMessage( String destinationAddress, String scAddress, String text, String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) { PendingIntent sentIntent, PendingIntent deliveryIntent) { sendTextMessageInternal(destinationAddress, scAddress, text, sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent, sentIntent, deliveryIntent, true /* persistMessageForCarrierApp*/); true /* persistMessage*/); } } private void sendTextMessageInternal(String destinationAddress, String scAddress, private void sendTextMessageInternal(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, String text, PendingIntent sentIntent, PendingIntent deliveryIntent, boolean persistMessageForCarrierApp) { boolean persistMessage) { if (TextUtils.isEmpty(destinationAddress)) { if (TextUtils.isEmpty(destinationAddress)) { throw new IllegalArgumentException("Invalid destinationAddress"); throw new IllegalArgumentException("Invalid destinationAddress"); } } Loading @@ -318,7 +319,7 @@ public final class SmsManager { iccISms.sendTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), iccISms.sendTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), destinationAddress, destinationAddress, scAddress, text, sentIntent, deliveryIntent, scAddress, text, sentIntent, deliveryIntent, persistMessageForCarrierApp); persistMessage); } catch (RemoteException ex) { } catch (RemoteException ex) { // ignore it // ignore it } } Loading @@ -327,16 +328,20 @@ public final class SmsManager { /** /** * Send a text based SMS without writing it into the SMS Provider. * Send a text based SMS without writing it into the SMS Provider. * * * <p>Only the carrier app can call this method.</p> * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE} or the calling app has carrier * privileges. * </p> * * * @see #sendTextMessage(String, String, String, PendingIntent, PendingIntent) * @see #sendTextMessage(String, String, String, PendingIntent, PendingIntent) * @hide * @hide */ */ @SystemApi public void sendTextMessageWithoutPersisting( public void sendTextMessageWithoutPersisting( String destinationAddress, String scAddress, String text, String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent) { PendingIntent sentIntent, PendingIntent deliveryIntent) { sendTextMessageInternal(destinationAddress, scAddress, text, sendTextMessageInternal(destinationAddress, scAddress, text, sentIntent, deliveryIntent, sentIntent, deliveryIntent, false /* persistMessageForCarrierApp*/); false /* persistMessage */); } } /** /** Loading Loading @@ -465,14 +470,14 @@ public final class SmsManager { public void sendMultipartTextMessage( public void sendMultipartTextMessage( String destinationAddress, String scAddress, ArrayList<String> parts, String destinationAddress, String scAddress, ArrayList<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) { ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) { sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents, sentIntents, deliveryIntents, true /* persistMessageForCarrierApp*/); deliveryIntents, true /* persistMessage*/); } } private void sendMultipartTextMessageInternal( private void sendMultipartTextMessageInternal( String destinationAddress, String scAddress, ArrayList<String> parts, String destinationAddress, String scAddress, List<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents, List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents, boolean persistMessageForCarrierApp) { boolean persistMessage) { if (TextUtils.isEmpty(destinationAddress)) { if (TextUtils.isEmpty(destinationAddress)) { throw new IllegalArgumentException("Invalid destinationAddress"); throw new IllegalArgumentException("Invalid destinationAddress"); } } Loading @@ -486,7 +491,7 @@ public final class SmsManager { iccISms.sendMultipartTextForSubscriber(getSubscriptionId(), iccISms.sendMultipartTextForSubscriber(getSubscriptionId(), ActivityThread.currentPackageName(), ActivityThread.currentPackageName(), destinationAddress, scAddress, parts, destinationAddress, scAddress, parts, sentIntents, deliveryIntents, persistMessageForCarrierApp); sentIntents, deliveryIntents, persistMessage); } catch (RemoteException ex) { } catch (RemoteException ex) { // ignore it // ignore it } } Loading @@ -507,16 +512,20 @@ public final class SmsManager { /** /** * Send a multi-part text based SMS without writing it into the SMS Provider. * Send a multi-part text based SMS without writing it into the SMS Provider. * * * <p>Only the carrier app can call this method.</p> * <p>Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE} or the calling app has carrier * privileges. * </p> * * * @see #sendMultipartTextMessage(String, String, ArrayList, ArrayList, ArrayList) * @see #sendMultipartTextMessage(String, String, ArrayList, ArrayList, ArrayList) * @hide * @hide **/ **/ @SystemApi public void sendMultipartTextMessageWithoutPersisting( public void sendMultipartTextMessageWithoutPersisting( String destinationAddress, String scAddress, ArrayList<String> parts, String destinationAddress, String scAddress, List<String> parts, ArrayList<PendingIntent> sentIntents, ArrayList<PendingIntent> deliveryIntents) { List<PendingIntent> sentIntents, List<PendingIntent> deliveryIntents) { sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sendMultipartTextMessageInternal(destinationAddress, scAddress, parts, sentIntents, sentIntents, deliveryIntents, false /* persistMessageForCarrierApp*/); deliveryIntents, false /* persistMessage*/); } } /** /** Loading
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +6 −6 Original line number Original line Diff line number Diff line Loading @@ -34,7 +34,6 @@ import android.os.AsyncResult; import android.os.Binder; import android.os.Binder; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; import android.os.Process; import android.os.UserManager; import android.os.UserManager; import android.provider.Telephony; import android.provider.Telephony; import android.service.carrier.CarrierMessagingService; import android.service.carrier.CarrierMessagingService; Loading Loading @@ -1118,20 +1117,20 @@ public class IccSmsInterfaceManager { } } /** /** * Enforces that the caller is one of the following: * Enforces that the caller has {@link android.Manifest.permission#MODIFY_PHONE_STATE} * permission or is one of the following apps: * <ul> * <ul> * <li> Phone process * <li> IMS App * <li> IMS App * <li> Carrier App * <li> Carrier App * </ul> * </ul> */ */ private void enforcePrivilegedAppPermissions() { private void enforcePrivilegedAppPermissions() { int callingUid = Binder.getCallingUid(); if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE) // Allow the phone process itself to send, inject messages. == PackageManager.PERMISSION_GRANTED) { if (callingUid == Process.PHONE_UID) { return; return; } } int callingUid = Binder.getCallingUid(); String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); new Intent(CarrierMessagingService.SERVICE_INTERFACE)); try { try { Loading @@ -1145,6 +1144,7 @@ public class IccSmsInterfaceManager { log("Cannot find configured carrier ims package"); log("Cannot find configured carrier ims package"); } } } } enforceCarrierPrivilege(); enforceCarrierPrivilege(); } } Loading