From ff865c898f82f8e5181d510ea0e9e1535b12a24b Mon Sep 17 00:00:00 2001 From: Matthew Fritze Date: Tue, 8 May 2018 16:34:36 -0700 Subject: [PATCH] Remove the Settings search keywords from Slices The keywords used for settings search are good when we are highly confident the user is searching for as setting (settings search), but not effective in a more general search setting (launcher, an assistant). Thus, we should not index these keywords as Slice keywords, and rely on the setting title and screen title as baseline keywords. Change-Id: I99e44834454b5949c4883f877e02be47498e06e2 Fixes: 78911847 Test: robotests --- .../slices/SettingsSliceProvider.java | 1 - .../settings/slices/SliceBuilderUtils.java | 27 ++++++++++++------- .../settings/slices/SliceDataConverter.java | 3 --- .../slices/SliceDataConverterTest.java | 3 +-- .../settings/testutils/SliceTester.java | 7 ++++- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java index 55ad6b0b29b..df826cb8cef 100644 --- a/src/com/android/settings/slices/SettingsSliceProvider.java +++ b/src/com/android/settings/slices/SettingsSliceProvider.java @@ -42,7 +42,6 @@ import com.android.settingslib.utils.ThreadUtils; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.WeakHashMap; diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 0a4d51b7d3b..8ce681bbe30 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -238,7 +238,7 @@ public class SliceBuilderUtils { (TogglePreferenceController) controller; final SliceAction sliceAction = getToggleAction(context, sliceData, toggleController.isChecked()); - final List keywords = buildSliceKeywords(sliceData.getKeywords()); + final List keywords = buildSliceKeywords(sliceData); return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS) .addRow(rowBuilder -> rowBuilder @@ -256,7 +256,7 @@ public class SliceBuilderUtils { final PendingIntent contentIntent = getContentPendingIntent(context, sliceData); final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource()); final CharSequence subtitleText = getSubtitleText(context, controller, sliceData); - final List keywords = buildSliceKeywords(sliceData.getKeywords()); + final List keywords = buildSliceKeywords(sliceData); return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS) .addRow(rowBuilder -> rowBuilder @@ -276,7 +276,7 @@ public class SliceBuilderUtils { final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource()); final SliceAction primaryAction = new SliceAction(contentIntent, icon, sliceData.getTitle()); - final List keywords = buildSliceKeywords(sliceData.getKeywords()); + final List keywords = buildSliceKeywords(sliceData); return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS) .addInputRange(builder -> builder @@ -324,19 +324,28 @@ public class SliceBuilderUtils { || TextUtils.equals(summary, doublePlaceHolder)); } - private static List buildSliceKeywords(String keywordString) { - if (keywordString == null) { - return new ArrayList<>(); + private static List buildSliceKeywords(SliceData data) { + final List keywords = new ArrayList<>(); + + keywords.add(data.getTitle()); + + if (!TextUtils.equals(data.getTitle(), data.getScreenTitle())) { + keywords.add(data.getScreenTitle().toString()); } - final String[] keywords = keywordString.split(","); - return Arrays.asList(keywords); + final String keywordString = data.getKeywords(); + if (keywordString != null) { + final String[] keywordArray = keywordString.split(","); + keywords.addAll(Arrays.asList(keywordArray)); + } + + return keywords; } private static Slice buildUnavailableSlice(Context context, SliceData data, BasePreferenceController controller) { final String title = data.getTitle(); - final List keywords = buildSliceKeywords(data.getKeywords()); + final List keywords = buildSliceKeywords(data); final String summary; final SliceAction primaryAction; final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource()); diff --git a/src/com/android/settings/slices/SliceDataConverter.java b/src/com/android/settings/slices/SliceDataConverter.java index eb6a44fdabe..7bd66baa390 100644 --- a/src/com/android/settings/slices/SliceDataConverter.java +++ b/src/com/android/settings/slices/SliceDataConverter.java @@ -185,7 +185,6 @@ class SliceDataConverter { | MetadataFlag.FLAG_NEED_PREF_TITLE | MetadataFlag.FLAG_NEED_PREF_ICON | MetadataFlag.FLAG_NEED_PREF_SUMMARY - | MetadataFlag.FLAG_NEED_KEYWORDS | MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG); for (Bundle bundle : metadata) { @@ -198,7 +197,6 @@ class SliceDataConverter { final String key = bundle.getString(METADATA_KEY); final String title = bundle.getString(METADATA_TITLE); final String summary = bundle.getString(METADATA_SUMMARY); - final String keywords = bundle.getString(METADATA_KEYWORDS); final int iconResId = bundle.getInt(METADATA_ICON); final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName, key); @@ -210,7 +208,6 @@ class SliceDataConverter { .setSummary(summary) .setIcon(iconResId) .setScreenTitle(screenTitle) - .setKeywords(keywords) .setPreferenceControllerClassName(controllerClassName) .setFragmentName(fragmentName) .setSliceType(sliceType) diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java index 87ada3697e3..674d6299a1e 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java @@ -56,7 +56,6 @@ public class SliceDataConverterTest { private static final String FAKE_TITLE = "title"; private static final String FAKE_SUMMARY = "summary"; private static final String FAKE_SCREEN_TITLE = "screen_title"; - private static final String FAKE_KEYWORDS = "a, b, c"; private static final String FAKE_FRAGMENT_CLASSNAME = FakeIndexProvider.class.getName(); private static final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName(); private static final String ACCESSIBILITY_FRAGMENT = AccessibilitySettings.class.getName(); @@ -118,7 +117,7 @@ public class SliceDataConverterTest { assertThat(fakeSlice.getTitle()).isEqualTo(FAKE_TITLE); assertThat(fakeSlice.getSummary()).isEqualTo(FAKE_SUMMARY); assertThat(fakeSlice.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); - assertThat(fakeSlice.getKeywords()).isEqualTo(FAKE_KEYWORDS); + assertThat(fakeSlice.getKeywords()).isNull(); assertThat(fakeSlice.getIconResource()).isNotNull(); assertThat(fakeSlice.getUri()).isNull(); assertThat(fakeSlice.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_CLASSNAME); diff --git a/tests/robotests/src/com/android/settings/testutils/SliceTester.java b/tests/robotests/src/com/android/settings/testutils/SliceTester.java index a7840e80a9d..6733a2a5194 100644 --- a/tests/robotests/src/com/android/settings/testutils/SliceTester.java +++ b/tests/robotests/src/com/android/settings/testutils/SliceTester.java @@ -30,7 +30,9 @@ import android.app.PendingIntent; import android.content.Context; import java.util.Arrays; +import java.util.HashSet; import java.util.List; +import java.util.Set; import androidx.slice.Slice; import androidx.slice.SliceItem; @@ -188,7 +190,10 @@ public class SliceTester { private static void assertKeywords(SliceMetadata metadata, SliceData data) { final List keywords = metadata.getSliceKeywords(); - final List expectedKeywords = Arrays.asList(data.getKeywords().split(",")); + final Set expectedKeywords = new HashSet<>( + Arrays.asList(data.getKeywords().split(","))); + expectedKeywords.add(data.getTitle()); + expectedKeywords.add(data.getScreenTitle().toString()); assertThat(keywords).containsExactlyElementsIn(expectedKeywords); } } \ No newline at end of file