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
This commit is contained in:
Matthew Fritze
2018-05-08 16:34:36 -07:00
parent 9a1d318b37
commit ff865c898f
5 changed files with 25 additions and 16 deletions

View File

@@ -42,7 +42,6 @@ import com.android.settingslib.utils.ThreadUtils;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.WeakHashMap; import java.util.WeakHashMap;

View File

@@ -238,7 +238,7 @@ public class SliceBuilderUtils {
(TogglePreferenceController) controller; (TogglePreferenceController) controller;
final SliceAction sliceAction = getToggleAction(context, sliceData, final SliceAction sliceAction = getToggleAction(context, sliceData,
toggleController.isChecked()); toggleController.isChecked());
final List<String> keywords = buildSliceKeywords(sliceData.getKeywords()); final List<String> keywords = buildSliceKeywords(sliceData);
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS) return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
.addRow(rowBuilder -> rowBuilder .addRow(rowBuilder -> rowBuilder
@@ -256,7 +256,7 @@ public class SliceBuilderUtils {
final PendingIntent contentIntent = getContentPendingIntent(context, sliceData); final PendingIntent contentIntent = getContentPendingIntent(context, sliceData);
final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource()); final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
final CharSequence subtitleText = getSubtitleText(context, controller, sliceData); final CharSequence subtitleText = getSubtitleText(context, controller, sliceData);
final List<String> keywords = buildSliceKeywords(sliceData.getKeywords()); final List<String> keywords = buildSliceKeywords(sliceData);
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS) return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
.addRow(rowBuilder -> rowBuilder .addRow(rowBuilder -> rowBuilder
@@ -276,7 +276,7 @@ public class SliceBuilderUtils {
final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource()); final IconCompat icon = IconCompat.createWithResource(context, sliceData.getIconResource());
final SliceAction primaryAction = new SliceAction(contentIntent, icon, final SliceAction primaryAction = new SliceAction(contentIntent, icon,
sliceData.getTitle()); sliceData.getTitle());
final List<String> keywords = buildSliceKeywords(sliceData.getKeywords()); final List<String> keywords = buildSliceKeywords(sliceData);
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS) return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
.addInputRange(builder -> builder .addInputRange(builder -> builder
@@ -324,19 +324,28 @@ public class SliceBuilderUtils {
|| TextUtils.equals(summary, doublePlaceHolder)); || TextUtils.equals(summary, doublePlaceHolder));
} }
private static List<String> buildSliceKeywords(String keywordString) { private static List<String> buildSliceKeywords(SliceData data) {
if (keywordString == null) { final List<String> keywords = new ArrayList<>();
return new ArrayList<>();
keywords.add(data.getTitle());
if (!TextUtils.equals(data.getTitle(), data.getScreenTitle())) {
keywords.add(data.getScreenTitle().toString());
} }
final String[] keywords = keywordString.split(","); final String keywordString = data.getKeywords();
return Arrays.asList(keywords); if (keywordString != null) {
final String[] keywordArray = keywordString.split(",");
keywords.addAll(Arrays.asList(keywordArray));
}
return keywords;
} }
private static Slice buildUnavailableSlice(Context context, SliceData data, private static Slice buildUnavailableSlice(Context context, SliceData data,
BasePreferenceController controller) { BasePreferenceController controller) {
final String title = data.getTitle(); final String title = data.getTitle();
final List<String> keywords = buildSliceKeywords(data.getKeywords()); final List<String> keywords = buildSliceKeywords(data);
final String summary; final String summary;
final SliceAction primaryAction; final SliceAction primaryAction;
final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource()); final IconCompat icon = IconCompat.createWithResource(context, data.getIconResource());

View File

@@ -185,7 +185,6 @@ class SliceDataConverter {
| MetadataFlag.FLAG_NEED_PREF_TITLE | MetadataFlag.FLAG_NEED_PREF_TITLE
| MetadataFlag.FLAG_NEED_PREF_ICON | MetadataFlag.FLAG_NEED_PREF_ICON
| MetadataFlag.FLAG_NEED_PREF_SUMMARY | MetadataFlag.FLAG_NEED_PREF_SUMMARY
| MetadataFlag.FLAG_NEED_KEYWORDS
| MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG); | MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG);
for (Bundle bundle : metadata) { for (Bundle bundle : metadata) {
@@ -198,7 +197,6 @@ class SliceDataConverter {
final String key = bundle.getString(METADATA_KEY); final String key = bundle.getString(METADATA_KEY);
final String title = bundle.getString(METADATA_TITLE); final String title = bundle.getString(METADATA_TITLE);
final String summary = bundle.getString(METADATA_SUMMARY); final String summary = bundle.getString(METADATA_SUMMARY);
final String keywords = bundle.getString(METADATA_KEYWORDS);
final int iconResId = bundle.getInt(METADATA_ICON); final int iconResId = bundle.getInt(METADATA_ICON);
final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName, final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName,
key); key);
@@ -210,7 +208,6 @@ class SliceDataConverter {
.setSummary(summary) .setSummary(summary)
.setIcon(iconResId) .setIcon(iconResId)
.setScreenTitle(screenTitle) .setScreenTitle(screenTitle)
.setKeywords(keywords)
.setPreferenceControllerClassName(controllerClassName) .setPreferenceControllerClassName(controllerClassName)
.setFragmentName(fragmentName) .setFragmentName(fragmentName)
.setSliceType(sliceType) .setSliceType(sliceType)

View File

@@ -56,7 +56,6 @@ public class SliceDataConverterTest {
private static final String FAKE_TITLE = "title"; private static final String FAKE_TITLE = "title";
private static final String FAKE_SUMMARY = "summary"; private static final String FAKE_SUMMARY = "summary";
private static final String FAKE_SCREEN_TITLE = "screen_title"; 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_FRAGMENT_CLASSNAME = FakeIndexProvider.class.getName();
private static final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName(); private static final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName();
private static final String ACCESSIBILITY_FRAGMENT = AccessibilitySettings.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.getTitle()).isEqualTo(FAKE_TITLE);
assertThat(fakeSlice.getSummary()).isEqualTo(FAKE_SUMMARY); assertThat(fakeSlice.getSummary()).isEqualTo(FAKE_SUMMARY);
assertThat(fakeSlice.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE); assertThat(fakeSlice.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
assertThat(fakeSlice.getKeywords()).isEqualTo(FAKE_KEYWORDS); assertThat(fakeSlice.getKeywords()).isNull();
assertThat(fakeSlice.getIconResource()).isNotNull(); assertThat(fakeSlice.getIconResource()).isNotNull();
assertThat(fakeSlice.getUri()).isNull(); assertThat(fakeSlice.getUri()).isNull();
assertThat(fakeSlice.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_CLASSNAME); assertThat(fakeSlice.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_CLASSNAME);

View File

@@ -30,7 +30,9 @@ import android.app.PendingIntent;
import android.content.Context; import android.content.Context;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import androidx.slice.Slice; import androidx.slice.Slice;
import androidx.slice.SliceItem; import androidx.slice.SliceItem;
@@ -188,7 +190,10 @@ public class SliceTester {
private static void assertKeywords(SliceMetadata metadata, SliceData data) { private static void assertKeywords(SliceMetadata metadata, SliceData data) {
final List<String> keywords = metadata.getSliceKeywords(); final List<String> keywords = metadata.getSliceKeywords();
final List<String> expectedKeywords = Arrays.asList(data.getKeywords().split(",")); final Set<String> expectedKeywords = new HashSet<>(
Arrays.asList(data.getKeywords().split(",")));
expectedKeywords.add(data.getTitle());
expectedKeywords.add(data.getScreenTitle().toString());
assertThat(keywords).containsExactlyElementsIn(expectedKeywords); assertThat(keywords).containsExactlyElementsIn(expectedKeywords);
} }
} }