Loading src/java/com/android/internal/telephony/CarrierServicesSmsFilter.java +48 −30 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ public class CarrierServicesSmsFilter { private final String mLogTag; private final CallbackTimeoutHandler mCallbackTimeoutHandler; private final LocalLog mLocalLog; private final long mMessageId; private FilterAggregator mFilterAggregator; @VisibleForTesting Loading @@ -73,7 +74,8 @@ public class CarrierServicesSmsFilter { String pduFormat, CarrierServicesSmsFilterCallbackInterface carrierServicesSmsFilterCallback, String logTag, LocalLog localLog) { LocalLog localLog, long msgId) { mContext = context; mPhone = phone; mPdus = pdus; Loading @@ -83,6 +85,7 @@ public class CarrierServicesSmsFilter { mLogTag = logTag; mCallbackTimeoutHandler = new CallbackTimeoutHandler(); mLocalLog = localLog; mMessageId = msgId; } /** Loading @@ -102,7 +105,8 @@ public class CarrierServicesSmsFilter { } if (mFilterAggregator != null) { String errMsg = "Cannot reuse the same CarrierServiceSmsFilter object for filtering."; String errMsg = "filter: Cannot reuse the same CarrierServiceSmsFilter object for " + "filtering"; loge(errMsg); throw new RuntimeException(errMsg); } Loading Loading @@ -131,10 +135,11 @@ public class CarrierServicesSmsFilter { mContext.getPackageManager(), new Intent(CarrierMessagingService.SERVICE_INTERFACE)); } else { Rlog.e(mLogTag, "UiccCard not initialized."); loge("getCarrierAppPackageForFiltering: UiccCard not initialized"); } if (carrierPackages != null && carrierPackages.size() == 1) { log("Found carrier package."); log("getCarrierAppPackageForFiltering: Found carrier package: " + carrierPackages.get(0)); return Optional.of(carrierPackages.get(0)); } Loading @@ -144,21 +149,22 @@ public class CarrierServicesSmsFilter { getSystemAppForIntent(new Intent(CarrierMessagingService.SERVICE_INTERFACE)); if (systemPackages != null && systemPackages.size() == 1) { log("Found system package."); log("getCarrierAppPackageForFiltering: Found system package: " + systemPackages.get(0)); return Optional.of(systemPackages.get(0)); } logv("Unable to find carrier package: " + carrierPackages + ", nor systemPackages: " + systemPackages); logv("getCarrierAppPackageForFiltering: Unable to find carrierPackages: " + carrierPackages + " or systemPackages: " + systemPackages); return Optional.empty(); } private void filterWithPackage(String packageName, FilterAggregator filterAggregator) { CarrierSmsFilter smsFilter = new CarrierSmsFilter(mPdus, mDestPort, mPduFormat); CarrierSmsFilter smsFilter = new CarrierSmsFilter(mPdus, mDestPort, mPduFormat, packageName); CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(filterAggregator, smsFilter); new CarrierSmsFilterCallback(filterAggregator, smsFilter, packageName); filterAggregator.addToCallbacks(smsFilterCallback); smsFilter.filterSms(packageName, smsFilterCallback); smsFilter.filterSms(smsFilterCallback); } private List<String> getSystemAppForIntent(Intent intent) { Loading @@ -169,7 +175,7 @@ public class CarrierServicesSmsFilter { for (ResolveInfo info : receivers) { if (info.serviceInfo == null) { loge("Can't get service information from " + info); loge("getSystemAppForIntent: Can't get service information from " + info); continue; } String packageName = info.serviceInfo.packageName; Loading @@ -183,15 +189,15 @@ public class CarrierServicesSmsFilter { } private void log(String message) { Rlog.d(mLogTag, message); Rlog.d(mLogTag, message + ", id: " + mMessageId); } private void loge(String message) { Rlog.e(mLogTag, message); Rlog.e(mLogTag, message + ", id: " + mMessageId); } private void logv(String message) { Rlog.v(mLogTag, message); Rlog.v(mLogTag, message + ", id: " + mMessageId); } /** Loading @@ -213,24 +219,27 @@ public class CarrierServicesSmsFilter { private final String mSmsFormat; // Instantiated in filterSms. private volatile CarrierSmsFilterCallback mSmsFilterCallback; private final String mPackageName; CarrierSmsFilter(byte[][] pdus, int destPort, String smsFormat) { CarrierSmsFilter(byte[][] pdus, int destPort, String smsFormat, String packageName) { mPdus = pdus; mDestPort = destPort; mSmsFormat = smsFormat; mPackageName = packageName; } /** * Attempts to bind to a {@link CarrierMessagingService}. Filtering is initiated * asynchronously once the service is ready using {@link #onServiceReady()}. */ void filterSms(String carrierPackageName, CarrierSmsFilterCallback smsFilterCallback) { void filterSms(CarrierSmsFilterCallback smsFilterCallback) { mSmsFilterCallback = smsFilterCallback; if (!bindToCarrierMessagingService(mContext, carrierPackageName)) { loge("bindService() for carrier messaging service failed"); if (!bindToCarrierMessagingService(mContext, mPackageName)) { loge("CarrierSmsFilter::filterSms: bindService() for failed for " + mPackageName); smsFilterCallback.onFilterComplete(CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT); } else { logv("bindService() for carrier messaging service succeeded"); logv("CarrierSmsFilter::filterSms: bindService() for succeeded for " + mPackageName); } } Loading @@ -241,11 +250,11 @@ public class CarrierServicesSmsFilter { @Override public void onServiceReady() { try { log("onServiceReady: calling filterSms"); log("onServiceReady: calling filterSms on " + mPackageName); filterSms(new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort, mPhone.getSubId(), mSmsFilterCallback); } catch (RuntimeException e) { loge("Exception filtering the SMS: " + e); loge("Exception filtering the SMS with " + mPackageName + ": " + e); mSmsFilterCallback.onFilterComplete( CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT); } Loading @@ -260,12 +269,14 @@ public class CarrierServicesSmsFilter { private final FilterAggregator mFilterAggregator; private final CarrierMessagingServiceWrapper mCarrierMessagingServiceWrapper; private boolean mIsOnFilterCompleteCalled; private final String mPackageName; CarrierSmsFilterCallback(FilterAggregator filterAggregator, CarrierMessagingServiceWrapper carrierMessagingServiceWrapper) { CarrierMessagingServiceWrapper carrierMessagingServiceWrapper, String packageName) { mFilterAggregator = filterAggregator; mCarrierMessagingServiceWrapper = carrierMessagingServiceWrapper; mIsOnFilterCompleteCalled = false; mPackageName = packageName; } /** Loading @@ -273,7 +284,8 @@ public class CarrierServicesSmsFilter { */ @Override public void onFilterComplete(int result) { log("onFilterComplete called with result: " + result); log("CarrierSmsFilterCallback::onFilterComplete: Called from " + mPackageName + " with result: " + result); // in the case that timeout has already passed and triggered, but the initial callback // is run afterwards, we should not follow through if (!mIsOnFilterCompleteCalled) { Loading @@ -285,22 +297,26 @@ public class CarrierServicesSmsFilter { @Override public void onSendSmsComplete(int result, int messageRef) { loge("Unexpected onSendSmsComplete call with result: " + result); loge("onSendSmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } @Override public void onSendMultipartSmsComplete(int result, int[] messageRefs) { loge("Unexpected onSendMultipartSmsComplete call with result: " + result); loge("onSendMultipartSmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } @Override public void onSendMmsComplete(int result, byte[] sendConfPdu) { loge("Unexpected onSendMmsComplete call with result: " + result); loge("onSendMmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } @Override public void onDownloadMmsComplete(int result) { loge("Unexpected onDownloadMmsComplete call with result: " + result); loge("onDownloadMmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } } Loading Loading @@ -332,10 +348,12 @@ public class CarrierServicesSmsFilter { } //all onFilterCompletes called before timeout has triggered //remove the pending message log("onFilterComplete: called successfully with result = " + result); log("FilterAggregator::onFilterComplete: called successfully with result = " + result); mCallbackTimeoutHandler.removeMessages(EVENT_ON_FILTER_COMPLETE_NOT_CALLED); } else { log("onFilterComplete: waiting for pending filters " + mNumPendingFilters); log("FilterAggregator::onFilterComplete: waiting for pending filters " + mNumPendingFilters); } } } Loading @@ -357,7 +375,7 @@ public class CarrierServicesSmsFilter { @Override public void handleMessage(Message msg) { if (DBG) { log("CallbackTimeoutHandler handleMessage(" + msg.what + ")"); log("CallbackTimeoutHandler: handleMessage(" + msg.what + ")"); } switch(msg.what) { Loading src/java/com/android/internal/telephony/InboundSmsHandler.java +183 −69 File changed.Preview size limit exceeded, changes collapsed. Show changes tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java +1 −2 Original line number Diff line number Diff line Loading @@ -79,8 +79,7 @@ public class CarrierServicesSmsFilterTest extends TelephonyTest { } mCarrierServicesSmsFilterUT = new CarrierServicesSmsFilter( mContext, mPhone, new byte[][]{SMS_PDU}, 0, "3gpp", mFilterCallback, getClass().getSimpleName(), new LocalLog(64) ); 0, "3gpp", mFilterCallback, getClass().getSimpleName(), new LocalLog(10), 1L); } @After Loading Loading
src/java/com/android/internal/telephony/CarrierServicesSmsFilter.java +48 −30 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ public class CarrierServicesSmsFilter { private final String mLogTag; private final CallbackTimeoutHandler mCallbackTimeoutHandler; private final LocalLog mLocalLog; private final long mMessageId; private FilterAggregator mFilterAggregator; @VisibleForTesting Loading @@ -73,7 +74,8 @@ public class CarrierServicesSmsFilter { String pduFormat, CarrierServicesSmsFilterCallbackInterface carrierServicesSmsFilterCallback, String logTag, LocalLog localLog) { LocalLog localLog, long msgId) { mContext = context; mPhone = phone; mPdus = pdus; Loading @@ -83,6 +85,7 @@ public class CarrierServicesSmsFilter { mLogTag = logTag; mCallbackTimeoutHandler = new CallbackTimeoutHandler(); mLocalLog = localLog; mMessageId = msgId; } /** Loading @@ -102,7 +105,8 @@ public class CarrierServicesSmsFilter { } if (mFilterAggregator != null) { String errMsg = "Cannot reuse the same CarrierServiceSmsFilter object for filtering."; String errMsg = "filter: Cannot reuse the same CarrierServiceSmsFilter object for " + "filtering"; loge(errMsg); throw new RuntimeException(errMsg); } Loading Loading @@ -131,10 +135,11 @@ public class CarrierServicesSmsFilter { mContext.getPackageManager(), new Intent(CarrierMessagingService.SERVICE_INTERFACE)); } else { Rlog.e(mLogTag, "UiccCard not initialized."); loge("getCarrierAppPackageForFiltering: UiccCard not initialized"); } if (carrierPackages != null && carrierPackages.size() == 1) { log("Found carrier package."); log("getCarrierAppPackageForFiltering: Found carrier package: " + carrierPackages.get(0)); return Optional.of(carrierPackages.get(0)); } Loading @@ -144,21 +149,22 @@ public class CarrierServicesSmsFilter { getSystemAppForIntent(new Intent(CarrierMessagingService.SERVICE_INTERFACE)); if (systemPackages != null && systemPackages.size() == 1) { log("Found system package."); log("getCarrierAppPackageForFiltering: Found system package: " + systemPackages.get(0)); return Optional.of(systemPackages.get(0)); } logv("Unable to find carrier package: " + carrierPackages + ", nor systemPackages: " + systemPackages); logv("getCarrierAppPackageForFiltering: Unable to find carrierPackages: " + carrierPackages + " or systemPackages: " + systemPackages); return Optional.empty(); } private void filterWithPackage(String packageName, FilterAggregator filterAggregator) { CarrierSmsFilter smsFilter = new CarrierSmsFilter(mPdus, mDestPort, mPduFormat); CarrierSmsFilter smsFilter = new CarrierSmsFilter(mPdus, mDestPort, mPduFormat, packageName); CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(filterAggregator, smsFilter); new CarrierSmsFilterCallback(filterAggregator, smsFilter, packageName); filterAggregator.addToCallbacks(smsFilterCallback); smsFilter.filterSms(packageName, smsFilterCallback); smsFilter.filterSms(smsFilterCallback); } private List<String> getSystemAppForIntent(Intent intent) { Loading @@ -169,7 +175,7 @@ public class CarrierServicesSmsFilter { for (ResolveInfo info : receivers) { if (info.serviceInfo == null) { loge("Can't get service information from " + info); loge("getSystemAppForIntent: Can't get service information from " + info); continue; } String packageName = info.serviceInfo.packageName; Loading @@ -183,15 +189,15 @@ public class CarrierServicesSmsFilter { } private void log(String message) { Rlog.d(mLogTag, message); Rlog.d(mLogTag, message + ", id: " + mMessageId); } private void loge(String message) { Rlog.e(mLogTag, message); Rlog.e(mLogTag, message + ", id: " + mMessageId); } private void logv(String message) { Rlog.v(mLogTag, message); Rlog.v(mLogTag, message + ", id: " + mMessageId); } /** Loading @@ -213,24 +219,27 @@ public class CarrierServicesSmsFilter { private final String mSmsFormat; // Instantiated in filterSms. private volatile CarrierSmsFilterCallback mSmsFilterCallback; private final String mPackageName; CarrierSmsFilter(byte[][] pdus, int destPort, String smsFormat) { CarrierSmsFilter(byte[][] pdus, int destPort, String smsFormat, String packageName) { mPdus = pdus; mDestPort = destPort; mSmsFormat = smsFormat; mPackageName = packageName; } /** * Attempts to bind to a {@link CarrierMessagingService}. Filtering is initiated * asynchronously once the service is ready using {@link #onServiceReady()}. */ void filterSms(String carrierPackageName, CarrierSmsFilterCallback smsFilterCallback) { void filterSms(CarrierSmsFilterCallback smsFilterCallback) { mSmsFilterCallback = smsFilterCallback; if (!bindToCarrierMessagingService(mContext, carrierPackageName)) { loge("bindService() for carrier messaging service failed"); if (!bindToCarrierMessagingService(mContext, mPackageName)) { loge("CarrierSmsFilter::filterSms: bindService() for failed for " + mPackageName); smsFilterCallback.onFilterComplete(CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT); } else { logv("bindService() for carrier messaging service succeeded"); logv("CarrierSmsFilter::filterSms: bindService() for succeeded for " + mPackageName); } } Loading @@ -241,11 +250,11 @@ public class CarrierServicesSmsFilter { @Override public void onServiceReady() { try { log("onServiceReady: calling filterSms"); log("onServiceReady: calling filterSms on " + mPackageName); filterSms(new MessagePdu(Arrays.asList(mPdus)), mSmsFormat, mDestPort, mPhone.getSubId(), mSmsFilterCallback); } catch (RuntimeException e) { loge("Exception filtering the SMS: " + e); loge("Exception filtering the SMS with " + mPackageName + ": " + e); mSmsFilterCallback.onFilterComplete( CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT); } Loading @@ -260,12 +269,14 @@ public class CarrierServicesSmsFilter { private final FilterAggregator mFilterAggregator; private final CarrierMessagingServiceWrapper mCarrierMessagingServiceWrapper; private boolean mIsOnFilterCompleteCalled; private final String mPackageName; CarrierSmsFilterCallback(FilterAggregator filterAggregator, CarrierMessagingServiceWrapper carrierMessagingServiceWrapper) { CarrierMessagingServiceWrapper carrierMessagingServiceWrapper, String packageName) { mFilterAggregator = filterAggregator; mCarrierMessagingServiceWrapper = carrierMessagingServiceWrapper; mIsOnFilterCompleteCalled = false; mPackageName = packageName; } /** Loading @@ -273,7 +284,8 @@ public class CarrierServicesSmsFilter { */ @Override public void onFilterComplete(int result) { log("onFilterComplete called with result: " + result); log("CarrierSmsFilterCallback::onFilterComplete: Called from " + mPackageName + " with result: " + result); // in the case that timeout has already passed and triggered, but the initial callback // is run afterwards, we should not follow through if (!mIsOnFilterCompleteCalled) { Loading @@ -285,22 +297,26 @@ public class CarrierServicesSmsFilter { @Override public void onSendSmsComplete(int result, int messageRef) { loge("Unexpected onSendSmsComplete call with result: " + result); loge("onSendSmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } @Override public void onSendMultipartSmsComplete(int result, int[] messageRefs) { loge("Unexpected onSendMultipartSmsComplete call with result: " + result); loge("onSendMultipartSmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } @Override public void onSendMmsComplete(int result, byte[] sendConfPdu) { loge("Unexpected onSendMmsComplete call with result: " + result); loge("onSendMmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } @Override public void onDownloadMmsComplete(int result) { loge("Unexpected onDownloadMmsComplete call with result: " + result); loge("onDownloadMmsComplete: Unexpected call from " + mPackageName + " with result: " + result); } } Loading Loading @@ -332,10 +348,12 @@ public class CarrierServicesSmsFilter { } //all onFilterCompletes called before timeout has triggered //remove the pending message log("onFilterComplete: called successfully with result = " + result); log("FilterAggregator::onFilterComplete: called successfully with result = " + result); mCallbackTimeoutHandler.removeMessages(EVENT_ON_FILTER_COMPLETE_NOT_CALLED); } else { log("onFilterComplete: waiting for pending filters " + mNumPendingFilters); log("FilterAggregator::onFilterComplete: waiting for pending filters " + mNumPendingFilters); } } } Loading @@ -357,7 +375,7 @@ public class CarrierServicesSmsFilter { @Override public void handleMessage(Message msg) { if (DBG) { log("CallbackTimeoutHandler handleMessage(" + msg.what + ")"); log("CallbackTimeoutHandler: handleMessage(" + msg.what + ")"); } switch(msg.what) { Loading
src/java/com/android/internal/telephony/InboundSmsHandler.java +183 −69 File changed.Preview size limit exceeded, changes collapsed. Show changes
tests/telephonytests/src/com/android/internal/telephony/CarrierServicesSmsFilterTest.java +1 −2 Original line number Diff line number Diff line Loading @@ -79,8 +79,7 @@ public class CarrierServicesSmsFilterTest extends TelephonyTest { } mCarrierServicesSmsFilterUT = new CarrierServicesSmsFilter( mContext, mPhone, new byte[][]{SMS_PDU}, 0, "3gpp", mFilterCallback, getClass().getSimpleName(), new LocalLog(64) ); 0, "3gpp", mFilterCallback, getClass().getSimpleName(), new LocalLog(10), 1L); } @After Loading