147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby/* 247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Copyright (C) 2011 The Android Open Source Project 347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * 447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * you may not use this file except in compliance with the License. 647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * You may obtain a copy of the License at 747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * 847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * http://www.apache.org/licenses/LICENSE-2.0 947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * 1047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Unless required by applicable law or agreed to in writing, software 1147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 1247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * See the License for the specific language governing permissions and 1447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * limitations under the License. 1547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby */ 1647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 1747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambypackage com.android.cellbroadcastreceiver; 1847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 1947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.content.ContentValues; 2047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.content.Context; 2147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.database.Cursor; 2247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.database.sqlite.SQLiteDatabase; 2347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.database.sqlite.SQLiteException; 2447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.database.sqlite.SQLiteOpenHelper; 2547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.provider.Telephony; 2647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.telephony.SmsCbCmasInfo; 2747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.telephony.SmsCbEtwsInfo; 2847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.telephony.SmsCbMessage; 2947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport android.util.Log; 3047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 3147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambyimport com.android.internal.telephony.gsm.SmsCbConstants; 3247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 3347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby/** 3447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Open, create, and upgrade the cell broadcast SQLite database. Previously an inner class of 3547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * {@code CellBroadcastDatabase}, this is now a top-level class. The column definitions in 3647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * {@code CellBroadcastDatabase} have been moved to {@link Telephony.CellBroadcasts} in the 3747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * framework, to simplify access to this database from third-party apps. 3847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby */ 3947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hambypublic class CellBroadcastDatabaseHelper extends SQLiteOpenHelper { 4047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 4147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final String TAG = "CellBroadcastDatabaseHelper"; 4247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 4347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby static final String DATABASE_NAME = "cell_broadcasts.db"; 4447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby static final String TABLE_NAME = "broadcasts"; 4547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 4647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby /** Temporary table for upgrading the database version. */ 4747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby static final String TEMP_TABLE_NAME = "old_broadcasts"; 4847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 4947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby /** 5047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Database version 1: initial version 5147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Database version 2-9: (reserved for OEM database customization) 5247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Database version 10: adds ETWS and CMAS columns and CDMA support 5347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Database version 11: adds delivery time index 5447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby */ 5547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby static final int DATABASE_VERSION = 11; 5647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 5747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby CellBroadcastDatabaseHelper(Context context) { 5847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby super(context, DATABASE_NAME, null, DATABASE_VERSION); 5947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 6047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 6147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby @Override 6247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby public void onCreate(SQLiteDatabase db) { 6347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.execSQL("CREATE TABLE " + TABLE_NAME + " (" 6447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts._ID + " INTEGER PRIMARY KEY AUTOINCREMENT," 6547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE + " INTEGER," 6647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.PLMN + " TEXT," 6747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.LAC + " INTEGER," 6847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CID + " INTEGER," 6947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.SERIAL_NUMBER + " INTEGER," 7047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.SERVICE_CATEGORY + " INTEGER," 7147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.LANGUAGE_CODE + " TEXT," 7247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.MESSAGE_BODY + " TEXT," 7347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.DELIVERY_TIME + " INTEGER," 7447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.MESSAGE_READ + " INTEGER," 7547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.MESSAGE_FORMAT + " INTEGER," 7647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.MESSAGE_PRIORITY + " INTEGER," 7747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.ETWS_WARNING_TYPE + " INTEGER," 7847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS + " INTEGER," 7947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CMAS_CATEGORY + " INTEGER," 8047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CMAS_RESPONSE_TYPE + " INTEGER," 8147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CMAS_SEVERITY + " INTEGER," 8247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CMAS_URGENCY + " INTEGER," 8347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + Telephony.CellBroadcasts.CMAS_CERTAINTY + " INTEGER);"); 8447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 8547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby createDeliveryTimeIndex(db); 8647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 8747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 8847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private void createDeliveryTimeIndex(SQLiteDatabase db) { 8947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.execSQL("CREATE INDEX IF NOT EXISTS deliveryTimeIndex ON " + TABLE_NAME 9047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + " (" + Telephony.CellBroadcasts.DELIVERY_TIME + ");"); 9147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 9247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 9347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby /** Columns to copy on database upgrade. */ 9447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final String[] COLUMNS_V1 = { 9547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE, 9647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.SERIAL_NUMBER, 9747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.V1_MESSAGE_CODE, 9847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.V1_MESSAGE_IDENTIFIER, 9947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.LANGUAGE_CODE, 10047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.MESSAGE_BODY, 10147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.DELIVERY_TIME, 10247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Telephony.CellBroadcasts.MESSAGE_READ, 10347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby }; 10447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 10547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_GEOGRAPHICAL_SCOPE = 0; 10647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_SERIAL_NUMBER = 1; 10747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_MESSAGE_CODE = 2; 10847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_MESSAGE_IDENTIFIER = 3; 10947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_LANGUAGE_CODE = 4; 11047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_MESSAGE_BODY = 5; 11147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_DELIVERY_TIME = 6; 11247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static final int COLUMN_V1_MESSAGE_READ = 7; 11347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 11447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby @Override 11547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 11647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (oldVersion == newVersion) { 11747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby return; 11847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 11947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // always log database upgrade 12047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby log("Upgrading DB from version " + oldVersion + " to " + newVersion); 12147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 12247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // Upgrade from V1 to V10 12347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (oldVersion == 1) { 12447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.beginTransaction(); 12547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby try { 12647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // Step 1: rename original table 12747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.execSQL("DROP TABLE IF EXISTS " + TEMP_TABLE_NAME); 12847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.execSQL("ALTER TABLE " + TABLE_NAME + " RENAME TO " + TEMP_TABLE_NAME); 12947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 13047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // Step 2: create new table and indices 13147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby onCreate(db); 13247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 13347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // Step 3: copy each message into the new table 13447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Cursor cursor = db.query(TEMP_TABLE_NAME, COLUMNS_V1, null, null, null, null, 13547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby null); 13647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby try { 13747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby while (cursor.moveToNext()) { 13847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby upgradeMessageV1ToV2(db, cursor); 13947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 14047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } finally { 14147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cursor.close(); 14247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 14347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 14447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // Step 4: drop the original table and commit transaction 14547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.execSQL("DROP TABLE " + TEMP_TABLE_NAME); 14647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.setTransactionSuccessful(); 14747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } finally { 14847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.endTransaction(); 14947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 15047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby oldVersion = 10; // skip to version 10 15147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 15247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 15347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // Note to OEMs: if you have customized the database schema since V1, you will need to 15447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby // add your own code here to convert from your version to version 10. 15547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (oldVersion < 10) { 15647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby throw new SQLiteException("CellBroadcastDatabase doesn't know how to upgrade " 15747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby + " DB version " + oldVersion + " (customized by OEM?)"); 15847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 15947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 16047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (oldVersion == 10) { 16147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby createDeliveryTimeIndex(db); 16247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby oldVersion++; 16347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 16447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 16547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 16647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby /** 16747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby * Upgrades a single broadcast message from version 1 to version 2. 16847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby */ 16947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static void upgradeMessageV1ToV2(SQLiteDatabase db, Cursor cursor) { 17047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int geographicalScope = cursor.getInt(COLUMN_V1_GEOGRAPHICAL_SCOPE); 17147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int updateNumber = cursor.getInt(COLUMN_V1_SERIAL_NUMBER); 17247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int messageCode = cursor.getInt(COLUMN_V1_MESSAGE_CODE); 17347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int messageId = cursor.getInt(COLUMN_V1_MESSAGE_IDENTIFIER); 17447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby String languageCode = cursor.getString(COLUMN_V1_LANGUAGE_CODE); 17547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby String messageBody = cursor.getString(COLUMN_V1_MESSAGE_BODY); 17647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby long deliveryTime = cursor.getLong(COLUMN_V1_DELIVERY_TIME); 17747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby boolean isRead = (cursor.getInt(COLUMN_V1_MESSAGE_READ) != 0); 17847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 17947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int serialNumber = ((geographicalScope & 0x03) << 14) 18047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby | ((messageCode & 0x3ff) << 4) | (updateNumber & 0x0f); 18147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 18247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby ContentValues cv = new ContentValues(16); 18347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.GEOGRAPHICAL_SCOPE, geographicalScope); 18447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.SERIAL_NUMBER, serialNumber); 18547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.SERVICE_CATEGORY, messageId); 18647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.LANGUAGE_CODE, languageCode); 18747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_BODY, messageBody); 18847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.DELIVERY_TIME, deliveryTime); 18947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_READ, isRead); 19047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_FORMAT, SmsCbMessage.MESSAGE_FORMAT_3GPP); 19147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 19247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int etwsWarningType = SmsCbEtwsInfo.ETWS_WARNING_TYPE_UNKNOWN; 19347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_UNKNOWN; 19447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN; 19547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN; 19647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby int cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN; 19747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby switch (messageId) { 19847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_WARNING: 19947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby etwsWarningType = SmsCbEtwsInfo.ETWS_WARNING_TYPE_EARTHQUAKE; 20047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 20147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 20247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_ETWS_TSUNAMI_WARNING: 20347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby etwsWarningType = SmsCbEtwsInfo.ETWS_WARNING_TYPE_TSUNAMI; 20447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 20547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 20647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_ETWS_EARTHQUAKE_AND_TSUNAMI_WARNING: 20747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby etwsWarningType = SmsCbEtwsInfo.ETWS_WARNING_TYPE_EARTHQUAKE_AND_TSUNAMI; 20847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 20947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 21047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_ETWS_TEST_MESSAGE: 21147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby etwsWarningType = SmsCbEtwsInfo.ETWS_WARNING_TYPE_TEST_MESSAGE; 21247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 21347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 21447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_ETWS_OTHER_EMERGENCY_TYPE: 21547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby etwsWarningType = SmsCbEtwsInfo.ETWS_WARNING_TYPE_OTHER_EMERGENCY; 21647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 21747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 21847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_PRESIDENTIAL_LEVEL: 21947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_PRESIDENTIAL_LEVEL_ALERT; 22047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 22147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 22247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED: 22347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_EXTREME_THREAT; 22447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_EXTREME; 22547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_IMMEDIATE; 22647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_OBSERVED; 22747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 22847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 22947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY: 23047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_EXTREME_THREAT; 23147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_EXTREME; 23247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_IMMEDIATE; 23347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY; 23447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 23547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 23647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_OBSERVED: 237e348e51fedf48b9d07f5f737c0ae2ca10acdd356Anju Mathapati cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 23847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_EXTREME; 23947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_EXPECTED; 24047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_OBSERVED; 24147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 24247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 24347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXTREME_EXPECTED_LIKELY: 244e348e51fedf48b9d07f5f737c0ae2ca10acdd356Anju Mathapati cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 24547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_EXTREME; 24647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_EXPECTED; 24747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY; 24847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 24947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 25047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_IMMEDIATE_OBSERVED: 25147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 25247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_SEVERE; 25347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_IMMEDIATE; 25447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_OBSERVED; 25547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 25647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 25747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_IMMEDIATE_LIKELY: 25847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 25947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_SEVERE; 26047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_IMMEDIATE; 26147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY; 26247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 26347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 26447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_OBSERVED: 26547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 26647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_SEVERE; 26747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_EXPECTED; 26847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_OBSERVED; 26947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 27047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 27147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_SEVERE_EXPECTED_LIKELY: 27247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_SEVERE_THREAT; 27347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasSeverity = SmsCbCmasInfo.CMAS_SEVERITY_SEVERE; 27447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasUrgency = SmsCbCmasInfo.CMAS_URGENCY_EXPECTED; 27547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasCertainty = SmsCbCmasInfo.CMAS_CERTAINTY_LIKELY; 27647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 27747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 27847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY: 27947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_CHILD_ABDUCTION_EMERGENCY; 28047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 28147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 28247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_REQUIRED_MONTHLY_TEST: 28347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_REQUIRED_MONTHLY_TEST; 28447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 28547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 28647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_EXERCISE: 28747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_CMAS_EXERCISE; 28847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 28947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 29047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby case SmsCbConstants.MESSAGE_ID_CMAS_ALERT_OPERATOR_DEFINED_USE: 29147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cmasMessageClass = SmsCbCmasInfo.CMAS_CLASS_OPERATOR_DEFINED_USE; 29247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby break; 29347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 29447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 29547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (etwsWarningType != SmsCbEtwsInfo.ETWS_WARNING_TYPE_UNKNOWN 29647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby || cmasMessageClass != SmsCbCmasInfo.CMAS_CLASS_UNKNOWN) { 29747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_PRIORITY, 29847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby SmsCbMessage.MESSAGE_PRIORITY_EMERGENCY); 29947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } else { 30047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.MESSAGE_PRIORITY, 30147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby SmsCbMessage.MESSAGE_PRIORITY_NORMAL); 30247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 30347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 30447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (etwsWarningType != SmsCbEtwsInfo.ETWS_WARNING_TYPE_UNKNOWN) { 30547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.ETWS_WARNING_TYPE, etwsWarningType); 30647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 30747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 30847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (cmasMessageClass != SmsCbCmasInfo.CMAS_CLASS_UNKNOWN) { 30947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.CMAS_MESSAGE_CLASS, cmasMessageClass); 31047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 31147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 31247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (cmasSeverity != SmsCbCmasInfo.CMAS_SEVERITY_UNKNOWN) { 31347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.CMAS_SEVERITY, cmasSeverity); 31447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 31547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 31647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (cmasUrgency != SmsCbCmasInfo.CMAS_URGENCY_UNKNOWN) { 31747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.CMAS_URGENCY, cmasUrgency); 31847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 31947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 32047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby if (cmasCertainty != SmsCbCmasInfo.CMAS_CERTAINTY_UNKNOWN) { 32147ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby cv.put(Telephony.CellBroadcasts.CMAS_CERTAINTY, cmasCertainty); 32247ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 32347ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 32447ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby db.insert(TABLE_NAME, null, cv); 32547ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 32647ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby 32747ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby private static void log(String msg) { 32847ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby Log.d(TAG, msg); 32947ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby } 33047ffe15b440cb98548c0f2c58cbd1e64dd0435dbJake Hamby} 331