diff options
Diffstat (limited to 'telephony/java/android')
-rw-r--r-- | telephony/java/android/telephony/SmsManager.java | 4 | ||||
-rw-r--r-- | telephony/java/android/telephony/SmsMessage.java | 163 | ||||
-rw-r--r-- | telephony/java/android/telephony/gsm/SmsMessage.java | 98 |
3 files changed, 53 insertions, 212 deletions
diff --git a/telephony/java/android/telephony/SmsManager.java b/telephony/java/android/telephony/SmsManager.java index 5bdc146..44bdaeb 100644 --- a/telephony/java/android/telephony/SmsManager.java +++ b/telephony/java/android/telephony/SmsManager.java @@ -325,7 +325,7 @@ public final class SmsManager { * * {@hide} */ - public ArrayList<SmsMessage> getAllMessagesFromIcc() { + public static ArrayList<SmsMessage> getAllMessagesFromIcc() { List<SmsRawData> records = null; try { @@ -470,7 +470,7 @@ public final class SmsManager { * <code>getAllMessagesFromIcc</code> * @return <code>ArrayList</code> of <code>SmsMessage</code> objects. */ - private ArrayList<SmsMessage> createMessageListFromRawRecords(List<SmsRawData> records) { + private static ArrayList<SmsMessage> createMessageListFromRawRecords(List<SmsRawData> records) { ArrayList<SmsMessage> messages = new ArrayList<SmsMessage>(); if (records != null) { int count = records.size(); diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java index e75d96d..fc8a145 100644 --- a/telephony/java/android/telephony/SmsMessage.java +++ b/telephony/java/android/telephony/SmsMessage.java @@ -36,7 +36,6 @@ import static android.telephony.TelephonyManager.PHONE_TYPE_CDMA; * A Short Message Service message. */ public class SmsMessage { - private static final boolean LOCAL_DEBUG = true; private static final String LOG_TAG = "SMS"; /** @@ -78,6 +77,18 @@ public class SmsMessage { */ public static final int MAX_USER_DATA_SEPTETS_WITH_HEADER = 153; + /** + * Indicates a 3GPP format SMS message. + * @hide pending API council approval + */ + public static final String FORMAT_3GPP = "3gpp"; + + /** + * Indicates a 3GPP2 format SMS message. + * @hide pending API council approval + */ + public static final String FORMAT_3GPP2 = "3gpp2"; + /** Contains actual SmsMessage. Only public for debugging and for framework layer. * * @hide @@ -106,30 +117,47 @@ public class SmsMessage { } - /** - * Constructor - * - * @hide - */ - public SmsMessage() { - this(getSmsFacility()); - } - private SmsMessage(SmsMessageBase smb) { mWrappedSmsMessage = smb; } /** * Create an SmsMessage from a raw PDU. + * + * <p><b>This method will soon be deprecated</b> and all applications which handle + * incoming SMS messages by processing the {@code SMS_RECEIVED_ACTION} broadcast + * intent <b>must</b> now pass the new {@code format} String extra from the intent + * into the new method {@code createFromPdu(byte[], String)} which takes an + * extra format parameter. This is required in order to correctly decode the PDU on + * devices that require support for both 3GPP and 3GPP2 formats at the same time, + * such as dual-mode GSM/CDMA and CDMA/LTE phones. */ public static SmsMessage createFromPdu(byte[] pdu) { - SmsMessageBase wrappedMessage; int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); + String format = (PHONE_TYPE_CDMA == activePhone) ? FORMAT_3GPP2 : FORMAT_3GPP; + return createFromPdu(pdu, format); + } - if (PHONE_TYPE_CDMA == activePhone) { + /** + * Create an SmsMessage from a raw PDU with the specified message format. The + * message format is passed in the {@code SMS_RECEIVED_ACTION} as the {@code format} + * String extra, and will be either "3gpp" for GSM/UMTS/LTE messages in 3GPP format + * or "3gpp2" for CDMA/LTE messages in 3GPP2 format. + * + * @param pdu the message PDU from the SMS_RECEIVED_ACTION intent + * @param format the format extra from the SMS_RECEIVED_ACTION intent + * @hide pending API council approval + */ + public static SmsMessage createFromPdu(byte[] pdu, String format) { + SmsMessageBase wrappedMessage; + + if (FORMAT_3GPP2.equals(format)) { wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromPdu(pdu); - } else { + } else if (FORMAT_3GPP.equals(format)) { wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.createFromPdu(pdu); + } else { + Log.e(LOG_TAG, "createFromPdu(): unsupported message format " + format); + return null; } return new SmsMessage(wrappedMessage); @@ -144,57 +172,19 @@ public class SmsMessage { * * {@hide} */ - public static SmsMessage newFromCMT(String[] lines){ - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMT(lines); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMT(lines); - } - - return new SmsMessage(wrappedMessage); - } - - /** @hide */ - protected static SmsMessage newFromCMTI(String line) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMTI(line); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMTI(line); - } - - return new SmsMessage(wrappedMessage); - } - - /** @hide */ - public static SmsMessage newFromCDS(String line) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCDS(line); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCDS(line); - } + public static SmsMessage newFromCMT(String[] lines) { + // received SMS in 3GPP format + SmsMessageBase wrappedMessage = + com.android.internal.telephony.gsm.SmsMessage.newFromCMT(lines); return new SmsMessage(wrappedMessage); } /** @hide */ public static SmsMessage newFromParcel(Parcel p) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromParcel(p); - } + // received SMS in 3GPP2 format + SmsMessageBase wrappedMessage = + com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p); return new SmsMessage(wrappedMessage); } @@ -227,6 +217,9 @@ public class SmsMessage { /** * Get the TP-Layer-Length for the given SMS-SUBMIT PDU Basically, the * length in bytes (not hex chars) less the SMSC header + * + * FIXME: This method is only used by a CTS test case that isn't run on CDMA devices. + * We should probably deprecate it and remove the obsolete test case. */ public static int getTPLayerLengthForPDU(String pdu) { int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); @@ -381,34 +374,6 @@ public class SmsMessage { * @return a <code>SubmitPdu</code> containing the encoded SC * address, if applicable, and the encoded message. * Returns null on encode error. - * @hide - */ - public static SubmitPdu getSubmitPdu(String scAddress, - String destinationAddress, String message, - boolean statusReportRequested, byte[] header) { - SubmitPduBase spb; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - spb = com.android.internal.telephony.cdma.SmsMessage.getSubmitPdu(scAddress, - destinationAddress, message, statusReportRequested, - SmsHeader.fromByteArray(header)); - } else { - spb = com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(scAddress, - destinationAddress, message, statusReportRequested, header); - } - - return new SubmitPdu(spb); - } - - /** - * Get an SMS-SUBMIT PDU for a destination address and a message. - * This method will not attempt to use any GSM national language 7 bit encodings. - * - * @param scAddress Service Centre address. Null means use default. - * @return a <code>SubmitPdu</code> containing the encoded SC - * address, if applicable, and the encoded message. - * Returns null on encode error. */ public static SubmitPdu getSubmitPdu(String scAddress, String destinationAddress, String message, boolean statusReportRequested) { @@ -603,15 +568,6 @@ public class SmsMessage { } /** - * Return the user data header (UDH). - * - * @hide - */ - public SmsHeader getUserDataHeader() { - return mWrappedSmsMessage.getUserDataHeader(); - } - - /** * Returns the raw PDU for the message. * * @return the raw PDU for the message. @@ -646,7 +602,6 @@ public class SmsMessage { * SmsManager.STATUS_ON_ICC_UNSENT */ public int getStatusOnIcc() { - return mWrappedSmsMessage.getStatusOnIcc(); } @@ -666,7 +621,6 @@ public class SmsMessage { * SmsMessage was not created from a ICC SMS EF record. */ public int getIndexOnIcc() { - return mWrappedSmsMessage.getIndexOnIcc(); } @@ -704,19 +658,4 @@ public class SmsMessage { public boolean isReplyPathPresent() { return mWrappedSmsMessage.isReplyPathPresent(); } - - /** This method returns the reference to a specific - * SmsMessage object, which is used for accessing its static methods. - * @return Specific SmsMessage. - * - * @hide - */ - private static final SmsMessageBase getSmsFacility(){ - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - if (PHONE_TYPE_CDMA == activePhone) { - return new com.android.internal.telephony.cdma.SmsMessage(); - } else { - return new com.android.internal.telephony.gsm.SmsMessage(); - } - } } diff --git a/telephony/java/android/telephony/gsm/SmsMessage.java b/telephony/java/android/telephony/gsm/SmsMessage.java index 4af99a6..8d86ec2 100644 --- a/telephony/java/android/telephony/gsm/SmsMessage.java +++ b/telephony/java/android/telephony/gsm/SmsMessage.java @@ -166,104 +166,6 @@ public class SmsMessage { } /** - * TS 27.005 3.4.1 lines[0] and lines[1] are the two lines read from the - * +CMT unsolicited response (PDU mode, of course) - * +CMT: [<alpha>],<length><CR><LF><pdu> - * - * Only public for debugging and for RIL - * @deprecated Use android.telephony.SmsMessage. - * {@hide} - */ - @Deprecated - public static SmsMessage newFromCMT(String[] lines){ - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMT(lines); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMT(lines); - } - - return new SmsMessage(wrappedMessage); - } - - /** @deprecated Use android.telephony.SmsMessage. - * @hide */ - @Deprecated - protected static SmsMessage newFromCMTI(String line) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCMTI(line); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCMTI(line); - } - - return new SmsMessage(wrappedMessage); - } - - /** @deprecated Use android.telephony.SmsMessage. - * @hide */ - @Deprecated - public static SmsMessage newFromCDS(String line) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromCDS(line); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromCDS(line); - } - - return new SmsMessage(wrappedMessage); - } - - /** @deprecated Use android.telephony.SmsMessage. - * @hide */ - @Deprecated - public static SmsMessage newFromParcel(Parcel p) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.newFromParcel(p); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.newFromParcel(p); - } - - return new SmsMessage(wrappedMessage); - } - - /** - * Create an SmsMessage from an SMS EF record. - * - * @param index Index of SMS record. This should be index in ArrayList - * returned by SmsManager.getAllMessagesFromSim + 1. - * @param data Record data. - * @return An SmsMessage representing the record. - * - * @deprecated Use android.telephony.SmsMessage. - * @hide - */ - @Deprecated - public static SmsMessage createFromEfRecord(int index, byte[] data) { - SmsMessageBase wrappedMessage; - int activePhone = TelephonyManager.getDefault().getCurrentPhoneType(); - - if (PHONE_TYPE_CDMA == activePhone) { - wrappedMessage = com.android.internal.telephony.cdma.SmsMessage.createFromEfRecord( - index, data); - } else { - wrappedMessage = com.android.internal.telephony.gsm.SmsMessage.createFromEfRecord( - index, data); - } - - return new SmsMessage(wrappedMessage); - } - - /** * Get the TP-Layer-Length for the given SMS-SUBMIT PDU Basically, the * length in bytes (not hex chars) less the SMSC header * @deprecated Use android.telephony.SmsMessage. |