Loading src/com/android/settings/search/DatabaseIndexingManager.java +18 −4 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings.search; import com.android.settings.R; import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentValues; Loading Loading @@ -858,7 +860,8 @@ public class DatabaseIndexingManager { List<String> nonIndexableKeys) { final String className = sir.className; final int rank = sir.rank; final String intentAction = sir.intentAction; final String intentTargetPackage = sir.intentTargetPackage; if (provider == null) { Log.w(LOG_TAG, "Cannot find provider: " + className); Loading Loading @@ -886,7 +889,6 @@ public class DatabaseIndexingManager { .setClassName(className) .setScreenTitle(raw.screenTitle) .setIconResId(raw.iconResId) .setRank(rank) .setIntentAction(raw.intentAction) .setIntentTargetPackage(raw.intentTargetPackage) .setIntentTargetClass(raw.intentTargetClass) Loading @@ -911,7 +913,15 @@ public class DatabaseIndexingManager { continue; } item.className = (TextUtils.isEmpty(item.className)) ? className : item.className; item.className = TextUtils.isEmpty(item.className) ? className : item.className; item.intentAction = TextUtils.isEmpty(item.intentAction) ? intentAction : item.intentAction; item.intentTargetPackage = TextUtils.isEmpty(item.intentTargetPackage) ? intentTargetPackage : item.intentTargetPackage; indexFromResource(database, localeStr, item, nonIndexableKeys); } Loading Loading @@ -1245,7 +1255,11 @@ public class DatabaseIndexingManager { private Intent buildIntent(Context context) { final Intent intent; if (TextUtils.isEmpty(mIntentAction)) { boolean isEmptyIntentAction = TextUtils.isEmpty(mIntentAction); // No intent action is set, or the intent action is for a subsetting. if (isEmptyIntentAction || (!isEmptyIntentAction && TextUtils.equals(mIntentTargetPackage, SearchIndexableResources.SUBSETTING_TARGET_PACKAGE))) { // Action is null, we will launch it as a sub-setting intent = DatabaseIndexingUtils.buildSubsettingIntent(context, mClassName, mKey, mScreenTitle); Loading src/com/android/settings/search/SearchIndexableResources.java +26 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.support.annotation.DrawableRes; import android.support.annotation.VisibleForTesting; import android.support.annotation.XmlRes; import android.text.TextUtils; import com.android.settings.DateTimeSettings; import com.android.settings.DeviceInfoSettings; import com.android.settings.DisplaySettings; Loading Loading @@ -92,6 +93,12 @@ import java.util.HashMap; public final class SearchIndexableResources { /** * Identifies subsettings which have an {@link SearchIndexableResource#intentAction} but * whose intents should still be treated as subsettings inside of Settings. */ public static final String SUBSETTING_TARGET_PACKAGE = "subsetting_target_package"; @XmlRes public static final int NO_DATA_RES_ID = 0; Loading @@ -101,8 +108,22 @@ public final class SearchIndexableResources { @VisibleForTesting static void addIndex(Class<?> indexClass, @XmlRes int xmlResId, @DrawableRes int iconResId) { addIndex(indexClass, xmlResId, iconResId, null /* targetAction */); } @VisibleForTesting static void addIndex(Class<?> indexClass, @XmlRes int xmlResId, @DrawableRes int iconResId, String targetAction) { String className = indexClass.getName(); sResMap.put(className, new SearchIndexableResource(0, xmlResId, className, iconResId)); SearchIndexableResource resource = new SearchIndexableResource(0, xmlResId, className, iconResId); if (!TextUtils.isEmpty(targetAction)) { resource.intentAction = targetAction; resource.intentTargetPackage = SUBSETTING_TARGET_PACKAGE; } sResMap.put(className, resource); } static { Loading @@ -117,14 +138,16 @@ public final class SearchIndexableResources { addIndex(DataUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage); addIndex(DataUsageMeteredSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage); addIndex(ScreenZoomSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display, "android.settings.DISPLAY_SETTINGS"); addIndex(AmbientDisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(WallpaperTypeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(ConfigureNotificationSettings.class, R.xml.configure_notification_settings, R.drawable.ic_settings_notifications); addIndex(AppAndNotificationDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications); addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound); addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound, "android.settings.SOUND_SETTINGS"); addIndex(ZenModeSettings.class, R.xml.zen_mode_settings, R.drawable.ic_settings_notifications); addIndex(ZenModePrioritySettings.class, Loading src/com/android/settings/search/SettingsSearchIndexablesProvider.java +2 −2 Original line number Diff line number Diff line Loading @@ -58,8 +58,8 @@ public class SettingsSearchIndexablesProvider extends SearchIndexablesProvider { ref[COLUMN_INDEX_XML_RES_RESID] = val.xmlResId; ref[COLUMN_INDEX_XML_RES_CLASS_NAME] = val.className; ref[COLUMN_INDEX_XML_RES_ICON_RESID] = val.iconResId; ref[COLUMN_INDEX_XML_RES_INTENT_ACTION] = null; // intent action ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE] = null; // intent target package ref[COLUMN_INDEX_XML_RES_INTENT_ACTION] = val.intentAction; ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE] = val.intentTargetPackage; ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS] = null; // intent target class cursor.addRow(ref); } Loading tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java +23 −4 Original line number Diff line number Diff line Loading @@ -587,7 +587,7 @@ public class DatabaseIndexingManagerTest { // Locale assertThat(cursor.getString(0)).isEqualTo(localeStr); // Data Rank assertThat(cursor.getInt(1)).isEqualTo(rank); assertThat(cursor.getInt(1)).isEqualTo(0); // Data Title assertThat(cursor.getString(2)).isEqualTo("Display size"); // Normalized Title Loading Loading @@ -644,7 +644,7 @@ public class DatabaseIndexingManagerTest { @Test public void testResourceProvider_resourceRowMatches() { SearchIndexableResource resource = getFakeResource(0); SearchIndexableResource resource = getFakeResource(0 /* xml */); resource.className = "com.android.settings.display.ScreenZoomSettings"; mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); Loading @@ -654,7 +654,7 @@ public class DatabaseIndexingManagerTest { // Locale assertThat(cursor.getString(0)).isEqualTo(localeStr); // Data Rank assertThat(cursor.getInt(1)).isEqualTo(rank); assertThat(cursor.getInt(1)).isEqualTo(0); // Data Title assertThat(cursor.getString(2)).isEqualTo("Display size"); // Normalized Title Loading Loading @@ -702,7 +702,7 @@ public class DatabaseIndexingManagerTest { @Test public void testResourceProvider_disabledResource_rowsInserted() { SearchIndexableResource resource = getFakeResource(0); SearchIndexableResource resource = getFakeResource(0 /* xml */); resource.className = "com.android.settings.LegalSettings"; mManager.indexOneSearchIndexableData(mDb, localeStr, resource, Loading @@ -724,6 +724,25 @@ public class DatabaseIndexingManagerTest { assertThat(cursor.getCount()).isEqualTo(1); } @Test public void testResourceProvider_nonSubsettingIntent() { SearchIndexableResource resource = getFakeResource(0 /* xml */); String fakeAction = "fake_action"; resource.className = "com.android.settings.LegalSettings"; resource.intentAction = fakeAction; resource.intentTargetPackage = SearchIndexableResources.SUBSETTING_TARGET_PACKAGE; mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); cursor.moveToPosition(0); // Intent Action assertThat(cursor.getString(13)).isEqualTo(fakeAction); // Target Package assertThat(cursor.getString(14)) .isEqualTo(SearchIndexableResources.SUBSETTING_TARGET_PACKAGE); } // Test new public indexing flow @Test Loading Loading
src/com/android/settings/search/DatabaseIndexingManager.java +18 −4 Original line number Diff line number Diff line Loading @@ -17,6 +17,8 @@ package com.android.settings.search; import com.android.settings.R; import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentValues; Loading Loading @@ -858,7 +860,8 @@ public class DatabaseIndexingManager { List<String> nonIndexableKeys) { final String className = sir.className; final int rank = sir.rank; final String intentAction = sir.intentAction; final String intentTargetPackage = sir.intentTargetPackage; if (provider == null) { Log.w(LOG_TAG, "Cannot find provider: " + className); Loading Loading @@ -886,7 +889,6 @@ public class DatabaseIndexingManager { .setClassName(className) .setScreenTitle(raw.screenTitle) .setIconResId(raw.iconResId) .setRank(rank) .setIntentAction(raw.intentAction) .setIntentTargetPackage(raw.intentTargetPackage) .setIntentTargetClass(raw.intentTargetClass) Loading @@ -911,7 +913,15 @@ public class DatabaseIndexingManager { continue; } item.className = (TextUtils.isEmpty(item.className)) ? className : item.className; item.className = TextUtils.isEmpty(item.className) ? className : item.className; item.intentAction = TextUtils.isEmpty(item.intentAction) ? intentAction : item.intentAction; item.intentTargetPackage = TextUtils.isEmpty(item.intentTargetPackage) ? intentTargetPackage : item.intentTargetPackage; indexFromResource(database, localeStr, item, nonIndexableKeys); } Loading Loading @@ -1245,7 +1255,11 @@ public class DatabaseIndexingManager { private Intent buildIntent(Context context) { final Intent intent; if (TextUtils.isEmpty(mIntentAction)) { boolean isEmptyIntentAction = TextUtils.isEmpty(mIntentAction); // No intent action is set, or the intent action is for a subsetting. if (isEmptyIntentAction || (!isEmptyIntentAction && TextUtils.equals(mIntentTargetPackage, SearchIndexableResources.SUBSETTING_TARGET_PACKAGE))) { // Action is null, we will launch it as a sub-setting intent = DatabaseIndexingUtils.buildSubsettingIntent(context, mClassName, mKey, mScreenTitle); Loading
src/com/android/settings/search/SearchIndexableResources.java +26 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.support.annotation.DrawableRes; import android.support.annotation.VisibleForTesting; import android.support.annotation.XmlRes; import android.text.TextUtils; import com.android.settings.DateTimeSettings; import com.android.settings.DeviceInfoSettings; import com.android.settings.DisplaySettings; Loading Loading @@ -92,6 +93,12 @@ import java.util.HashMap; public final class SearchIndexableResources { /** * Identifies subsettings which have an {@link SearchIndexableResource#intentAction} but * whose intents should still be treated as subsettings inside of Settings. */ public static final String SUBSETTING_TARGET_PACKAGE = "subsetting_target_package"; @XmlRes public static final int NO_DATA_RES_ID = 0; Loading @@ -101,8 +108,22 @@ public final class SearchIndexableResources { @VisibleForTesting static void addIndex(Class<?> indexClass, @XmlRes int xmlResId, @DrawableRes int iconResId) { addIndex(indexClass, xmlResId, iconResId, null /* targetAction */); } @VisibleForTesting static void addIndex(Class<?> indexClass, @XmlRes int xmlResId, @DrawableRes int iconResId, String targetAction) { String className = indexClass.getName(); sResMap.put(className, new SearchIndexableResource(0, xmlResId, className, iconResId)); SearchIndexableResource resource = new SearchIndexableResource(0, xmlResId, className, iconResId); if (!TextUtils.isEmpty(targetAction)) { resource.intentAction = targetAction; resource.intentTargetPackage = SUBSETTING_TARGET_PACKAGE; } sResMap.put(className, resource); } static { Loading @@ -117,14 +138,16 @@ public final class SearchIndexableResources { addIndex(DataUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage); addIndex(DataUsageMeteredSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage); addIndex(ScreenZoomSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display, "android.settings.DISPLAY_SETTINGS"); addIndex(AmbientDisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(WallpaperTypeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display); addIndex(ConfigureNotificationSettings.class, R.xml.configure_notification_settings, R.drawable.ic_settings_notifications); addIndex(AppAndNotificationDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications); addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound); addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound, "android.settings.SOUND_SETTINGS"); addIndex(ZenModeSettings.class, R.xml.zen_mode_settings, R.drawable.ic_settings_notifications); addIndex(ZenModePrioritySettings.class, Loading
src/com/android/settings/search/SettingsSearchIndexablesProvider.java +2 −2 Original line number Diff line number Diff line Loading @@ -58,8 +58,8 @@ public class SettingsSearchIndexablesProvider extends SearchIndexablesProvider { ref[COLUMN_INDEX_XML_RES_RESID] = val.xmlResId; ref[COLUMN_INDEX_XML_RES_CLASS_NAME] = val.className; ref[COLUMN_INDEX_XML_RES_ICON_RESID] = val.iconResId; ref[COLUMN_INDEX_XML_RES_INTENT_ACTION] = null; // intent action ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE] = null; // intent target package ref[COLUMN_INDEX_XML_RES_INTENT_ACTION] = val.intentAction; ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE] = val.intentTargetPackage; ref[COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS] = null; // intent target class cursor.addRow(ref); } Loading
tests/robotests/src/com/android/settings/search/DatabaseIndexingManagerTest.java +23 −4 Original line number Diff line number Diff line Loading @@ -587,7 +587,7 @@ public class DatabaseIndexingManagerTest { // Locale assertThat(cursor.getString(0)).isEqualTo(localeStr); // Data Rank assertThat(cursor.getInt(1)).isEqualTo(rank); assertThat(cursor.getInt(1)).isEqualTo(0); // Data Title assertThat(cursor.getString(2)).isEqualTo("Display size"); // Normalized Title Loading Loading @@ -644,7 +644,7 @@ public class DatabaseIndexingManagerTest { @Test public void testResourceProvider_resourceRowMatches() { SearchIndexableResource resource = getFakeResource(0); SearchIndexableResource resource = getFakeResource(0 /* xml */); resource.className = "com.android.settings.display.ScreenZoomSettings"; mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); Loading @@ -654,7 +654,7 @@ public class DatabaseIndexingManagerTest { // Locale assertThat(cursor.getString(0)).isEqualTo(localeStr); // Data Rank assertThat(cursor.getInt(1)).isEqualTo(rank); assertThat(cursor.getInt(1)).isEqualTo(0); // Data Title assertThat(cursor.getString(2)).isEqualTo("Display size"); // Normalized Title Loading Loading @@ -702,7 +702,7 @@ public class DatabaseIndexingManagerTest { @Test public void testResourceProvider_disabledResource_rowsInserted() { SearchIndexableResource resource = getFakeResource(0); SearchIndexableResource resource = getFakeResource(0 /* xml */); resource.className = "com.android.settings.LegalSettings"; mManager.indexOneSearchIndexableData(mDb, localeStr, resource, Loading @@ -724,6 +724,25 @@ public class DatabaseIndexingManagerTest { assertThat(cursor.getCount()).isEqualTo(1); } @Test public void testResourceProvider_nonSubsettingIntent() { SearchIndexableResource resource = getFakeResource(0 /* xml */); String fakeAction = "fake_action"; resource.className = "com.android.settings.LegalSettings"; resource.intentAction = fakeAction; resource.intentTargetPackage = SearchIndexableResources.SUBSETTING_TARGET_PACKAGE; mManager.indexOneSearchIndexableData(mDb, localeStr, resource, new HashMap<>()); Cursor cursor = mDb.rawQuery("SELECT * FROM prefs_index", null); cursor.moveToPosition(0); // Intent Action assertThat(cursor.getString(13)).isEqualTo(fakeAction); // Target Package assertThat(cursor.getString(14)) .isEqualTo(SearchIndexableResources.SUBSETTING_TARGET_PACKAGE); } // Test new public indexing flow @Test Loading