1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.cellbroadcastreceiver; 18 19 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE; 20 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_CLASS_NAME; 21 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_ICON_RESID; 22 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_ACTION; 23 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS; 24 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE; 25 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_RANK; 26 import static android.provider.SearchIndexablesContract.COLUMN_INDEX_XML_RES_RESID; 27 import static android.provider.SearchIndexablesContract.INDEXABLES_RAW_COLUMNS; 28 import static android.provider.SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS; 29 import static android.provider.SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS; 30 31 import android.content.res.Resources; 32 import android.database.Cursor; 33 import android.database.MatrixCursor; 34 import android.provider.SearchIndexableResource; 35 import android.provider.SearchIndexablesProvider; 36 import android.provider.Settings; 37 38 public class CellBroadcastSearchIndexableProvider extends SearchIndexablesProvider { 39 private static SearchIndexableResource[] INDEXABLE_RES = new SearchIndexableResource[] { 40 new SearchIndexableResource(1, R.xml.preferences, 41 CellBroadcastSettings.class.getName(), 42 R.mipmap.ic_launcher_cell_broadcast), 43 }; 44 @Override 45 public boolean onCreate() { 46 return true; 47 } 48 49 @Override 50 public Cursor queryXmlResources(String[] projection) { 51 MatrixCursor cursor = new MatrixCursor(INDEXABLES_XML_RES_COLUMNS); 52 final int count = INDEXABLE_RES.length; 53 for (int n = 0; n < count; n++) { 54 Object[] ref = new Object[7]; 55 ref[COLUMN_INDEX_XML_RES_RANK] = INDEXABLE_RES[n].rank; 56 ref[COLUMN_INDEX_XML_RES_RESID] = INDEXABLE_RES[n].xmlResId; 57 ref[COLUMN_INDEX_XML_RES_CLASS_NAME] = null; 58 ref[COLUMN_INDEX_XML_RES_ICON_RESID] = INDEXABLE_RES[n].iconResId; 59 ref[COLUMN_INDEX_XML_RES_INTENT_ACTION] = "android.intent.action.MAIN"; 60 ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE] = "com.android.cellbroadcastreceiver"; 61 ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS] = INDEXABLE_RES[n].className; 62 cursor.addRow(ref); 63 } 64 return cursor; 65 } 66 67 @Override 68 public Cursor queryRawData(String[] projection) { 69 MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS); 70 return cursor; 71 } 72 73 @Override 74 public Cursor queryNonIndexableKeys(String[] projection) { 75 MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS); 76 77 // Show extra settings when developer options is enabled in settings. 78 boolean enableDevSettings = Settings.Global.getInt(getContext().getContentResolver(), 79 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED, 0) != 0; 80 81 Resources res = getContext().getResources(); 82 Object[] ref; 83 84 ref = new Object[1]; 85 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 86 CellBroadcastSettings.KEY_CATEGORY_DEV_SETTINGS; 87 cursor.addRow(ref); 88 89 // Show alert settings and ETWS categories for ETWS builds and developer mode. 90 if (!enableDevSettings) { 91 // Remove general emergency alert preference items (not shown for CMAS builds). 92 ref = new Object[1]; 93 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 94 CellBroadcastSettings.KEY_ENABLE_ALERTS_MASTER_TOGGLE; 95 cursor.addRow(ref); 96 97 ref = new Object[1]; 98 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 99 CellBroadcastSettings.KEY_ENABLE_ALERT_SPEECH; 100 cursor.addRow(ref); 101 } 102 103 if (!res.getBoolean(R.bool.show_cmas_settings)) { 104 // Remove CMAS preference items in emergency alert category. 105 ref = new Object[1]; 106 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 107 CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS; 108 cursor.addRow(ref); 109 110 ref = new Object[1]; 111 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 112 CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS; 113 cursor.addRow(ref); 114 115 ref = new Object[1]; 116 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 117 CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS; 118 cursor.addRow(ref); 119 } 120 121 if (!Resources.getSystem().getBoolean( 122 com.android.internal.R.bool.config_showAreaUpdateInfoSettings)) { 123 ref = new Object[1]; 124 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 125 CellBroadcastSettings.KEY_ENABLE_AREA_UPDATE_INFO_ALERTS; 126 cursor.addRow(ref); 127 } 128 129 if (!enableDevSettings) { 130 ref = new Object[1]; 131 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 132 CellBroadcastSettings.KEY_CATEGORY_DEV_SETTINGS; 133 cursor.addRow(ref); 134 } 135 136 return cursor; 137 } 138 } 139