am 95434bfa: Allow fragmentText to be called for singleton CDMA messages.

Merge commit '95434bfaee62161ce02012c6424f0c0c8fffccb5' into eclair-plus-aosp

* commit '95434bfaee62161ce02012c6424f0c0c8fffccb5':
  Allow fragmentText to be called for singleton CDMA messages.
This commit is contained in:
Tammo Spalink
2009-08-31 20:49:10 -07:00
committed by Android Git Automerger
3 changed files with 45 additions and 2 deletions

View File

@@ -309,8 +309,13 @@ public class SmsMessage {
while (pos < textLen) {
int nextPos = 0; // Counts code units.
if (ted.codeUnitSize == ENCODING_7BIT) {
// For multi-segment messages, CDMA 7bit equals GSM 7bit encoding (EMS mode).
nextPos = GsmAlphabet.findGsmSeptetLimitIndex(text, pos, limit);
if (activePhone == PHONE_TYPE_CDMA && ted.msgCount == 1) {
// For a singleton CDMA message, the encoding must be ASCII...
nextPos = pos + Math.min(limit, textLen - pos);
} else {
// For multi-segment messages, CDMA 7bit equals GSM 7bit encoding (EMS mode).
nextPos = GsmAlphabet.findGsmSeptetLimitIndex(text, pos, limit);
}
} else { // Assume unicode.
nextPos = pos + Math.min(limit / 2, textLen - pos);
}

View File

@@ -116,6 +116,16 @@ public abstract class SmsMessageBase {
* android.telephony.SmsMessage ENCODING_*).
*/
public int codeUnitSize;
@Override
public String toString() {
return "TextEncodingDetails " +
"{ msgCount=" + msgCount +
", codeUnitCount=" + codeUnitCount +
", codeUnitsRemaining=" + codeUnitsRemaining +
", codeUnitSize=" + codeUnitSize +
" }";
}
}
// TODO(): This class is duplicated in SmsMessage.java. Refactor accordingly.

View File

@@ -32,6 +32,8 @@ import android.test.suitebuilder.annotation.SmallTest;
import android.util.Log;
import java.util.ArrayList;
public class CdmaSmsTest extends AndroidTestCase {
private final static String LOG_TAG = "XXX CdmaSmsTest XXX";
@@ -815,4 +817,30 @@ public class CdmaSmsTest extends AndroidTestCase {
BearerData revBearerData = BearerData.decode(encodedSms);
assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
}
@SmallTest
public void testFragmentText() throws Exception {
// Valid 160 character ASCII text.
String text1 = "123456789012345678901234567890123456789012345678901234567890" +
"1234567890123456789012345678901234567890123456789012345678901234567890" +
"12345678901234567890123456789[";
TextEncodingDetails ted = SmsMessage.calculateLength(text1, false);
assertEquals(ted.msgCount, 1);
assertEquals(ted.codeUnitCount, 160);
assertEquals(ted.codeUnitSize, 1);
ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1);
assertEquals(fragments.size(), 1);
// Valid 160 character GSM text -- the last character is
// non-ASCII, and so this will currently generate a singleton
// EMS message, which is not necessarily supported by Verizon.
String text2 = "123456789012345678901234567890123456789012345678901234567890" +
"1234567890123456789012345678901234567890123456789012345678901234567890" +
"12345678901234567890123456789\u00a3"; // Trailing pound-currency sign.
ted = SmsMessage.calculateLength(text2, false);
assertEquals(ted.msgCount, 1);
assertEquals(ted.codeUnitCount, 160);
assertEquals(ted.codeUnitSize, 1);
fragments = android.telephony.SmsMessage.fragmentText(text2);
assertEquals(fragments.size(), 1);
}
}