diff options
author | John Wang <johnwang@google.com> | 2010-12-10 14:25:27 -0800 |
---|---|---|
committer | John Wang <johnwang@google.com> | 2010-12-10 15:29:03 -0800 |
commit | c049f9ad5b4f5bc32f368646e624aef7707b7252 (patch) | |
tree | 9f8a83709d00140db026fff2adb5d5c84c30b0ed /telephony | |
parent | dfcaeb1677cef0d7bf437f5f0432b6f07b223690 (diff) | |
download | frameworks_base-c049f9ad5b4f5bc32f368646e624aef7707b7252.zip frameworks_base-c049f9ad5b4f5bc32f368646e624aef7707b7252.tar.gz frameworks_base-c049f9ad5b4f5bc32f368646e624aef7707b7252.tar.bz2 |
Block SMS service for non-sms-capable device.
If device doesn't support sms service, SMSDispatcher
will ignore incoming SMS in dispatching messge and return
ERROR_NO_SERVICE in sending sms messgae.
bug: 3250029
bug: 3038102
Change-Id: Ic72a9192aa128c43cf31da04907620bc680656c6
Diffstat (limited to 'telephony')
4 files changed, 52 insertions, 2 deletions
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 38f57c9..4424e5b 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -954,4 +954,20 @@ public class TelephonyManager { return mContext.getResources().getBoolean( com.android.internal.R.bool.config_voice_capable); } + + /** + * @return true if the current device supports sms service. + * <p> + * If true, this means that the device supports both sending and + * receiving sms via the telephony network. + * <p> + * Note: Voicemail waiting sms, cell broadcasting sms, and MMS are + * disabled when device doesn't support sms. + * + * @hide pending API review + */ + public boolean isSmsCapable() { + return mContext.getResources().getBoolean( + com.android.internal.R.bool.config_sms_capable); + } } diff --git a/telephony/java/com/android/internal/telephony/SMSDispatcher.java b/telephony/java/com/android/internal/telephony/SMSDispatcher.java index ec49a19..e7cfe75 100644 --- a/telephony/java/com/android/internal/telephony/SMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/SMSDispatcher.java @@ -156,6 +156,9 @@ public abstract class SMSDispatcher extends Handler { protected boolean mStorageAvailable = true; protected boolean mReportMemoryStatusPending = false; + /* Flag indicating whether the current device allows sms service */ + protected boolean mSmsCapable = true; + protected static int getNextConcatenatedRef() { sConcatenatedRef += 1; return sConcatenatedRef; @@ -249,6 +252,9 @@ public abstract class SMSDispatcher extends Handler { filter.addAction(Intent.ACTION_DEVICE_STORAGE_FULL); filter.addAction(Intent.ACTION_DEVICE_STORAGE_NOT_FULL); mContext.registerReceiver(mResultReceiver, filter); + + mSmsCapable = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_sms_capable); } public void dispose() { @@ -682,6 +688,7 @@ public abstract class SMSDispatcher extends Handler { * <code>RESULT_ERROR_GENERIC_FAILURE</code><br> * <code>RESULT_ERROR_RADIO_OFF</code><br> * <code>RESULT_ERROR_NULL_PDU</code><br> + * <code>RESULT_ERROR_NO_SERVICE</code><br>. * For <code>RESULT_ERROR_GENERIC_FAILURE</code> the sentIntent may include * the extra "errorCode" containing a radio technology specific value, * generally only useful for troubleshooting.<br> @@ -709,6 +716,7 @@ public abstract class SMSDispatcher extends Handler { * <code>RESULT_ERROR_GENERIC_FAILURE</code><br> * <code>RESULT_ERROR_RADIO_OFF</code><br> * <code>RESULT_ERROR_NULL_PDU</code><br> + * <code>RESULT_ERROR_NO_SERVICE</code><br>. * For <code>RESULT_ERROR_GENERIC_FAILURE</code> the sentIntent may include * the extra "errorCode" containing a radio technology specific value, * generally only useful for troubleshooting.<br> @@ -737,7 +745,8 @@ public abstract class SMSDispatcher extends Handler { * or one of these errors: * <code>RESULT_ERROR_GENERIC_FAILURE</code> * <code>RESULT_ERROR_RADIO_OFF</code> - * <code>RESULT_ERROR_NULL_PDU</code>. + * <code>RESULT_ERROR_NULL_PDU</code> + * <code>RESULT_ERROR_NO_SERVICE</code>. * The per-application based SMS control checks sentIntent. If sentIntent * is NULL the caller will be checked against all unknown applications, * which cause smaller number of SMS to be sent in checking period. @@ -763,7 +772,8 @@ public abstract class SMSDispatcher extends Handler { * or one of these errors: * <code>RESULT_ERROR_GENERIC_FAILURE</code> * <code>RESULT_ERROR_RADIO_OFF</code> - * <code>RESULT_ERROR_NULL_PDU</code>. + * <code>RESULT_ERROR_NULL_PDU</code> + * <code>RESULT_ERROR_NO_SERVICE</code>. * The per-application based SMS control checks sentIntent. If sentIntent * is NULL the caller will be checked against all unknown applications, * which cause smaller number of SMS to be sent in checking period. @@ -773,6 +783,16 @@ public abstract class SMSDispatcher extends Handler { */ protected void sendRawPdu(byte[] smsc, byte[] pdu, PendingIntent sentIntent, PendingIntent deliveryIntent) { + if (!mSmsCapable) { + if (sentIntent != null) { + try { + sentIntent.send(RESULT_ERROR_NO_SERVICE); + } catch (CanceledException ex) {} + } + Log.d(TAG, "Device does not support sms service."); + return; + } + if (pdu == null) { if (sentIntent != null) { try { diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java index 53555d8..01234b0 100644 --- a/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java @@ -107,6 +107,13 @@ final class CdmaSMSDispatcher extends SMSDispatcher { return Activity.RESULT_OK; } + if (!mSmsCapable) { + // Device doesn't support SMS service, + Log.d(TAG, "Received short message on device which doesn't support " + + "SMS service. Ignored."); + return Intents.RESULT_SMS_HANDLED; + } + // See if we have a network duplicate SMS. SmsMessage sms = (SmsMessage) smsb; mLastDispatchedSmsFingerprint = sms.getIncomingSmsFingerprint(); diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java index 70f8f86..497c552 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +++ b/telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java @@ -110,6 +110,13 @@ final class GsmSMSDispatcher extends SMSDispatcher { return Intents.RESULT_SMS_HANDLED; } + if (!mSmsCapable) { + // Device doesn't support SMS service, + Log.d(TAG, "Received short message on device which doesn't support " + + "SMS service. Ignored."); + return Intents.RESULT_SMS_HANDLED; + } + // Special case the message waiting indicator messages if (sms.isMWISetMessage()) { mGsmPhone.updateMessageWaitingIndicator(true); |