diff options
-rwxr-xr-x | core/res/res/values/config.xml | 4 | ||||
-rwxr-xr-x | telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java | 19 |
2 files changed, 19 insertions, 4 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index d5a9643..8a7226e 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -653,6 +653,10 @@ If false, Content-disposition fragments are ignored --> <bool name="config_mms_content_disposition_support">true</bool> + <!-- If this value is true, we handle Samsung CDMA's message ID method --> + <bool name="config_smsSamsungCdmaAlternateMessageIDEncoding">false</bool> + + <!-- National Language Identifier codes for the following two config items. (from 3GPP TS 23.038 V9.1.1 Table 6.2.1.2.4.1): 0 - reserved diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java index 6743da0..5aeeef3 100755 --- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java @@ -878,10 +878,21 @@ public final class BearerData { paramBits -= EXPECTED_PARAM_SIZE; decodeSuccess = true; bData.messageType = inStream.read(4); - bData.messageId = inStream.read(8) << 8; - bData.messageId |= inStream.read(8); - bData.hasUserDataHeader = (inStream.read(1) == 1); - inStream.skip(3); + // Some Samsung CDMAphones parses messageId differently than other devices + // fix it here so that incoming sms works correctly + boolean hasSamsungCDMAAlternateMessageIDEncoding = Resources.getSystem() + .getBoolean(com.android.internal.R.bool.config_smsSamsungCdmaAlternateMessageIDEncoding); + if (hasSamsungCDMAAlternateMessageIDEncoding) { + inStream.skip(4); + bData.messageId = inStream.read(8) << 8; + bData.messageId |= inStream.read(8); + bData.hasUserDataHeader = (inStream.read(8) == 1); + } else { + bData.messageId = inStream.read(8) << 8; + bData.messageId |= inStream.read(8); + bData.hasUserDataHeader = (inStream.read(1) == 1); + inStream.skip(3); + } } if ((! decodeSuccess) || (paramBits > 0)) { Log.d(LOG_TAG, "MESSAGE_IDENTIFIER decode " + |