Add keywords to Slices
Attach the keywords used for Settings search to Slices. Their primary use is helping match synonyms for presenters which display slices without explicit Uri requests, like a launcher. This changes: - Updates database scheme - Adds to SliceData object - Grab keywords in the SliceDataConverter - Set keywords on all slices Test: robotests Change-Id: I16c40d2380ffddaf0a87fb1b9cd58e95573b308f Fixes: 78306195
This commit is contained in:
@@ -19,8 +19,7 @@
|
|||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||||
android:key="auto_brightness_detail"
|
android:key="auto_brightness_detail"
|
||||||
android:title="@string/auto_brightness_title"
|
android:title="@string/auto_brightness_title">
|
||||||
settings:keywords="@string/keywords_display_auto_brightness">
|
|
||||||
|
|
||||||
<com.android.settings.widget.VideoPreference
|
<com.android.settings.widget.VideoPreference
|
||||||
android:key="auto_brightness_video"
|
android:key="auto_brightness_video"
|
||||||
@@ -31,6 +30,7 @@
|
|||||||
<com.android.settingslib.RestrictedSwitchPreference
|
<com.android.settingslib.RestrictedSwitchPreference
|
||||||
android:key="auto_brightness"
|
android:key="auto_brightness"
|
||||||
android:title="@string/auto_brightness_title"
|
android:title="@string/auto_brightness_title"
|
||||||
|
settings:keywords="@string/keywords_display_auto_brightness"
|
||||||
settings:controller="com.android.settings.display.AutoBrightnessPreferenceController"
|
settings:controller="com.android.settings.display.AutoBrightnessPreferenceController"
|
||||||
settings:useAdminDisabledSummary="true"
|
settings:useAdminDisabledSummary="true"
|
||||||
settings:userRestriction="no_config_brightness" />
|
settings:userRestriction="no_config_brightness" />
|
||||||
|
@@ -77,6 +77,7 @@ public class PreferenceXmlParserUtils {
|
|||||||
int FLAG_NEED_PREF_SUMMARY = 1 << 5;
|
int FLAG_NEED_PREF_SUMMARY = 1 << 5;
|
||||||
int FLAG_NEED_PREF_ICON = 1 << 6;
|
int FLAG_NEED_PREF_ICON = 1 << 6;
|
||||||
int FLAG_NEED_PLATFORM_SLICE_FLAG = 1 << 7;
|
int FLAG_NEED_PLATFORM_SLICE_FLAG = 1 << 7;
|
||||||
|
int FLAG_NEED_KEYWORDS = 1 << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final String METADATA_PREF_TYPE = "type";
|
public static final String METADATA_PREF_TYPE = "type";
|
||||||
@@ -86,6 +87,7 @@ public class PreferenceXmlParserUtils {
|
|||||||
public static final String METADATA_SUMMARY = "summary";
|
public static final String METADATA_SUMMARY = "summary";
|
||||||
public static final String METADATA_ICON = "icon";
|
public static final String METADATA_ICON = "icon";
|
||||||
public static final String METADATA_PLATFORM_SLICE_FLAG = "platform_slice";
|
public static final String METADATA_PLATFORM_SLICE_FLAG = "platform_slice";
|
||||||
|
public static final String METADATA_KEYWORDS = "keywords";
|
||||||
|
|
||||||
private static final String ENTRIES_SEPARATOR = "|";
|
private static final String ENTRIES_SEPARATOR = "|";
|
||||||
|
|
||||||
@@ -226,6 +228,9 @@ public class PreferenceXmlParserUtils {
|
|||||||
preferenceMetadata.putBoolean(METADATA_PLATFORM_SLICE_FLAG,
|
preferenceMetadata.putBoolean(METADATA_PLATFORM_SLICE_FLAG,
|
||||||
getPlatformSlice(preferenceAttributes));
|
getPlatformSlice(preferenceAttributes));
|
||||||
}
|
}
|
||||||
|
if (hasFlag(flags, MetadataFlag.FLAG_NEED_KEYWORDS)) {
|
||||||
|
preferenceMetadata.putString(METADATA_KEYWORDS, getKeywords(preferenceAttributes));
|
||||||
|
}
|
||||||
metadata.add(preferenceMetadata);
|
metadata.add(preferenceMetadata);
|
||||||
|
|
||||||
preferenceAttributes.recycle();
|
preferenceAttributes.recycle();
|
||||||
@@ -305,4 +310,8 @@ public class PreferenceXmlParserUtils {
|
|||||||
private static boolean getPlatformSlice(TypedArray styledAttributes) {
|
private static boolean getPlatformSlice(TypedArray styledAttributes) {
|
||||||
return styledAttributes.getBoolean(R.styleable.Preference_platform_slice, false /* def */);
|
return styledAttributes.getBoolean(R.styleable.Preference_platform_slice, false /* def */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getKeywords(TypedArray styleAttributes) {
|
||||||
|
return styleAttributes.getString(R.styleable.Preference_keywords);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -47,6 +47,10 @@ import com.android.settingslib.core.AbstractPreferenceController;
|
|||||||
|
|
||||||
import android.support.v4.graphics.drawable.IconCompat;
|
import android.support.v4.graphics.drawable.IconCompat;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.slice.Slice;
|
import androidx.slice.Slice;
|
||||||
import androidx.slice.builders.ListBuilder;
|
import androidx.slice.builders.ListBuilder;
|
||||||
import androidx.slice.builders.SliceAction;
|
import androidx.slice.builders.SliceAction;
|
||||||
@@ -231,6 +235,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());
|
||||||
|
|
||||||
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
||||||
.addRow(rowBuilder -> rowBuilder
|
.addRow(rowBuilder -> rowBuilder
|
||||||
@@ -239,6 +244,7 @@ public class SliceBuilderUtils {
|
|||||||
.setPrimaryAction(
|
.setPrimaryAction(
|
||||||
new SliceAction(contentIntent, icon, sliceData.getTitle()))
|
new SliceAction(contentIntent, icon, sliceData.getTitle()))
|
||||||
.addEndItem(sliceAction))
|
.addEndItem(sliceAction))
|
||||||
|
.setKeywords(keywords)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,6 +253,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());
|
||||||
|
|
||||||
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
||||||
.addRow(rowBuilder -> rowBuilder
|
.addRow(rowBuilder -> rowBuilder
|
||||||
@@ -254,6 +261,7 @@ public class SliceBuilderUtils {
|
|||||||
.setSubtitle(subtitleText)
|
.setSubtitle(subtitleText)
|
||||||
.setPrimaryAction(
|
.setPrimaryAction(
|
||||||
new SliceAction(contentIntent, icon, sliceData.getTitle())))
|
new SliceAction(contentIntent, icon, sliceData.getTitle())))
|
||||||
|
.setKeywords(keywords)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,6 +273,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());
|
||||||
|
|
||||||
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
return new ListBuilder(context, sliceData.getUri(), SLICE_TTL_MILLIS)
|
||||||
.addInputRange(builder -> builder
|
.addInputRange(builder -> builder
|
||||||
@@ -273,6 +282,7 @@ public class SliceBuilderUtils {
|
|||||||
.setValue(sliderController.getSliderPosition())
|
.setValue(sliderController.getSliderPosition())
|
||||||
.setInputAction(actionIntent)
|
.setInputAction(actionIntent)
|
||||||
.setPrimaryAction(primaryAction))
|
.setPrimaryAction(primaryAction))
|
||||||
|
.setKeywords(keywords)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -311,9 +321,19 @@ public class SliceBuilderUtils {
|
|||||||
|| TextUtils.equals(summary, doublePlaceHolder));
|
|| TextUtils.equals(summary, doublePlaceHolder));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static List<String> buildSliceKeywords(String keywordString) {
|
||||||
|
if (keywordString == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
final String[] keywords = keywordString.split(",");
|
||||||
|
return Arrays.asList(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 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());
|
||||||
@@ -344,6 +364,7 @@ public class SliceBuilderUtils {
|
|||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setSubtitle(summary)
|
.setSubtitle(summary)
|
||||||
.setPrimaryAction(primaryAction))
|
.setPrimaryAction(primaryAction))
|
||||||
|
.setKeywords(keywords)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,6 +22,7 @@ import android.text.TextUtils;
|
|||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Data class representing a slice stored by {@link SlicesIndexer}.
|
* Data class representing a slice stored by {@link SlicesIndexer}.
|
||||||
@@ -59,6 +60,8 @@ public class SliceData {
|
|||||||
|
|
||||||
private final CharSequence mScreenTitle;
|
private final CharSequence mScreenTitle;
|
||||||
|
|
||||||
|
private final String mKeywords;
|
||||||
|
|
||||||
private final int mIconResource;
|
private final int mIconResource;
|
||||||
|
|
||||||
private final String mFragmentClassName;
|
private final String mFragmentClassName;
|
||||||
@@ -88,6 +91,10 @@ public class SliceData {
|
|||||||
return mScreenTitle;
|
return mScreenTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getKeywords() {
|
||||||
|
return mKeywords;
|
||||||
|
}
|
||||||
|
|
||||||
public int getIconResource() {
|
public int getIconResource() {
|
||||||
return mIconResource;
|
return mIconResource;
|
||||||
}
|
}
|
||||||
@@ -117,6 +124,7 @@ public class SliceData {
|
|||||||
mTitle = builder.mTitle;
|
mTitle = builder.mTitle;
|
||||||
mSummary = builder.mSummary;
|
mSummary = builder.mSummary;
|
||||||
mScreenTitle = builder.mScreenTitle;
|
mScreenTitle = builder.mScreenTitle;
|
||||||
|
mKeywords = builder.mKeywords;
|
||||||
mIconResource = builder.mIconResource;
|
mIconResource = builder.mIconResource;
|
||||||
mFragmentClassName = builder.mFragmentClassName;
|
mFragmentClassName = builder.mFragmentClassName;
|
||||||
mUri = builder.mUri;
|
mUri = builder.mUri;
|
||||||
@@ -148,6 +156,8 @@ public class SliceData {
|
|||||||
|
|
||||||
private CharSequence mScreenTitle;
|
private CharSequence mScreenTitle;
|
||||||
|
|
||||||
|
private String mKeywords;
|
||||||
|
|
||||||
private int mIconResource;
|
private int mIconResource;
|
||||||
|
|
||||||
private String mFragmentClassName;
|
private String mFragmentClassName;
|
||||||
@@ -180,6 +190,11 @@ public class SliceData {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Builder setKeywords(String keywords) {
|
||||||
|
mKeywords = keywords;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public Builder setIcon(int iconResource) {
|
public Builder setIcon(int iconResource) {
|
||||||
mIconResource = iconResource;
|
mIconResource = iconResource;
|
||||||
return this;
|
return this;
|
||||||
|
@@ -19,6 +19,7 @@ package com.android.settings.slices;
|
|||||||
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_CONTROLLER;
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_CONTROLLER;
|
||||||
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_ICON;
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_ICON;
|
||||||
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEY;
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEY;
|
||||||
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEYWORDS;
|
||||||
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_PLATFORM_SLICE_FLAG;
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_PLATFORM_SLICE_FLAG;
|
||||||
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SUMMARY;
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SUMMARY;
|
||||||
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_TITLE;
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_TITLE;
|
||||||
@@ -184,6 +185,7 @@ 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) {
|
||||||
@@ -196,6 +198,7 @@ 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);
|
||||||
@@ -207,6 +210,7 @@ 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)
|
||||||
|
@@ -44,6 +44,7 @@ public class SlicesDatabaseAccessor {
|
|||||||
IndexColumns.TITLE,
|
IndexColumns.TITLE,
|
||||||
IndexColumns.SUMMARY,
|
IndexColumns.SUMMARY,
|
||||||
IndexColumns.SCREENTITLE,
|
IndexColumns.SCREENTITLE,
|
||||||
|
IndexColumns.KEYWORDS,
|
||||||
IndexColumns.ICON_RESOURCE,
|
IndexColumns.ICON_RESOURCE,
|
||||||
IndexColumns.FRAGMENT,
|
IndexColumns.FRAGMENT,
|
||||||
IndexColumns.CONTROLLER,
|
IndexColumns.CONTROLLER,
|
||||||
@@ -150,6 +151,7 @@ public class SlicesDatabaseAccessor {
|
|||||||
final String summary = cursor.getString(cursor.getColumnIndex(IndexColumns.SUMMARY));
|
final String summary = cursor.getString(cursor.getColumnIndex(IndexColumns.SUMMARY));
|
||||||
final String screenTitle = cursor.getString(
|
final String screenTitle = cursor.getString(
|
||||||
cursor.getColumnIndex(IndexColumns.SCREENTITLE));
|
cursor.getColumnIndex(IndexColumns.SCREENTITLE));
|
||||||
|
final String keywords = cursor.getString(cursor.getColumnIndex(IndexColumns.KEYWORDS));
|
||||||
final int iconResource = cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE));
|
final int iconResource = cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE));
|
||||||
final String fragmentClassName = cursor.getString(
|
final String fragmentClassName = cursor.getString(
|
||||||
cursor.getColumnIndex(IndexColumns.FRAGMENT));
|
cursor.getColumnIndex(IndexColumns.FRAGMENT));
|
||||||
@@ -169,6 +171,7 @@ public class SlicesDatabaseAccessor {
|
|||||||
.setTitle(title)
|
.setTitle(title)
|
||||||
.setSummary(summary)
|
.setSummary(summary)
|
||||||
.setScreenTitle(screenTitle)
|
.setScreenTitle(screenTitle)
|
||||||
|
.setKeywords(keywords)
|
||||||
.setIcon(iconResource)
|
.setIcon(iconResource)
|
||||||
.setFragmentName(fragmentClassName)
|
.setFragmentName(fragmentClassName)
|
||||||
.setPreferenceControllerClassName(controllerClassName)
|
.setPreferenceControllerClassName(controllerClassName)
|
||||||
|
@@ -36,7 +36,7 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
private static final String DATABASE_NAME = "slices_index.db";
|
private static final String DATABASE_NAME = "slices_index.db";
|
||||||
private static final String SHARED_PREFS_TAG = "slices_shared_prefs";
|
private static final String SHARED_PREFS_TAG = "slices_shared_prefs";
|
||||||
|
|
||||||
private static final int DATABASE_VERSION = 1;
|
private static final int DATABASE_VERSION = 2;
|
||||||
|
|
||||||
public interface Tables {
|
public interface Tables {
|
||||||
String TABLE_SLICES_INDEX = "slices_index";
|
String TABLE_SLICES_INDEX = "slices_index";
|
||||||
@@ -63,6 +63,11 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
*/
|
*/
|
||||||
String SCREENTITLE = "screentitle";
|
String SCREENTITLE = "screentitle";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String with a comma separated list of keywords relating to the Slice.
|
||||||
|
*/
|
||||||
|
String KEYWORDS = "keywords";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resource ID for the icon of the setting. Should be 0 for no icon.
|
* Resource ID for the icon of the setting. Should be 0 for no icon.
|
||||||
*/
|
*/
|
||||||
@@ -101,6 +106,8 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
", " +
|
", " +
|
||||||
IndexColumns.SCREENTITLE +
|
IndexColumns.SCREENTITLE +
|
||||||
", " +
|
", " +
|
||||||
|
IndexColumns.KEYWORDS +
|
||||||
|
", " +
|
||||||
IndexColumns.ICON_RESOURCE +
|
IndexColumns.ICON_RESOURCE +
|
||||||
", " +
|
", " +
|
||||||
IndexColumns.FRAGMENT +
|
IndexColumns.FRAGMENT +
|
||||||
@@ -109,7 +116,7 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
|||||||
", " +
|
", " +
|
||||||
IndexColumns.PLATFORM_SLICE +
|
IndexColumns.PLATFORM_SLICE +
|
||||||
", " +
|
", " +
|
||||||
IndexColumns.SLICE_TYPE+
|
IndexColumns.SLICE_TYPE +
|
||||||
");";
|
");";
|
||||||
|
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
|
@@ -105,6 +105,7 @@ class SlicesIndexer implements Runnable {
|
|||||||
values.put(IndexColumns.TITLE, dataRow.getTitle());
|
values.put(IndexColumns.TITLE, dataRow.getTitle());
|
||||||
values.put(IndexColumns.SUMMARY, dataRow.getSummary());
|
values.put(IndexColumns.SUMMARY, dataRow.getSummary());
|
||||||
values.put(IndexColumns.SCREENTITLE, dataRow.getScreenTitle().toString());
|
values.put(IndexColumns.SCREENTITLE, dataRow.getScreenTitle().toString());
|
||||||
|
values.put(IndexColumns.KEYWORDS, dataRow.getKeywords());
|
||||||
values.put(IndexColumns.ICON_RESOURCE, dataRow.getIconResource());
|
values.put(IndexColumns.ICON_RESOURCE, dataRow.getIconResource());
|
||||||
values.put(IndexColumns.FRAGMENT, dataRow.getFragmentClassName());
|
values.put(IndexColumns.FRAGMENT, dataRow.getFragmentClassName());
|
||||||
values.put(IndexColumns.CONTROLLER, dataRow.getPreferenceController());
|
values.put(IndexColumns.CONTROLLER, dataRow.getPreferenceController());
|
||||||
|
@@ -25,6 +25,7 @@
|
|||||||
android:icon="@drawable/ic_android"
|
android:icon="@drawable/ic_android"
|
||||||
android:summary="summary"
|
android:summary="summary"
|
||||||
settings:controller="com.android.settings.slices.FakePreferenceController"
|
settings:controller="com.android.settings.slices.FakePreferenceController"
|
||||||
|
settings:keywords="a, b, c"
|
||||||
settings:platform_slice="true"/>
|
settings:platform_slice="true"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.core;
|
package com.android.settings.core;
|
||||||
|
|
||||||
|
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEYWORDS;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -244,6 +246,21 @@ public class PreferenceXmlParserUtilsTest {
|
|||||||
assertThat(hasPreferenceScreen).isTrue();
|
assertThat(hasPreferenceScreen).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Config(qualifiers = "mcc999")
|
||||||
|
public void extractMetadata_requestIncludesKeywords_shouldContainKeywords()
|
||||||
|
throws IOException, XmlPullParserException {
|
||||||
|
final String expectedKeywords = "a, b, c";
|
||||||
|
final List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
|
||||||
|
R.xml.location_settings,
|
||||||
|
MetadataFlag.FLAG_NEED_PREF_TYPE | MetadataFlag.FLAG_NEED_KEYWORDS);
|
||||||
|
final Bundle bundle = metadata.get(0);
|
||||||
|
|
||||||
|
final String keywords = bundle.getString(METADATA_KEYWORDS);
|
||||||
|
|
||||||
|
assertThat(keywords).isEqualTo(expectedKeywords);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param resId the ID for the XML preference
|
* @param resId the ID for the XML preference
|
||||||
* @return an XML resource parser that points to the start tag
|
* @return an XML resource parser that points to the start tag
|
||||||
|
@@ -60,6 +60,7 @@ public class SliceBuilderUtilsTest {
|
|||||||
private final String TITLE = "title";
|
private final String TITLE = "title";
|
||||||
private final String SUMMARY = "summary";
|
private final String SUMMARY = "summary";
|
||||||
private final String SCREEN_TITLE = "screen title";
|
private final String SCREEN_TITLE = "screen title";
|
||||||
|
private final String KEYWORDS = "a, b, c";
|
||||||
private final String FRAGMENT_NAME = "fragment name";
|
private final String FRAGMENT_NAME = "fragment name";
|
||||||
private final int ICON = 1234; // I declare a thumb war
|
private final int ICON = 1234; // I declare a thumb war
|
||||||
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
||||||
@@ -422,6 +423,7 @@ public class SliceBuilderUtilsTest {
|
|||||||
.setTitle(TITLE)
|
.setTitle(TITLE)
|
||||||
.setSummary(summary)
|
.setSummary(summary)
|
||||||
.setScreenTitle(SCREEN_TITLE)
|
.setScreenTitle(SCREEN_TITLE)
|
||||||
|
.setKeywords(KEYWORDS)
|
||||||
.setIcon(ICON)
|
.setIcon(ICON)
|
||||||
.setFragmentName(FRAGMENT_NAME)
|
.setFragmentName(FRAGMENT_NAME)
|
||||||
.setUri(URI)
|
.setUri(URI)
|
||||||
|
@@ -52,21 +52,21 @@ import java.util.List;
|
|||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
public class SliceDataConverterTest {
|
public class SliceDataConverterTest {
|
||||||
|
|
||||||
private final String FAKE_KEY = "key";
|
private static final String FAKE_KEY = "key";
|
||||||
private final String FAKE_TITLE = "title";
|
private static final String FAKE_TITLE = "title";
|
||||||
private final String FAKE_SUMMARY = "summary";
|
private static final String FAKE_SUMMARY = "summary";
|
||||||
private final String FAKE_SCREEN_TITLE = "screen_title";
|
private static final String FAKE_SCREEN_TITLE = "screen_title";
|
||||||
private final String FAKE_FRAGMENT_CLASSNAME = FakeIndexProvider.class.getName();
|
private static final String FAKE_KEYWORDS = "a, b, c";
|
||||||
private final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName();
|
private static final String FAKE_FRAGMENT_CLASSNAME = FakeIndexProvider.class.getName();
|
||||||
|
private static final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName();
|
||||||
private final String ACCESSIBILITY_FRAGMENT = AccessibilitySettings.class.getName();
|
private static final String ACCESSIBILITY_FRAGMENT = AccessibilitySettings.class.getName();
|
||||||
private final String A11Y_CONTROLLER_NAME =
|
private static final String A11Y_CONTROLLER_NAME =
|
||||||
AccessibilitySlicePreferenceController.class.getName();
|
AccessibilitySlicePreferenceController.class.getName();
|
||||||
private final String FAKE_SERVICE_NAME = "fake_service";
|
private static final String FAKE_SERVICE_NAME = "fake_service";
|
||||||
private final String FAKE_ACCESSIBILITY_PACKAGE = "fake_package";
|
private static final String FAKE_ACCESSIBILITY_PACKAGE = "fake_package";
|
||||||
private final String FAKE_A11Y_SERVICE_NAME =
|
private static final String FAKE_A11Y_SERVICE_NAME =
|
||||||
FAKE_ACCESSIBILITY_PACKAGE + "/" + FAKE_SERVICE_NAME;
|
FAKE_ACCESSIBILITY_PACKAGE + "/" + FAKE_SERVICE_NAME;
|
||||||
private final int FAKE_ICON = 1234;
|
private static final int FAKE_ICON = 1234;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@@ -118,6 +118,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.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);
|
||||||
|
@@ -32,6 +32,7 @@ public class SliceDataTest {
|
|||||||
private final String TITLE = "title";
|
private final String TITLE = "title";
|
||||||
private final String SUMMARY = "summary";
|
private final String SUMMARY = "summary";
|
||||||
private final String SCREEN_TITLE = "screen title";
|
private final String SCREEN_TITLE = "screen title";
|
||||||
|
private final String KEYWORDS = "a, b, c";
|
||||||
private final String FRAGMENT_NAME = "fragment name";
|
private final String FRAGMENT_NAME = "fragment name";
|
||||||
private final int ICON = 1234; // I declare a thumb war
|
private final int ICON = 1234; // I declare a thumb war
|
||||||
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
||||||
@@ -46,6 +47,7 @@ public class SliceDataTest {
|
|||||||
.setTitle(TITLE)
|
.setTitle(TITLE)
|
||||||
.setSummary(SUMMARY)
|
.setSummary(SUMMARY)
|
||||||
.setScreenTitle(SCREEN_TITLE)
|
.setScreenTitle(SCREEN_TITLE)
|
||||||
|
.setKeywords(KEYWORDS)
|
||||||
.setIcon(ICON)
|
.setIcon(ICON)
|
||||||
.setFragmentName(FRAGMENT_NAME)
|
.setFragmentName(FRAGMENT_NAME)
|
||||||
.setUri(URI)
|
.setUri(URI)
|
||||||
@@ -59,6 +61,7 @@ public class SliceDataTest {
|
|||||||
assertThat(data.getTitle()).isEqualTo(TITLE);
|
assertThat(data.getTitle()).isEqualTo(TITLE);
|
||||||
assertThat(data.getSummary()).isEqualTo(SUMMARY);
|
assertThat(data.getSummary()).isEqualTo(SUMMARY);
|
||||||
assertThat(data.getScreenTitle()).isEqualTo(SCREEN_TITLE);
|
assertThat(data.getScreenTitle()).isEqualTo(SCREEN_TITLE);
|
||||||
|
assertThat(data.getKeywords()).isEqualTo(KEYWORDS);
|
||||||
assertThat(data.getIconResource()).isEqualTo(ICON);
|
assertThat(data.getIconResource()).isEqualTo(ICON);
|
||||||
assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME);
|
assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME);
|
||||||
assertThat(data.getUri()).isEqualTo(URI);
|
assertThat(data.getUri()).isEqualTo(URI);
|
||||||
|
@@ -44,6 +44,7 @@ public class SlicesDatabaseAccessorTest {
|
|||||||
private final String FAKE_TITLE = "title";
|
private final String FAKE_TITLE = "title";
|
||||||
private final String FAKE_SUMMARY = "summary";
|
private final String FAKE_SUMMARY = "summary";
|
||||||
private final String FAKE_SCREEN_TITLE = "screen_title";
|
private final String FAKE_SCREEN_TITLE = "screen_title";
|
||||||
|
private final String FAKE_KEYWORDS = "a, b, c";
|
||||||
private final int FAKE_ICON = 1234;
|
private final int FAKE_ICON = 1234;
|
||||||
private final String FAKE_FRAGMENT_NAME = FakeIndexProvider.class.getName();
|
private final String FAKE_FRAGMENT_NAME = FakeIndexProvider.class.getName();
|
||||||
private final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName();
|
private final String FAKE_CONTROLLER_NAME = FakePreferenceController.class.getName();
|
||||||
@@ -76,6 +77,7 @@ public class SlicesDatabaseAccessorTest {
|
|||||||
assertThat(data.getTitle()).isEqualTo(FAKE_TITLE);
|
assertThat(data.getTitle()).isEqualTo(FAKE_TITLE);
|
||||||
assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY);
|
assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY);
|
||||||
assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
|
assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
|
||||||
|
assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS);
|
||||||
assertThat(data.getIconResource()).isEqualTo(FAKE_ICON);
|
assertThat(data.getIconResource()).isEqualTo(FAKE_ICON);
|
||||||
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
||||||
assertThat(data.getUri()).isNull();
|
assertThat(data.getUri()).isNull();
|
||||||
@@ -102,6 +104,7 @@ public class SlicesDatabaseAccessorTest {
|
|||||||
assertThat(data.getTitle()).isEqualTo(FAKE_TITLE);
|
assertThat(data.getTitle()).isEqualTo(FAKE_TITLE);
|
||||||
assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY);
|
assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY);
|
||||||
assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
|
assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
|
||||||
|
assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS);
|
||||||
assertThat(data.getIconResource()).isEqualTo(FAKE_ICON);
|
assertThat(data.getIconResource()).isEqualTo(FAKE_ICON);
|
||||||
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
||||||
assertThat(data.getUri()).isEqualTo(uri);
|
assertThat(data.getUri()).isEqualTo(uri);
|
||||||
@@ -164,13 +167,13 @@ public class SlicesDatabaseAccessorTest {
|
|||||||
values.put(SlicesDatabaseHelper.IndexColumns.TITLE, FAKE_TITLE);
|
values.put(SlicesDatabaseHelper.IndexColumns.TITLE, FAKE_TITLE);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, FAKE_SUMMARY);
|
values.put(SlicesDatabaseHelper.IndexColumns.SUMMARY, FAKE_SUMMARY);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, FAKE_SCREEN_TITLE);
|
values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, FAKE_SCREEN_TITLE);
|
||||||
|
values.put(SlicesDatabaseHelper.IndexColumns.KEYWORDS, FAKE_KEYWORDS);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, FAKE_ICON);
|
values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, FAKE_ICON);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, FAKE_FRAGMENT_NAME);
|
values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, FAKE_FRAGMENT_NAME);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, FAKE_CONTROLLER_NAME);
|
values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, FAKE_CONTROLLER_NAME);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice);
|
values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice);
|
||||||
values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT);
|
values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT);
|
||||||
|
|
||||||
|
|
||||||
mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -66,6 +66,7 @@ public class SlicesDatabaseHelperTest {
|
|||||||
IndexColumns.TITLE,
|
IndexColumns.TITLE,
|
||||||
IndexColumns.SUMMARY,
|
IndexColumns.SUMMARY,
|
||||||
IndexColumns.SCREENTITLE,
|
IndexColumns.SCREENTITLE,
|
||||||
|
IndexColumns.KEYWORDS,
|
||||||
IndexColumns.ICON_RESOURCE,
|
IndexColumns.ICON_RESOURCE,
|
||||||
IndexColumns.FRAGMENT,
|
IndexColumns.FRAGMENT,
|
||||||
IndexColumns.CONTROLLER,
|
IndexColumns.CONTROLLER,
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.slices;
|
package com.android.settings.slices;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
import static org.mockito.Mockito.doReturn;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ public class SlicesIndexerTest {
|
|||||||
private final String[] TITLES = new String[]{"title1", "title2", "title3"};
|
private final String[] TITLES = new String[]{"title1", "title2", "title3"};
|
||||||
private final String SUMMARY = "subtitle";
|
private final String SUMMARY = "subtitle";
|
||||||
private final String SCREEN_TITLE = "screen title";
|
private final String SCREEN_TITLE = "screen title";
|
||||||
|
private final String KEYWORDS = "a, b, c";
|
||||||
private final String FRAGMENT_NAME = "fragment name";
|
private final String FRAGMENT_NAME = "fragment name";
|
||||||
private final int ICON = 1234; // I declare a thumb war
|
private final int ICON = 1234; // I declare a thumb war
|
||||||
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
||||||
@@ -119,6 +121,8 @@ public class SlicesIndexerTest {
|
|||||||
FRAGMENT_NAME);
|
FRAGMENT_NAME);
|
||||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.SCREENTITLE))).isEqualTo(
|
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.SCREENTITLE))).isEqualTo(
|
||||||
SCREEN_TITLE);
|
SCREEN_TITLE);
|
||||||
|
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.KEYWORDS))).isEqualTo(
|
||||||
|
KEYWORDS);
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE))).isEqualTo(
|
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.ICON_RESOURCE))).isEqualTo(
|
||||||
ICON);
|
ICON);
|
||||||
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.CONTROLLER))).isEqualTo(
|
assertThat(cursor.getString(cursor.getColumnIndex(IndexColumns.CONTROLLER))).isEqualTo(
|
||||||
@@ -144,6 +148,7 @@ public class SlicesIndexerTest {
|
|||||||
final SliceData.Builder builder = new SliceData.Builder()
|
final SliceData.Builder builder = new SliceData.Builder()
|
||||||
.setSummary(SUMMARY)
|
.setSummary(SUMMARY)
|
||||||
.setScreenTitle(SCREEN_TITLE)
|
.setScreenTitle(SCREEN_TITLE)
|
||||||
|
.setKeywords(KEYWORDS)
|
||||||
.setFragmentName(FRAGMENT_NAME)
|
.setFragmentName(FRAGMENT_NAME)
|
||||||
.setIcon(ICON)
|
.setIcon(ICON)
|
||||||
.setUri(URI)
|
.setUri(URI)
|
||||||
|
@@ -29,6 +29,7 @@ import static com.google.common.truth.Truth.assertThat;
|
|||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.slice.Slice;
|
import androidx.slice.Slice;
|
||||||
@@ -55,6 +56,7 @@ public class SliceTester {
|
|||||||
* - No toggles
|
* - No toggles
|
||||||
* - Correct intent
|
* - Correct intent
|
||||||
* - Correct title
|
* - Correct title
|
||||||
|
* - Correct keywords
|
||||||
*/
|
*/
|
||||||
public static void testSettingsIntentSlice(Context context, Slice slice, SliceData sliceData) {
|
public static void testSettingsIntentSlice(Context context, Slice slice, SliceData sliceData) {
|
||||||
final SliceMetadata metadata = SliceMetadata.from(context, slice);
|
final SliceMetadata metadata = SliceMetadata.from(context, slice);
|
||||||
@@ -68,6 +70,8 @@ public class SliceTester {
|
|||||||
|
|
||||||
final List<SliceItem> sliceItems = slice.getItems();
|
final List<SliceItem> sliceItems = slice.getItems();
|
||||||
assertTitle(sliceItems, sliceData.getTitle());
|
assertTitle(sliceItems, sliceData.getTitle());
|
||||||
|
|
||||||
|
assertKeywords(metadata, sliceData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -76,6 +80,7 @@ public class SliceTester {
|
|||||||
* - Correct toggle intent
|
* - Correct toggle intent
|
||||||
* - Correct content intent
|
* - Correct content intent
|
||||||
* - Correct title
|
* - Correct title
|
||||||
|
* - Correct keywords
|
||||||
*/
|
*/
|
||||||
public static void testSettingsToggleSlice(Context context, Slice slice, SliceData sliceData) {
|
public static void testSettingsToggleSlice(Context context, Slice slice, SliceData sliceData) {
|
||||||
final SliceMetadata metadata = SliceMetadata.from(context, slice);
|
final SliceMetadata metadata = SliceMetadata.from(context, slice);
|
||||||
@@ -101,12 +106,15 @@ public class SliceTester {
|
|||||||
|
|
||||||
final List<SliceItem> sliceItems = slice.getItems();
|
final List<SliceItem> sliceItems = slice.getItems();
|
||||||
assertTitle(sliceItems, sliceData.getTitle());
|
assertTitle(sliceItems, sliceData.getTitle());
|
||||||
|
|
||||||
|
assertKeywords(metadata, sliceData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test the contents of an slider based slice, including:
|
* Test the contents of an slider based slice, including:
|
||||||
* - No intent
|
* - No intent
|
||||||
* - Correct title
|
* - Correct title
|
||||||
|
* - Correct keywords
|
||||||
*/
|
*/
|
||||||
public static void testSettingsSliderSlice(Context context, Slice slice, SliceData sliceData) {
|
public static void testSettingsSliderSlice(Context context, Slice slice, SliceData sliceData) {
|
||||||
final SliceMetadata metadata = SliceMetadata.from(context, slice);
|
final SliceMetadata metadata = SliceMetadata.from(context, slice);
|
||||||
@@ -121,6 +129,8 @@ public class SliceTester {
|
|||||||
|
|
||||||
final List<SliceItem> sliceItems = slice.getItems();
|
final List<SliceItem> sliceItems = slice.getItems();
|
||||||
assertTitle(sliceItems, sliceData.getTitle());
|
assertTitle(sliceItems, sliceData.getTitle());
|
||||||
|
|
||||||
|
assertKeywords(metadata, sliceData);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -128,6 +138,7 @@ public class SliceTester {
|
|||||||
* - No toggles
|
* - No toggles
|
||||||
* - Correct title
|
* - Correct title
|
||||||
* - Correct intent
|
* - Correct intent
|
||||||
|
* - Correct keywords
|
||||||
*/
|
*/
|
||||||
public static void testSettingsUnavailableSlice(Context context, Slice slice,
|
public static void testSettingsUnavailableSlice(Context context, Slice slice,
|
||||||
SliceData sliceData) {
|
SliceData sliceData) {
|
||||||
@@ -154,6 +165,8 @@ public class SliceTester {
|
|||||||
|
|
||||||
final List<SliceItem> sliceItems = slice.getItems();
|
final List<SliceItem> sliceItems = slice.getItems();
|
||||||
assertTitle(sliceItems, sliceData.getTitle());
|
assertTitle(sliceItems, sliceData.getTitle());
|
||||||
|
|
||||||
|
assertKeywords(metadata, sliceData);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assertTitle(List<SliceItem> sliceItems, String title) {
|
private static void assertTitle(List<SliceItem> sliceItems, String title) {
|
||||||
@@ -172,4 +185,10 @@ public class SliceTester {
|
|||||||
}
|
}
|
||||||
assertThat(hasTitle).isTrue();
|
assertThat(hasTitle).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void assertKeywords(SliceMetadata metadata, SliceData data) {
|
||||||
|
final List<String> keywords = metadata.getSliceKeywords();
|
||||||
|
final List<String> expectedKeywords = Arrays.asList(data.getKeywords().split(","));
|
||||||
|
assertThat(keywords).containsExactlyElementsIn(expectedKeywords);
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user