diff options
author | jsh <jsh@google.com> | 2009-11-05 17:00:15 -0800 |
---|---|---|
committer | jsh <jsh@google.com> | 2009-11-05 23:39:21 -0800 |
commit | 3e5c3a6db4c8ad4842ee1f6a2cdb04f6e107db57 (patch) | |
tree | a1482fba148439a218cf90e043f192961b74d591 /telephony | |
parent | 584bce31b62cdf3efd8a9eb40442c4cc612ce1e6 (diff) | |
download | frameworks_base-3e5c3a6db4c8ad4842ee1f6a2cdb04f6e107db57.zip frameworks_base-3e5c3a6db4c8ad4842ee1f6a2cdb04f6e107db57.tar.gz frameworks_base-3e5c3a6db4c8ad4842ee1f6a2cdb04f6e107db57.tar.bz2 |
Fix some SMS encode issues.
1. Spanish SMS 71-160 chars not sent. This was because calculateLength
allowed for single-segment EMS encoding, while encodeUserDataPayload
did not. For now, change calculateLength to match encodeUserDataPayload
(ie, fallback to UTF16 in this case). (b/2224849)
2. Unicode value of N w/tilde was incorrect. (b/2224849)
3. Add '\' and '/' to the list of valid separators in CDMA SMS numeric
addresses. (b/2236527)
Diffstat (limited to 'telephony')
3 files changed, 21 insertions, 2 deletions
diff --git a/telephony/java/com/android/internal/telephony/GsmAlphabet.java b/telephony/java/com/android/internal/telephony/GsmAlphabet.java index 461b694..ebdd220 100644 --- a/telephony/java/com/android/internal/telephony/GsmAlphabet.java +++ b/telephony/java/com/android/internal/telephony/GsmAlphabet.java @@ -658,7 +658,7 @@ public class GsmAlphabet { charToGsm.put('Z', i++); charToGsm.put('\u00c4', i++); charToGsm.put('\u00d6', i++); - charToGsm.put('\u0147', i++); + charToGsm.put('\u00d1', i++); charToGsm.put('\u00dc', i++); charToGsm.put('\u00a7', i++); 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 721729d..c7032ac 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/BearerData.java @@ -16,6 +16,10 @@ package com.android.internal.telephony.cdma.sms; +import static android.telephony.SmsMessage.ENCODING_16BIT; +import static android.telephony.SmsMessage.MAX_USER_DATA_BYTES; +import static android.telephony.SmsMessage.MAX_USER_DATA_BYTES_WITH_HEADER; + import android.util.Log; import android.util.SparseIntArray; @@ -417,6 +421,21 @@ public final class BearerData { } else { ted = com.android.internal.telephony.gsm.SmsMessage.calculateLength( msg, force7BitEncoding); + if (ted.msgCount == 1 && ted.codeUnitSize == SmsMessage.ENCODING_7BIT) { + // We don't support single-segment EMS, so calculate for 16-bit + // TODO: Consider supporting single-segment EMS + ted.codeUnitCount = msg.length(); + int octets = ted.codeUnitCount * 2; + if (octets > MAX_USER_DATA_BYTES) { + ted.msgCount = (octets / MAX_USER_DATA_BYTES_WITH_HEADER) + 1; + ted.codeUnitsRemaining = (MAX_USER_DATA_BYTES_WITH_HEADER + - (octets % MAX_USER_DATA_BYTES_WITH_HEADER))/2; + } else { + ted.msgCount = 1; + ted.codeUnitsRemaining = (MAX_USER_DATA_BYTES - octets)/2; + } + ted.codeUnitSize = ENCODING_16BIT; + } } return ted; } diff --git a/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java b/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java index f49b502..5f2e561 100644 --- a/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java +++ b/telephony/java/com/android/internal/telephony/cdma/sms/CdmaSmsAddress.java @@ -135,7 +135,7 @@ public class CdmaSmsAddress extends SmsAddress { }; private static final char[] numericCharsSugar = { - '(', ')', ' ', '-', '+', '.' + '(', ')', ' ', '-', '+', '.', '/', '\\' }; private static final SparseBooleanArray numericCharDialableMap = new SparseBooleanArray ( |