10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2010 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage android.telephony; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcel; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Parcelable; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Parcelable object containing a received cell broadcast message. There are four different types 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * of Cell Broadcast messages: 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <ul> 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <li>opt-in informational broadcasts, e.g. news, weather, stock quotes, sports scores</li> 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <li>cell information messages, broadcast on channel 50, indicating the current cell name for 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * roaming purposes (required to display on the idle screen in Brazil)</li> 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <li>emergency broadcasts for the Japanese Earthquake and Tsunami Warning System (ETWS)</li> 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <li>emergency broadcasts for the American Commercial Mobile Alert Service (CMAS)</li> 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * </ul> 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <p>There are also four different CB message formats: GSM, ETWS Primary Notification (GSM only), 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * UMTS, and CDMA. Some fields are only applicable for some message formats. Other fields were 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unified under a common name, avoiding some names, such as "Message Identifier", that refer to 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * two completely different concepts in 3GPP and CDMA. 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <p>The GSM/UMTS Message Identifier field is available via {@link #getServiceCategory}, the name 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * of the equivalent field in CDMA. In both cases the service category is a 16-bit value, but 3GPP 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * and 3GPP2 have completely different meanings for the respective values. For ETWS and CMAS, the 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * application should 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <p>The CDMA Message Identifier field is available via {@link #getSerialNumber}, which is used 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * to detect the receipt of a duplicate message to be discarded. In CDMA, the message ID is 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unique to the current PLMN. In GSM/UMTS, there is a 16-bit serial number containing a 2-bit 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Geographical Scope field which indicates whether the 10-bit message code and 4-bit update number 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * are considered unique to the PLMN, to the current cell, or to the current Location Area (or 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Service Area in UMTS). The relevant values are concatenated into a single String which will be 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * unique if the messages are not duplicates. 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <p>The SMS dispatcher does not detect duplicate messages. However, it does concatenate the 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * pages of a GSM multi-page cell broadcast into a single SmsCbMessage object. 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * <p>Interested applications with {@code RECEIVE_SMS_PERMISSION} can register to receive 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@code SMS_CB_RECEIVED_ACTION} broadcast intents for incoming non-emergency broadcasts. 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Only system applications such as the CellBroadcastReceiver may receive notifications for 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * emergency broadcasts (ETWS and CMAS). This is intended to prevent any potential for delays or 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * interference with the immediate display of the alert message and playing of the alert sound and 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * vibration pattern, which could be caused by poorly written or malicious non-system code. 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @hide 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepublic class SmsCbMessage implements Parcelable { 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville protected static final String LOG_TAG = "SMSCB"; 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Cell wide geographical scope with immediate display (GSM/UMTS only). */ 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE_IMMEDIATE = 0; 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** PLMN wide geographical scope (GSM/UMTS and all CDMA broadcasts). */ 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int GEOGRAPHICAL_SCOPE_PLMN_WIDE = 1; 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Location / service area wide geographical scope (GSM/UMTS only). */ 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int GEOGRAPHICAL_SCOPE_LA_WIDE = 2; 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Cell wide geographical scope (GSM/UMTS only). */ 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int GEOGRAPHICAL_SCOPE_CELL_WIDE = 3; 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** GSM or UMTS format cell broadcast. */ 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int MESSAGE_FORMAT_3GPP = 1; 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** CDMA format cell broadcast. */ 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int MESSAGE_FORMAT_3GPP2 = 2; 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Normal message priority. */ 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int MESSAGE_PRIORITY_NORMAL = 0; 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Interactive message priority. */ 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int MESSAGE_PRIORITY_INTERACTIVE = 1; 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Urgent message priority. */ 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int MESSAGE_PRIORITY_URGENT = 2; 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Emergency message priority. */ 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final int MESSAGE_PRIORITY_EMERGENCY = 3; 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Format of this message (for interpretation of service category values). */ 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final int mMessageFormat; 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Geographical scope of broadcast. */ 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final int mGeographicalScope; 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Serial number of broadcast (message identifier for CDMA, geographical scope + message code + 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * update number for GSM/UMTS). The serial number plus the location code uniquely identify 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * a cell broadcast for duplicate detection. 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final int mSerialNumber; 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Location identifier for this message. It consists of the current operator MCC/MNC as a 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 5 or 6-digit decimal string. In addition, for GSM/UMTS, if the Geographical Scope of the 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * message is not binary 01, the Location Area is included for comparison. If the GS is 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 00 or 11, the Cell ID is also included. LAC and Cell ID are -1 if not specified. 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final SmsCbLocation mLocation; 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 16-bit CDMA service category or GSM/UMTS message identifier. For ETWS and CMAS warnings, 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the information provided by the category is also available via {@link #getEtwsWarningInfo()} 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * or {@link #getCmasWarningInfo()}. 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final int mServiceCategory; 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Message language, as a two-character string, e.g. "en". */ 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final String mLanguage; 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Message body, as a String. */ 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final String mBody; 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Message priority (including emergency priority). */ 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final int mPriority; 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** ETWS warning notification information (ETWS warnings only). */ 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final SmsCbEtwsInfo mEtwsWarningInfo; 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** CMAS warning notification information (CMAS warnings only). */ 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private final SmsCbCmasInfo mCmasWarningInfo; 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Create a new SmsCbMessage with the specified data. 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbMessage(int messageFormat, int geographicalScope, int serialNumber, 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville SmsCbLocation location, int serviceCategory, String language, String body, 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int priority, SmsCbEtwsInfo etwsWarningInfo, SmsCbCmasInfo cmasWarningInfo) { 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMessageFormat = messageFormat; 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGeographicalScope = geographicalScope; 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSerialNumber = serialNumber; 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLocation = location; 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceCategory = serviceCategory; 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLanguage = language; 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mBody = body; 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPriority = priority; 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEtwsWarningInfo = etwsWarningInfo; 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmasWarningInfo = cmasWarningInfo; 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** Create a new SmsCbMessage object from a Parcel. */ 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbMessage(Parcel in) { 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mMessageFormat = in.readInt(); 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mGeographicalScope = in.readInt(); 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mSerialNumber = in.readInt(); 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLocation = new SmsCbLocation(in); 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mServiceCategory = in.readInt(); 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLanguage = in.readString(); 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mBody = in.readString(); 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mPriority = in.readInt(); 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int type = in.readInt(); 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (type) { 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case 'E': 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // unparcel ETWS warning information 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEtwsWarningInfo = new SmsCbEtwsInfo(in); 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmasWarningInfo = null; 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case 'C': 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // unparcel CMAS warning information 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEtwsWarningInfo = null; 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmasWarningInfo = new SmsCbCmasInfo(in); 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEtwsWarningInfo = null; 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmasWarningInfo = null; 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Flatten this object into a Parcel. 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param dest The Parcel in which the object should be written. 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param flags Additional flags about how the object should be written (ignored). 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void writeToParcel(Parcel dest, int flags) { 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt(mMessageFormat); 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt(mGeographicalScope); 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt(mSerialNumber); 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mLocation.writeToParcel(dest, flags); 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt(mServiceCategory); 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeString(mLanguage); 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeString(mBody); 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt(mPriority); 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (mEtwsWarningInfo != null) { 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parcel ETWS warning information 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt('E'); 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mEtwsWarningInfo.writeToParcel(dest, flags); 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else if (mCmasWarningInfo != null) { 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parcel CMAS warning information 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt('C'); 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmasWarningInfo.writeToParcel(dest, flags); 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // no ETWS or CMAS warning information 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville dest.writeInt('0'); 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public static final Parcelable.Creator<SmsCbMessage> CREATOR 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville = new Parcelable.Creator<SmsCbMessage>() { 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbMessage createFromParcel(Parcel in) { 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new SmsCbMessage(in); 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbMessage[] newArray(int size) { 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new SmsCbMessage[size]; 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville }; 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return the geographical scope of this message (GSM/UMTS only). 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return Geographical scope 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getGeographicalScope() { 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mGeographicalScope; 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return the broadcast serial number of broadcast (message identifier for CDMA, or 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * geographical scope + message code + update number for GSM/UMTS). The serial number plus 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the location code uniquely identify a cell broadcast for duplicate detection. 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return the 16-bit CDMA message identifier or GSM/UMTS serial number 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getSerialNumber() { 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mSerialNumber; 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return the location identifier for this message, consisting of the MCC/MNC as a 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 5 or 6-digit decimal string. In addition, for GSM/UMTS, if the Geographical Scope of the 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * message is not binary 01, the Location Area is included. If the GS is 00 or 11, the 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * cell ID is also included. The {@link SmsCbLocation} object includes a method to test 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * if the location is included within another location area or within a PLMN and CellLocation. 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return the geographical location code for duplicate message detection 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbLocation getLocation() { 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mLocation; 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return the 16-bit CDMA service category or GSM/UMTS message identifier. The interpretation 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * of the category is radio technology specific. For ETWS and CMAS warnings, the information 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * provided by the category is available via {@link #getEtwsWarningInfo()} or 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@link #getCmasWarningInfo()} in a radio technology independent format. 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return the radio technology specific service category 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getServiceCategory() { 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mServiceCategory; 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get the ISO-639-1 language code for this message, or null if unspecified 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return Language code 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getLanguageCode() { 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mLanguage; 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get the body of this message, or null if no body available 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return Body, or null 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String getMessageBody() { 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mBody; 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get the message format ({@link #MESSAGE_FORMAT_3GPP} or {@link #MESSAGE_FORMAT_3GPP2}). 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an integer representing 3GPP or 3GPP2 message format 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getMessageFormat() { 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mMessageFormat; 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Get the message priority. Normal broadcasts return {@link #MESSAGE_PRIORITY_NORMAL} 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * and emergency broadcasts return {@link #MESSAGE_PRIORITY_EMERGENCY}. CDMA also may return 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * {@link #MESSAGE_PRIORITY_INTERACTIVE} or {@link #MESSAGE_PRIORITY_URGENT}. 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an integer representing the message priority 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int getMessagePriority() { 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mPriority; 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If this is an ETWS warning notification then this method will return an object containing 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the ETWS warning type, the emergency user alert flag, and the popup flag. If this is an 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * ETWS primary notification (GSM only), there will also be a 7-byte timestamp and 43-byte 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * digital signature. As of Release 10, 3GPP TS 23.041 states that the UE shall ignore the 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * ETWS primary notification timestamp and digital signature if received. 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an SmsCbEtwsInfo object, or null if this is not an ETWS warning notification 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbEtwsInfo getEtwsWarningInfo() { 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mEtwsWarningInfo; 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If this is a CMAS warning notification then this method will return an object containing 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the CMAS message class, category, response type, severity, urgency and certainty. 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * The message class is always present. Severity, urgency and certainty are present for CDMA 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * warning notifications containing a type 1 elements record and for GSM and UMTS warnings 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * except for the Presidential-level alert category. Category and response type are only 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * available for CDMA notifications containing a type 1 elements record. 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return an SmsCbCmasInfo object, or null if this is not a CMAS warning notification 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public SmsCbCmasInfo getCmasWarningInfo() { 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCmasWarningInfo; 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return whether this message is an emergency (PWS) message type. 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the message is a public warning notification; false otherwise 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isEmergencyMessage() { 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mPriority == MESSAGE_PRIORITY_EMERGENCY; 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return whether this message is an ETWS warning alert. 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the message is an ETWS warning notification; false otherwise 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isEtwsMessage() { 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mEtwsWarningInfo != null; 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Return whether this message is a CMAS warning alert. 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the message is a CMAS warning notification; false otherwise 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public boolean isCmasMessage() { 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return mCmasWarningInfo != null; 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public String toString() { 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return "SmsCbMessage{geographicalScope=" + mGeographicalScope + ", serialNumber=" 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + mSerialNumber + ", location=" + mLocation + ", serviceCategory=" 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + mServiceCategory + ", language=" + mLanguage + ", body=" + mBody 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + ", priority=" + mPriority 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + (mEtwsWarningInfo != null ? (", " + mEtwsWarningInfo.toString()) : "") 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville + (mCmasWarningInfo != null ? (", " + mCmasWarningInfo.toString()) : "") + '}'; 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Describe the kinds of special objects contained in the marshalled representation. 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return a bitmask indicating this Parcelable contains no special objects 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public int describeContents() { 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return 0; 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 383