summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorJohn Wang <johnwang@google.com>2010-12-10 14:25:27 -0800
committerJohn Wang <johnwang@google.com>2010-12-10 15:29:03 -0800
commitc049f9ad5b4f5bc32f368646e624aef7707b7252 (patch)
tree9f8a83709d00140db026fff2adb5d5c84c30b0ed /telephony
parentdfcaeb1677cef0d7bf437f5f0432b6f07b223690 (diff)
downloadframeworks_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')
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java16
-rw-r--r--telephony/java/com/android/internal/telephony/SMSDispatcher.java24
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java7
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java7
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);