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 onCreate()45 public boolean onCreate() { 46 return true; 47 } 48 49 @Override queryXmlResources(String[] projection)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 queryRawData(String[] projection)68 public Cursor queryRawData(String[] projection) { 69 MatrixCursor cursor = new MatrixCursor(INDEXABLES_RAW_COLUMNS); 70 return cursor; 71 } 72 73 @Override queryNonIndexableKeys(String[] projection)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_EMERGENCY_ALERTS; 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 // Remove ETWS preference category. 103 ref = new Object[1]; 104 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 105 CellBroadcastSettings.KEY_ENABLE_ETWS_TEST_ALERTS; 106 cursor.addRow(ref); 107 } 108 109 if (!res.getBoolean(R.bool.show_cmas_settings)) { 110 // Remove CMAS preference items in emergency alert category. 111 ref = new Object[1]; 112 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 113 CellBroadcastSettings.KEY_ENABLE_CMAS_EXTREME_THREAT_ALERTS; 114 cursor.addRow(ref); 115 116 ref = new Object[1]; 117 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 118 CellBroadcastSettings.KEY_ENABLE_CMAS_SEVERE_THREAT_ALERTS; 119 cursor.addRow(ref); 120 121 ref = new Object[1]; 122 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 123 CellBroadcastSettings.KEY_ENABLE_CMAS_AMBER_ALERTS; 124 cursor.addRow(ref); 125 } 126 127 if (!Resources.getSystem().getBoolean( 128 com.android.internal.R.bool.config_showAreaUpdateInfoSettings)) { 129 ref = new Object[1]; 130 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 131 CellBroadcastSettings.KEY_ENABLE_AREA_UPDATE_INFO_ALERTS; 132 cursor.addRow(ref); 133 } 134 135 if (!enableDevSettings) { 136 ref = new Object[1]; 137 ref[COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE] = 138 CellBroadcastSettings.KEY_CATEGORY_DEV_SETTINGS; 139 cursor.addRow(ref); 140 } 141 142 return cursor; 143 } 144 } 145