1c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby/* 2c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Copyright (C) 2011 The Android Open Source Project 3c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 4c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * use this file except in compliance with the License. You may obtain a copy of 6c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * the License at 7c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 8c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 9c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 10c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Unless required by applicable law or agreed to in writing, software 11c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * License for the specific language governing permissions and limitations under 14c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * the License. 15c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 16c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 17c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambypackage android.telephony; 18c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 19c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.content.ContentValues; 20c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.content.Context; 21c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.database.Cursor; 22c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.graphics.Typeface; 23c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.os.Parcel; 24c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.os.Parcelable; 25c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.provider.Telephony; 26c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.telephony.SmsCbCmasInfo; 27c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.telephony.SmsCbEtwsInfo; 28c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.telephony.SmsCbLocation; 29c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.telephony.SmsCbMessage; 30c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.text.Spannable; 31c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.text.SpannableStringBuilder; 32c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.text.format.DateUtils; 33c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambyimport android.text.style.StyleSpan; 34c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 35c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby/** 36c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Application wrapper for {@link SmsCbMessage}. This is Parcelable so that 37c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * decoded broadcast message objects can be passed between running Services. 38c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * New broadcasts are received by the CellBroadcastReceiver app, which exports 39c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * the database of previously received broadcasts at "content://cellbroadcasts/". 40c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * The "android.permission.READ_CELL_BROADCASTS" permission is required to read 41c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * from the ContentProvider, and writes to the database are not allowed.<p> 42c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 43c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Use {@link #createFromCursor} to create CellBroadcastMessage objects from rows 44c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * in the database cursor returned by the ContentProvider. 45c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 46c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * {@hide} 47c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 48c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hambypublic class CellBroadcastMessage implements Parcelable { 49c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 50c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** Identifier for getExtra() when adding this object to an Intent. */ 51c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public static final String SMS_CB_MESSAGE_EXTRA = 52c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby "com.android.cellbroadcastreceiver.SMS_CB_MESSAGE"; 53c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 54c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** SmsCbMessage. */ 55c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby private final SmsCbMessage mSmsCbMessage; 56c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 57c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby private final long mDeliveryTime; 58c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby private boolean mIsRead; 59c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 60c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public CellBroadcastMessage(SmsCbMessage message) { 61c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mSmsCbMessage = message; 62c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mDeliveryTime = System.currentTimeMillis(); 63c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mIsRead = false; 64c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 65c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 66c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby private CellBroadcastMessage(SmsCbMessage message, long deliveryTime, boolean isRead) { 67c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mSmsCbMessage = message; 68c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mDeliveryTime = deliveryTime; 69c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mIsRead = isRead; 70c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 71c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 72c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby private CellBroadcastMessage(Parcel in) { 73c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mSmsCbMessage = new SmsCbMessage(in); 74c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mDeliveryTime = in.readLong(); 75c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mIsRead = (in.readInt() != 0); 76c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 77c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 78c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** Parcelable: no special flags. */ 79c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public int describeContents() { 80c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return 0; 81c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 82c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 83c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public void writeToParcel(Parcel out, int flags) { 84c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mSmsCbMessage.writeToParcel(out, flags); 85c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby out.writeLong(mDeliveryTime); 86c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby out.writeInt(mIsRead ? 1 : 0); 87c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 88c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 89c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public static final Parcelable.Creator<CellBroadcastMessage> CREATOR 90c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby = new Parcelable.Creator<CellBroadcastMessage>() { 91c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public CellBroadcastMessage createFromParcel(Parcel in) { 92c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return new CellBroadcastMessage(in); 93c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 94c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 95c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public CellBroadcastMessage[] newArray(int size) { 96c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return new CellBroadcastMessage[size]; 97c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 98c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby }; 99c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 100c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 101c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Create a CellBroadcastMessage from a row in the database. 102c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @param cursor an open SQLite cursor pointing to the row to read 103c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return the new CellBroadcastMessage 104c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @throws IllegalArgumentException if one of the required columns is missing 105c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 106c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public static CellBroadcastMessage createFromCursor(Cursor cursor) { 107c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int geoScope = cursor.getInt( 108c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE)); 109c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int serialNum = cursor.getInt( 110c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.SERIAL_NUMBER)); 111c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int category = cursor.getInt( 112c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.SERVICE_CATEGORY)); 113c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby String language = cursor.getString( 114c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.LANGUAGE_CODE)); 115c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby String body = cursor.getString( 116c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.MESSAGE_BODY)); 117c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int format = cursor.getInt( 118c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.MESSAGE_FORMAT)); 119c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int priority = cursor.getInt( 120c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cursor.getColumnIndexOrThrow(Telephony.CellBroadcasts.MESSAGE_PRIORITY)); 121c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 122c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby String plmn; 123c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int plmnColumn = cursor.getColumnIndex(Telephony.CellBroadcasts.PLMN); 124c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (plmnColumn != -1 && !cursor.isNull(plmnColumn)) { 125c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby plmn = cursor.getString(plmnColumn); 126c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 127c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby plmn = null; 128c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 129c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 130c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int lac; 131c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int lacColumn = cursor.getColumnIndex(Telephony.CellBroadcasts.LAC); 132c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (lacColumn != -1 && !cursor.isNull(lacColumn)) { 133c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby lac = cursor.getInt(lacColumn); 134c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 135c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby lac = -1; 136c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 137c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 138c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cid; 139c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cidColumn = cursor.getColumnIndex(Telephony.CellBroadcasts.CID); 140c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cidColumn != -1 && !cursor.isNull(cidColumn)) { 141c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cid = cursor.getInt(cidColumn); 142c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 143c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cid = -1; 144c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 145c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 146c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbLocation location = new SmsCbLocation(plmn, lac, cid); 147c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 148c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbEtwsInfo etwsInfo; 149c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int etwsWarningTypeColumn = cursor.getColumnIndex( 150c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.ETWS_WARNING_TYPE); 151c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (etwsWarningTypeColumn != -1 && !cursor.isNull(etwsWarningTypeColumn)) { 152c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int warningType = cursor.getInt(etwsWarningTypeColumn); 153c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby etwsInfo = new SmsCbEtwsInfo(warningType, false, false, null); 154c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 155c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby etwsInfo = null; 156c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 157c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 158c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbCmasInfo cmasInfo; 159c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasMessageClassColumn = cursor.getColumnIndex( 160c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS); 161c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasMessageClassColumn != -1 && !cursor.isNull(cmasMessageClassColumn)) { 162c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int messageClass = cursor.getInt(cmasMessageClassColumn); 163c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 164c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasCategory; 165c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasCategoryColumn = cursor.getColumnIndex( 166c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.CMAS_CATEGORY); 167c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasCategoryColumn != -1 && !cursor.isNull(cmasCategoryColumn)) { 168c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cmasCategory = cursor.getInt(cmasCategoryColumn); 169c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 170c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cmasCategory = SmsCbCmasInfo.CMAS_CATEGORY_UNKNOWN; 171c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 172c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 173c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int responseType; 174c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasResponseTypeColumn = cursor.getColumnIndex( 175c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.CMAS_RESPONSE_TYPE); 176c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasResponseTypeColumn != -1 && !cursor.isNull(cmasResponseTypeColumn)) { 177c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby responseType = cursor.getInt(cmasResponseTypeColumn); 178c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 179c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby responseType = SmsCbCmasInfo.CMAS_RESPONSE_TYPE_UNKNOWN; 180c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 181c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 182c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int severity; 183c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasSeverityColumn = cursor.getColumnIndex( 184c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.CMAS_SEVERITY); 185c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasSeverityColumn != -1 && !cursor.isNull(cmasSeverityColumn)) { 186c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby severity = cursor.getInt(cmasSeverityColumn); 187c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 188c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby severity = SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN; 189c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 190c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 191c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int urgency; 192c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasUrgencyColumn = cursor.getColumnIndex( 193c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.CMAS_URGENCY); 194c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasUrgencyColumn != -1 && !cursor.isNull(cmasUrgencyColumn)) { 195c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby urgency = cursor.getInt(cmasUrgencyColumn); 196c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 197c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby urgency = SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN; 198c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 199c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 200c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int certainty; 201c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int cmasCertaintyColumn = cursor.getColumnIndex( 202c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.CMAS_CERTAINTY); 203c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasCertaintyColumn != -1 && !cursor.isNull(cmasCertaintyColumn)) { 204c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby certainty = cursor.getInt(cmasCertaintyColumn); 205c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 206c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby certainty = SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN; 207c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 208c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 209c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cmasInfo = new SmsCbCmasInfo(messageClass, cmasCategory, responseType, severity, 210c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby urgency, certainty); 211c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 212c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cmasInfo = null; 213c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 214c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 215c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbMessage msg = new SmsCbMessage(format, geoScope, serialNum, location, category, 216c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby language, body, priority, etwsInfo, cmasInfo); 217c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 218c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby long deliveryTime = cursor.getLong(cursor.getColumnIndexOrThrow( 219c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.DELIVERY_TIME)); 220c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby boolean isRead = (cursor.getInt(cursor.getColumnIndexOrThrow( 221c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby Telephony.CellBroadcasts.MESSAGE_READ)) != 0); 222c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 223c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return new CellBroadcastMessage(msg, deliveryTime, isRead); 224c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 225c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 226c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 227c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return a ContentValues object for insertion into the database. 228c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return a new ContentValues object containing this object's data 229c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 230c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public ContentValues getContentValues() { 231c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby ContentValues cv = new ContentValues(16); 232c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbMessage msg = mSmsCbMessage; 233c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE, msg.getGeographicalScope()); 234c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbLocation location = msg.getLocation(); 235c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (location.getPlmn() != null) { 236c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.PLMN, location.getPlmn()); 237c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 238c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (location.getLac() != -1) { 239c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.LAC, location.getLac()); 240c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 241c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (location.getCid() != -1) { 242c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CID, location.getCid()); 243c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 244c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.SERIAL_NUMBER, msg.getSerialNumber()); 245c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.SERVICE_CATEGORY, msg.getServiceCategory()); 246c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.LANGUAGE_CODE, msg.getLanguageCode()); 247c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_BODY, msg.getMessageBody()); 248c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.DELIVERY_TIME, mDeliveryTime); 249c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_READ, mIsRead); 250c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_FORMAT, msg.getMessageFormat()); 251c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_PRIORITY, msg.getMessagePriority()); 252c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 253c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbEtwsInfo etwsInfo = mSmsCbMessage.getEtwsWarningInfo(); 254c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (etwsInfo != null) { 255c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.ETWS_WARNING_TYPE, etwsInfo.getWarningType()); 256c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 257c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 258c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbCmasInfo cmasInfo = mSmsCbMessage.getCmasWarningInfo(); 259c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasInfo != null) { 260c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS, cmasInfo.getMessageClass()); 261c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CMAS_CATEGORY, cmasInfo.getCategory()); 262c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CMAS_RESPONSE_TYPE, cmasInfo.getResponseType()); 263c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CMAS_SEVERITY, cmasInfo.getSeverity()); 264c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CMAS_URGENCY, cmasInfo.getUrgency()); 265c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cv.put(Telephony.CellBroadcasts.CMAS_CERTAINTY, cmasInfo.getCertainty()); 266c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 267c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 268c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return cv; 269c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 270c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 271c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 272c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Set or clear the "read message" flag. 273c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @param isRead true if the message has been read; false if not 274c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 275c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public void setIsRead(boolean isRead) { 276c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby mIsRead = isRead; 277c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 278c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 279c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public String getLanguageCode() { 280c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getLanguageCode(); 281c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 282c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 283c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public int getServiceCategory() { 284c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getServiceCategory(); 285c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 286c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 287c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public long getDeliveryTime() { 288c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mDeliveryTime; 289c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 290c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 291c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public String getMessageBody() { 292c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getMessageBody(); 293c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 294c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 295c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isRead() { 296c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mIsRead; 297c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 298c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 299c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public int getSerialNumber() { 300c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getSerialNumber(); 301c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 302c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 303c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public SmsCbCmasInfo getCmasWarningInfo() { 304c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getCmasWarningInfo(); 305c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 306c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 307c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public SmsCbEtwsInfo getEtwsWarningInfo() { 308c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getEtwsWarningInfo(); 309c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 310c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 311c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 312c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return whether the broadcast is an emergency (PWS) message type. 313c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * This includes lower priority test messages and Amber alerts. 314c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 315c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * All public alerts show the flashing warning icon in the dialog, 316c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * but only emergency alerts play the alert sound and speak the message. 317c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 318c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message is PWS type; false otherwise 319c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 320c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isPublicAlertMessage() { 321c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.isEmergencyMessage(); 322c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 323c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 324c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 325c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Returns whether the broadcast is an emergency (PWS) message type, 326c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * including test messages, but excluding lower priority Amber alert broadcasts. 327c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * 328c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message is PWS type, excluding Amber alerts 329c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 330c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isEmergencyAlertMessage() { 331c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (!mSmsCbMessage.isEmergencyMessage()) { 332c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return false; 333c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 334c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbCmasInfo cmasInfo = mSmsCbMessage.getCmasWarningInfo(); 335c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (cmasInfo != null && 336c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby cmasInfo.getMessageClass() == SmsCbCmasInfo.CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY) { 337c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return false; 338c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 339c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return true; 340c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 341c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 342c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 343c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return whether the broadcast is an ETWS emergency message type. 344c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message is ETWS emergency type; false otherwise 345c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 346c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isEtwsMessage() { 347c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.isEtwsMessage(); 348c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 349c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 350c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 351c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return whether the broadcast is a CMAS emergency message type. 352c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message is CMAS emergency type; false otherwise 353c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 354c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isCmasMessage() { 355c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.isCmasMessage(); 356c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 357c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 358c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 359c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return the CMAS message class. 360c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return the CMAS message class, e.g. {@link SmsCbCmasInfo#CMAS_CLASS_SEVERE_THREAT}, or 361c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * {@link SmsCbCmasInfo#CMAS_CLASS_UNKNOWN} if this is not a CMAS alert 362c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 363c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public int getCmasMessageClass() { 364c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby if (mSmsCbMessage.isCmasMessage()) { 365c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return mSmsCbMessage.getCmasWarningInfo().getMessageClass(); 366c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } else { 367c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return SmsCbCmasInfo.CMAS_CLASS_UNKNOWN; 368c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 369c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 370c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 371c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 372c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return whether the broadcast is an ETWS popup alert. 373c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * This method checks the message ID and the message code. 374c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message indicates an ETWS popup alert 375c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 376c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isEtwsPopupAlert() { 377c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbEtwsInfo etwsInfo = mSmsCbMessage.getEtwsWarningInfo(); 378c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return etwsInfo != null && etwsInfo.isPopupAlert(); 379c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 380c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 381c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 382c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return whether the broadcast is an ETWS emergency user alert. 383c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * This method checks the message ID and the message code. 384c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message indicates an ETWS emergency user alert 385c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 386c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isEtwsEmergencyUserAlert() { 387c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbEtwsInfo etwsInfo = mSmsCbMessage.getEtwsWarningInfo(); 388c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return etwsInfo != null && etwsInfo.isEmergencyUserAlert(); 389c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 390c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 391c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 392c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return whether the broadcast is an ETWS test message. 393c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return true if the message is an ETWS test message; false otherwise 394c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 395c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public boolean isEtwsTestMessage() { 396c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby SmsCbEtwsInfo etwsInfo = mSmsCbMessage.getEtwsWarningInfo(); 397c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return etwsInfo != null && 398c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby etwsInfo.getWarningType() == SmsCbEtwsInfo.ETWS_WARNING_TYPE_TEST_MESSAGE; 399c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 400c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 401c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 402c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return the abbreviated date string for the message delivery time. 403c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @param context the context object 404c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return a String to use in the broadcast list UI 405c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 406c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public String getDateString(Context context) { 407c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int flags = DateUtils.FORMAT_NO_NOON_MIDNIGHT | DateUtils.FORMAT_SHOW_TIME | 408c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby DateUtils.FORMAT_ABBREV_ALL | DateUtils.FORMAT_SHOW_DATE | 409c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby DateUtils.FORMAT_CAP_AMPM; 410c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return DateUtils.formatDateTime(context, mDeliveryTime, flags); 411c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 412c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby 413c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby /** 414c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * Return the date string for the message delivery time, suitable for text-to-speech. 415c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @param context the context object 416c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby * @return a String for populating the list item AccessibilityEvent for TTS 417c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby */ 418c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby public String getSpokenDateString(Context context) { 419c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby int flags = DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE; 420c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby return DateUtils.formatDateTime(context, mDeliveryTime, flags); 421c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby } 422c3296ffdfc70c6778b6ae760b812b4e53e335f97Jake Hamby} 423