Loading src/java/com/android/internal/telephony/CarrierServicesSmsFilter.java +11 −9 Original line number Diff line number Diff line Loading @@ -46,8 +46,7 @@ public class CarrierServicesSmsFilter { protected static final boolean DBG = true; private final Context mContext; private final int mPhoneId; private final int mSubId; private final Phone mPhone; private final byte[][] mPdus; private final int mDestPort; private final String mPduFormat; Loading @@ -57,16 +56,14 @@ public class CarrierServicesSmsFilter { @VisibleForTesting public CarrierServicesSmsFilter( Context context, int phoneId, int subId, Phone phone, byte[][] pdus, int destPort, String pduFormat, CarrierServicesSmsFilterCallbackInterface carrierServicesSmsFilterCallback, String logTag) { mContext = context; mPhoneId = phoneId; mSubId = subId; mPhone = phone; mPdus = pdus; mDestPort = destPort; mPduFormat = pduFormat; Loading @@ -84,6 +81,11 @@ public class CarrierServicesSmsFilter { if (carrierAppForFiltering.isPresent()) { smsFilterPackages.add(carrierAppForFiltering.get()); } String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); if (carrierImsPackage != null) { smsFilterPackages.add(carrierImsPackage); } FilterAggregator filterAggregator = new FilterAggregator(smsFilterPackages.size()); for (String smsFilterPackage : smsFilterPackages) { filterWithPackage(smsFilterPackage, filterAggregator); Loading @@ -94,7 +96,7 @@ public class CarrierServicesSmsFilter { private Optional<String> getCarrierAppPackageForFiltering() { List<String> carrierPackages = null; UiccCard card = UiccController.getInstance().getUiccCard(mPhoneId); UiccCard card = UiccController.getInstance().getUiccCard(mPhone.getPhoneId()); if (card != null) { carrierPackages = card.getCarrierPackageNamesForIntent( mContext.getPackageManager(), Loading Loading @@ -209,8 +211,8 @@ public class CarrierServicesSmsFilter { protected void onServiceReady(ICarrierMessagingService carrierMessagingService) { try { carrierMessagingService.filterSms( new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort, mSubId, mSmsFilterCallback); new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort, mPhone.getSubId(), mSmsFilterCallback); } catch (RemoteException e) { loge("Exception filtering the SMS: " + e); mSmsFilterCallback.onFilterComplete( Loading src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +24 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ import android.app.AppOpsManager; import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.net.Uri; Loading @@ -35,6 +37,7 @@ import android.os.Message; import android.os.Process; import android.os.UserManager; import android.provider.Telephony; import android.service.carrier.CarrierMessagingService; import android.telephony.Rlog; import android.telephony.SmsManager; import android.telephony.SmsMessage; Loading Loading @@ -465,7 +468,7 @@ public class IccSmsInterfaceManager { * the same time an SMS received from radio is acknowledged back. */ public void injectSmsPdu(byte[] pdu, String format, PendingIntent receivedIntent) { enforceCarrierPrivilege(); enforceCarrierOrCarrierImsPrivilege(); if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("pdu: " + pdu + "\n format=" + format + Loading Loading @@ -507,8 +510,8 @@ public class IccSmsInterfaceManager { Manifest.permission.SEND_SMS, "Sending SMS message"); if (!persistMessageForNonDefaultSmsApp) { // Only allow carrier app to skip auto message persistence. enforceCarrierPrivilege(); // Only allow carrier app or carrier ims to skip auto message persistence. enforceCarrierOrCarrierImsPrivilege(); } if (Rlog.isLoggable("SMS", Log.VERBOSE)) { int i = 0; Loading Loading @@ -1115,6 +1118,24 @@ public class IccSmsInterfaceManager { } } private void enforceCarrierOrCarrierImsPrivilege() { int callingUid = Binder.getCallingUid(); String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); try { if (carrierImsPackage != null && callingUid == mContext.getPackageManager().getPackageUid( carrierImsPackage, 0)) { return; } } catch (PackageManager.NameNotFoundException e) { if (Rlog.isLoggable("SMS", Log.DEBUG)) { log("Cannot find configured carrier ims package"); } } enforceCarrierPrivilege(); } private void enforceCarrierOrPhonePrivilege() { int callingUid = Binder.getCallingUid(); if (callingUid != Process.PHONE_UID) { Loading src/java/com/android/internal/telephony/InboundSmsHandler.java +1 −2 Original line number Diff line number Diff line Loading @@ -947,8 +947,7 @@ public abstract class InboundSmsHandler extends StateMachine { new CarrierServicesSmsFilterCallback( pdus, destPort, tracker.getFormat(), resultReceiver, userUnlocked); CarrierServicesSmsFilter carrierServicesFilter = new CarrierServicesSmsFilter( mContext, mPhone.getPhoneId(), mPhone.getSubId(), pdus, destPort, tracker.getFormat(), filterCallback, getName()); mContext, mPhone, pdus, destPort, tracker.getFormat(), filterCallback, getName()); if (carrierServicesFilter.filter()) { return true; } Loading src/java/com/android/internal/telephony/SMSDispatcher.java +7 −3 Original line number Diff line number Diff line Loading @@ -1735,9 +1735,13 @@ public abstract class SMSDispatcher extends Handler { List<String> carrierPackages = card.getCarrierPackageNamesForIntent( mContext.getPackageManager(), new Intent(CarrierMessagingService.SERVICE_INTERFACE)); // TODO: Add Check for IMS app if there are no carrier packages. return (carrierPackages != null && carrierPackages.size() == 1) ? carrierPackages.get(0) : null; if (carrierPackages != null && carrierPackages.size() == 1) { return carrierPackages.get(0); } // If there is no carrier package which implements CarrierMessagingService, then lookup if // for a carrierImsPackage that implements CarrierMessagingService. return CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); } protected int getSubId() { Loading tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public class CarrierServicesSmsFilterTest extends TelephonyTest { public void setUp() throws Exception { super.setUp(getClass().getSimpleName()); mCarrierServicesSmsFilterUT = new CarrierServicesSmsFilter( mContext, mPhone.getPhoneId(), mPhone.getSubId(), new byte[][]{SMS_PDU}, mContext, mPhone, new byte[][]{SMS_PDU}, 0, null, mFilterCallback, getClass().getSimpleName()); } Loading Loading
src/java/com/android/internal/telephony/CarrierServicesSmsFilter.java +11 −9 Original line number Diff line number Diff line Loading @@ -46,8 +46,7 @@ public class CarrierServicesSmsFilter { protected static final boolean DBG = true; private final Context mContext; private final int mPhoneId; private final int mSubId; private final Phone mPhone; private final byte[][] mPdus; private final int mDestPort; private final String mPduFormat; Loading @@ -57,16 +56,14 @@ public class CarrierServicesSmsFilter { @VisibleForTesting public CarrierServicesSmsFilter( Context context, int phoneId, int subId, Phone phone, byte[][] pdus, int destPort, String pduFormat, CarrierServicesSmsFilterCallbackInterface carrierServicesSmsFilterCallback, String logTag) { mContext = context; mPhoneId = phoneId; mSubId = subId; mPhone = phone; mPdus = pdus; mDestPort = destPort; mPduFormat = pduFormat; Loading @@ -84,6 +81,11 @@ public class CarrierServicesSmsFilter { if (carrierAppForFiltering.isPresent()) { smsFilterPackages.add(carrierAppForFiltering.get()); } String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); if (carrierImsPackage != null) { smsFilterPackages.add(carrierImsPackage); } FilterAggregator filterAggregator = new FilterAggregator(smsFilterPackages.size()); for (String smsFilterPackage : smsFilterPackages) { filterWithPackage(smsFilterPackage, filterAggregator); Loading @@ -94,7 +96,7 @@ public class CarrierServicesSmsFilter { private Optional<String> getCarrierAppPackageForFiltering() { List<String> carrierPackages = null; UiccCard card = UiccController.getInstance().getUiccCard(mPhoneId); UiccCard card = UiccController.getInstance().getUiccCard(mPhone.getPhoneId()); if (card != null) { carrierPackages = card.getCarrierPackageNamesForIntent( mContext.getPackageManager(), Loading Loading @@ -209,8 +211,8 @@ public class CarrierServicesSmsFilter { protected void onServiceReady(ICarrierMessagingService carrierMessagingService) { try { carrierMessagingService.filterSms( new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort, mSubId, mSmsFilterCallback); new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort, mPhone.getSubId(), mSmsFilterCallback); } catch (RemoteException e) { loge("Exception filtering the SMS: " + e); mSmsFilterCallback.onFilterComplete( Loading
src/java/com/android/internal/telephony/IccSmsInterfaceManager.java +24 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ import android.app.AppOpsManager; import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.net.Uri; Loading @@ -35,6 +37,7 @@ import android.os.Message; import android.os.Process; import android.os.UserManager; import android.provider.Telephony; import android.service.carrier.CarrierMessagingService; import android.telephony.Rlog; import android.telephony.SmsManager; import android.telephony.SmsMessage; Loading Loading @@ -465,7 +468,7 @@ public class IccSmsInterfaceManager { * the same time an SMS received from radio is acknowledged back. */ public void injectSmsPdu(byte[] pdu, String format, PendingIntent receivedIntent) { enforceCarrierPrivilege(); enforceCarrierOrCarrierImsPrivilege(); if (Rlog.isLoggable("SMS", Log.VERBOSE)) { log("pdu: " + pdu + "\n format=" + format + Loading Loading @@ -507,8 +510,8 @@ public class IccSmsInterfaceManager { Manifest.permission.SEND_SMS, "Sending SMS message"); if (!persistMessageForNonDefaultSmsApp) { // Only allow carrier app to skip auto message persistence. enforceCarrierPrivilege(); // Only allow carrier app or carrier ims to skip auto message persistence. enforceCarrierOrCarrierImsPrivilege(); } if (Rlog.isLoggable("SMS", Log.VERBOSE)) { int i = 0; Loading Loading @@ -1115,6 +1118,24 @@ public class IccSmsInterfaceManager { } } private void enforceCarrierOrCarrierImsPrivilege() { int callingUid = Binder.getCallingUid(); String carrierImsPackage = CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); try { if (carrierImsPackage != null && callingUid == mContext.getPackageManager().getPackageUid( carrierImsPackage, 0)) { return; } } catch (PackageManager.NameNotFoundException e) { if (Rlog.isLoggable("SMS", Log.DEBUG)) { log("Cannot find configured carrier ims package"); } } enforceCarrierPrivilege(); } private void enforceCarrierOrPhonePrivilege() { int callingUid = Binder.getCallingUid(); if (callingUid != Process.PHONE_UID) { Loading
src/java/com/android/internal/telephony/InboundSmsHandler.java +1 −2 Original line number Diff line number Diff line Loading @@ -947,8 +947,7 @@ public abstract class InboundSmsHandler extends StateMachine { new CarrierServicesSmsFilterCallback( pdus, destPort, tracker.getFormat(), resultReceiver, userUnlocked); CarrierServicesSmsFilter carrierServicesFilter = new CarrierServicesSmsFilter( mContext, mPhone.getPhoneId(), mPhone.getSubId(), pdus, destPort, tracker.getFormat(), filterCallback, getName()); mContext, mPhone, pdus, destPort, tracker.getFormat(), filterCallback, getName()); if (carrierServicesFilter.filter()) { return true; } Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +7 −3 Original line number Diff line number Diff line Loading @@ -1735,9 +1735,13 @@ public abstract class SMSDispatcher extends Handler { List<String> carrierPackages = card.getCarrierPackageNamesForIntent( mContext.getPackageManager(), new Intent(CarrierMessagingService.SERVICE_INTERFACE)); // TODO: Add Check for IMS app if there are no carrier packages. return (carrierPackages != null && carrierPackages.size() == 1) ? carrierPackages.get(0) : null; if (carrierPackages != null && carrierPackages.size() == 1) { return carrierPackages.get(0); } // If there is no carrier package which implements CarrierMessagingService, then lookup if // for a carrierImsPackage that implements CarrierMessagingService. return CarrierSmsUtils.getCarrierImsPackageForIntent(mContext, mPhone, new Intent(CarrierMessagingService.SERVICE_INTERFACE)); } protected int getSubId() { Loading
tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ public class CarrierServicesSmsFilterTest extends TelephonyTest { public void setUp() throws Exception { super.setUp(getClass().getSimpleName()); mCarrierServicesSmsFilterUT = new CarrierServicesSmsFilter( mContext, mPhone.getPhoneId(), mPhone.getSubId(), new byte[][]{SMS_PDU}, mContext, mPhone, new byte[][]{SMS_PDU}, 0, null, mFilterCallback, getClass().getSimpleName()); } Loading