A new attribute which can show the dynamic summary
For now, slice view shows screen title by default, but it isn't approprate for some simple cases. ie, device model, phone number, android version etc. So, We create a new attribue which let BasePreferenceController be more flxible. User can choose what they want to show in summary text. Fixes: 74900516 Test: make RunSettingsRoboTests Change-Id: I2788c6edfaf8e656170a507607f22513841a3e0a
This commit is contained in:
@@ -75,6 +75,8 @@
|
||||
<attr name="controller" format="string" />
|
||||
<!-- {@code true} when the controller declared represents a slice from {@link android.app.SettingsSliceContract} -->
|
||||
<attr name="platform_slice" format="boolean" />
|
||||
<!-- Whether or not dynamic summary text from PreferenceController is allowed when creating slice object, by default it's false. -->
|
||||
<attr name="allowDynamicSummaryInSlice" format="boolean" />
|
||||
</declare-styleable>
|
||||
|
||||
<!-- For DotsPageIndicator -->
|
||||
|
@@ -69,7 +69,8 @@ public class PreferenceXmlParserUtils {
|
||||
MetadataFlag.FLAG_NEED_PREF_TITLE,
|
||||
MetadataFlag.FLAG_NEED_PREF_SUMMARY,
|
||||
MetadataFlag.FLAG_NEED_PREF_ICON,
|
||||
MetadataFlag.FLAG_NEED_SEARCHABLE})
|
||||
MetadataFlag.FLAG_NEED_SEARCHABLE,
|
||||
MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface MetadataFlag {
|
||||
int FLAG_INCLUDE_PREF_SCREEN = 1;
|
||||
@@ -82,6 +83,7 @@ public class PreferenceXmlParserUtils {
|
||||
int FLAG_NEED_PLATFORM_SLICE_FLAG = 1 << 7;
|
||||
int FLAG_NEED_KEYWORDS = 1 << 8;
|
||||
int FLAG_NEED_SEARCHABLE = 1 << 9;
|
||||
int FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE = 1 << 10;
|
||||
}
|
||||
|
||||
public static final String METADATA_PREF_TYPE = "type";
|
||||
@@ -93,6 +95,8 @@ public class PreferenceXmlParserUtils {
|
||||
public static final String METADATA_PLATFORM_SLICE_FLAG = "platform_slice";
|
||||
public static final String METADATA_KEYWORDS = "keywords";
|
||||
public static final String METADATA_SEARCHABLE = "searchable";
|
||||
public static final String METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE =
|
||||
"allow_dynamic_summary_in_slice";
|
||||
|
||||
private static final String ENTRIES_SEPARATOR = "|";
|
||||
|
||||
@@ -228,6 +232,10 @@ public class PreferenceXmlParserUtils {
|
||||
preferenceMetadata.putBoolean(METADATA_SEARCHABLE,
|
||||
isSearchable(preferenceAttributes));
|
||||
}
|
||||
if (hasFlag(flags, MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE)) {
|
||||
preferenceMetadata.putBoolean(METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
|
||||
isDynamicSummaryAllowed(preferenceAttributes));
|
||||
}
|
||||
metadata.add(preferenceMetadata);
|
||||
|
||||
preferenceAttributes.recycle();
|
||||
@@ -312,6 +320,11 @@ public class PreferenceXmlParserUtils {
|
||||
return styledAttributes.getBoolean(R.styleable.Preference_searchable, true /* default */);
|
||||
}
|
||||
|
||||
private static boolean isDynamicSummaryAllowed(TypedArray styledAttributes) {
|
||||
return styledAttributes.getBoolean(R.styleable.Preference_allowDynamicSummaryInSlice,
|
||||
false /* default */);
|
||||
}
|
||||
|
||||
private static String getKeywords(TypedArray styleAttributes) {
|
||||
return styleAttributes.getString(R.styleable.Preference_keywords);
|
||||
}
|
||||
|
@@ -184,12 +184,23 @@ public class SliceBuilderUtils {
|
||||
*/
|
||||
public static CharSequence getSubtitleText(Context context,
|
||||
AbstractPreferenceController controller, SliceData sliceData) {
|
||||
CharSequence summaryText = sliceData.getScreenTitle();
|
||||
final boolean isDynamicSummaryAllowed = sliceData.isDynamicSummaryAllowed();
|
||||
CharSequence summaryText = controller.getSummary();
|
||||
|
||||
// Priority 1 : User prefers showing the dynamic summary in slice view rather than static
|
||||
// summary.
|
||||
if (isDynamicSummaryAllowed && isValidSummary(context, summaryText)) {
|
||||
return summaryText;
|
||||
}
|
||||
|
||||
// Priority 2 : Show screen title.
|
||||
summaryText = sliceData.getScreenTitle();
|
||||
if (isValidSummary(context, summaryText) && !TextUtils.equals(summaryText,
|
||||
sliceData.getTitle())) {
|
||||
return summaryText;
|
||||
}
|
||||
|
||||
// Priority 3 : Show dynamic summary from preference controller.
|
||||
if (controller != null) {
|
||||
summaryText = controller.getSummary();
|
||||
|
||||
@@ -198,11 +209,13 @@ public class SliceBuilderUtils {
|
||||
}
|
||||
}
|
||||
|
||||
// Priority 4 : Show summary from slice data.
|
||||
summaryText = sliceData.getSummary();
|
||||
if (isValidSummary(context, summaryText)) {
|
||||
return summaryText;
|
||||
}
|
||||
|
||||
// Priority 5 : Show empty text.
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -217,7 +230,7 @@ public class SliceBuilderUtils {
|
||||
.build();
|
||||
}
|
||||
|
||||
public static Intent buildSearchResultPageIntent(Context context, String className, String key,
|
||||
public static Intent buildSearchResultPageIntent(Context context, String className, String key,
|
||||
String screenTitle, int sourceMetricsCategory) {
|
||||
final Bundle args = new Bundle();
|
||||
args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
|
||||
|
@@ -74,6 +74,8 @@ public class SliceData {
|
||||
|
||||
private final boolean mIsPlatformDefined;
|
||||
|
||||
private final boolean mIsDynamicSummaryAllowed;
|
||||
|
||||
public String getKey() {
|
||||
return mKey;
|
||||
}
|
||||
@@ -118,6 +120,10 @@ public class SliceData {
|
||||
return mIsPlatformDefined;
|
||||
}
|
||||
|
||||
public boolean isDynamicSummaryAllowed() {
|
||||
return mIsDynamicSummaryAllowed;
|
||||
}
|
||||
|
||||
private SliceData(Builder builder) {
|
||||
mKey = builder.mKey;
|
||||
mTitle = builder.mTitle;
|
||||
@@ -130,6 +136,7 @@ public class SliceData {
|
||||
mPreferenceController = builder.mPrefControllerClassName;
|
||||
mSliceType = builder.mSliceType;
|
||||
mIsPlatformDefined = builder.mIsPlatformDefined;
|
||||
mIsDynamicSummaryAllowed = builder.mIsDynamicSummaryAllowed;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -169,6 +176,8 @@ public class SliceData {
|
||||
|
||||
private boolean mIsPlatformDefined;
|
||||
|
||||
private boolean mIsDynamicSummaryAllowed;
|
||||
|
||||
public Builder setKey(String key) {
|
||||
mKey = key;
|
||||
return this;
|
||||
@@ -224,6 +233,11 @@ public class SliceData {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDynamicSummaryAllowed(boolean isDynamicSummaryAllowed) {
|
||||
mIsDynamicSummaryAllowed = isDynamicSummaryAllowed;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SliceData build() {
|
||||
if (TextUtils.isEmpty(mKey)) {
|
||||
throw new InvalidSliceDataException("Key cannot be empty");
|
||||
|
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.slices;
|
||||
|
||||
import static com.android.settings.core.PreferenceXmlParserUtils
|
||||
.METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE;
|
||||
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_KEY;
|
||||
@@ -186,7 +188,8 @@ class SliceDataConverter {
|
||||
| MetadataFlag.FLAG_NEED_PREF_TITLE
|
||||
| MetadataFlag.FLAG_NEED_PREF_ICON
|
||||
| MetadataFlag.FLAG_NEED_PREF_SUMMARY
|
||||
| MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG);
|
||||
| MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG
|
||||
| MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE);
|
||||
|
||||
for (Bundle bundle : metadata) {
|
||||
// TODO (b/67996923) Non-controller Slices should become intent-only slices.
|
||||
@@ -203,6 +206,8 @@ class SliceDataConverter {
|
||||
final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName,
|
||||
key);
|
||||
final boolean isPlatformSlice = bundle.getBoolean(METADATA_PLATFORM_SLICE_FLAG);
|
||||
final boolean isDynamicSummaryAllowed = bundle.getBoolean(
|
||||
METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE);
|
||||
|
||||
final SliceData xmlSlice = new SliceData.Builder()
|
||||
.setKey(key)
|
||||
@@ -214,6 +219,7 @@ class SliceDataConverter {
|
||||
.setFragmentName(fragmentName)
|
||||
.setSliceType(sliceType)
|
||||
.setPlatformDefined(isPlatformSlice)
|
||||
.setDynamicSummaryAllowed(isDynamicSummaryAllowed)
|
||||
.build();
|
||||
|
||||
final BasePreferenceController controller =
|
||||
|
@@ -49,6 +49,7 @@ public class SlicesDatabaseAccessor {
|
||||
IndexColumns.CONTROLLER,
|
||||
IndexColumns.PLATFORM_SLICE,
|
||||
IndexColumns.SLICE_TYPE,
|
||||
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
|
||||
};
|
||||
|
||||
// Cursor value for boolean true
|
||||
@@ -159,6 +160,8 @@ public class SlicesDatabaseAccessor {
|
||||
cursor.getColumnIndex(IndexColumns.CONTROLLER));
|
||||
final boolean isPlatformDefined = cursor.getInt(
|
||||
cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE)) == TRUE;
|
||||
final boolean isDynamicSummaryAllowed = cursor.getInt(
|
||||
cursor.getColumnIndex(IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE)) == TRUE;
|
||||
int sliceType = cursor.getInt(
|
||||
cursor.getColumnIndex(IndexColumns.SLICE_TYPE));
|
||||
|
||||
@@ -178,6 +181,7 @@ public class SlicesDatabaseAccessor {
|
||||
.setUri(uri)
|
||||
.setPlatformDefined(isPlatformDefined)
|
||||
.setSliceType(sliceType)
|
||||
.setDynamicSummaryAllowed(isDynamicSummaryAllowed)
|
||||
.build();
|
||||
}
|
||||
|
||||
|
@@ -36,7 +36,7 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
||||
private static final String DATABASE_NAME = "slices_index.db";
|
||||
private static final String SHARED_PREFS_TAG = "slices_shared_prefs";
|
||||
|
||||
private static final int DATABASE_VERSION = 2;
|
||||
private static final int DATABASE_VERSION = 3;
|
||||
|
||||
public interface Tables {
|
||||
String TABLE_SLICES_INDEX = "slices_index";
|
||||
@@ -93,6 +93,12 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
||||
* {@link SliceData.SliceType} representing the inline type of the result.
|
||||
*/
|
||||
String SLICE_TYPE = "slice_type";
|
||||
|
||||
/**
|
||||
* Boolean flag, {@code true} when the slice object prefers using the dynamic summary from
|
||||
* preference controller.
|
||||
*/
|
||||
String ALLOW_DYNAMIC_SUMMARY_IN_SLICE = "allow_dynamic_summary_in_slice";
|
||||
}
|
||||
|
||||
private static final String CREATE_SLICES_TABLE =
|
||||
@@ -117,6 +123,8 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
|
||||
IndexColumns.PLATFORM_SLICE +
|
||||
", " +
|
||||
IndexColumns.SLICE_TYPE +
|
||||
", " +
|
||||
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE +
|
||||
");";
|
||||
|
||||
private final Context mContext;
|
||||
|
@@ -111,6 +111,8 @@ class SlicesIndexer implements Runnable {
|
||||
values.put(IndexColumns.CONTROLLER, dataRow.getPreferenceController());
|
||||
values.put(IndexColumns.PLATFORM_SLICE, dataRow.isPlatformDefined());
|
||||
values.put(IndexColumns.SLICE_TYPE, dataRow.getSliceType());
|
||||
values.put(IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
|
||||
dataRow.isDynamicSummaryAllowed());
|
||||
|
||||
database.replaceOrThrow(Tables.TABLE_SLICES_INDEX, null /* nullColumnHack */,
|
||||
values);
|
||||
|
@@ -25,13 +25,15 @@
|
||||
android:title="title"
|
||||
android:icon="@drawable/ic_android"
|
||||
android:summary="summary1"
|
||||
settings:controller="com.android.settings.core.BadPreferenceController"/>
|
||||
settings:controller="com.android.settings.core.BadPreferenceController"
|
||||
settings:allowDynamicSummaryInSlice="true"/>
|
||||
|
||||
<Preference
|
||||
android:key="key2"
|
||||
android:title="title"
|
||||
android:icon="@drawable/ic_android"
|
||||
android:summary="summary2"
|
||||
settings:controller="com.android.settings.slices.FakePreferenceController"/>
|
||||
settings:controller="com.android.settings.slices.FakePreferenceController"
|
||||
settings:allowDynamicSummaryInSlice="true"/>
|
||||
|
||||
</PreferenceScreen>
|
@@ -26,6 +26,7 @@
|
||||
android:summary="summary"
|
||||
settings:controller="com.android.settings.slices.FakePreferenceController"
|
||||
settings:keywords="a, b, c"
|
||||
settings:platform_slice="true"/>
|
||||
settings:platform_slice="true"
|
||||
settings:allowDynamicSummaryInSlice="true"/>
|
||||
|
||||
</PreferenceScreen>
|
@@ -16,6 +16,8 @@
|
||||
|
||||
package com.android.settings.core;
|
||||
|
||||
import static com.android.settings.core.PreferenceXmlParserUtils
|
||||
.METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE;
|
||||
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_SEARCHABLE;
|
||||
@@ -289,6 +291,30 @@ public class PreferenceXmlParserUtilsTest {
|
||||
assertThat(foundKey).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc999")
|
||||
public void extractMetadata_requestIsDynamicSummaryAllowed_shouldDefaultToFalse()
|
||||
throws Exception {
|
||||
final List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
|
||||
R.xml.display_settings, MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE);
|
||||
|
||||
for (Bundle bundle : metadata) {
|
||||
assertThat(bundle.getBoolean(METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE)).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "mcc998")
|
||||
public void extractMetadata_requestIsDynamicSummaryAllowed_shouldReturnAttributeValue()
|
||||
throws Exception {
|
||||
final List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
|
||||
R.xml.location_settings, MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE);
|
||||
|
||||
for (Bundle bundle : metadata) {
|
||||
assertThat(bundle.getBoolean(METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE)).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resId the ID for the XML preference
|
||||
* @return an XML resource parser that points to the start tag
|
||||
|
@@ -70,6 +70,7 @@ public class SliceBuilderUtilsTest {
|
||||
private final Class TOGGLE_CONTROLLER = FakeToggleController.class;
|
||||
private final Class SLIDER_CONTROLLER = FakeSliderController.class;
|
||||
private final Class CONTEXT_CONTROLLER = FakeContextOnlyPreferenceController.class;
|
||||
private final boolean IS_DYNAMIC_SUMMARY_ALLOWED = false;
|
||||
|
||||
private final String INTENT_PATH = SettingsSlicesContract.PATH_SETTING_INTENT + "/" + KEY;
|
||||
private final String ACTION_PATH = SettingsSlicesContract.PATH_SETTING_ACTION + "/" + KEY;
|
||||
@@ -205,6 +206,19 @@ public class SliceBuilderUtilsTest {
|
||||
assertThat(controller).isInstanceOf(FakeContextOnlyPreferenceController.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDynamicSummary_allowDynamicSummary_returnsControllerSummary() {
|
||||
final SliceData data = getDummyData(true /*isDynamicSummaryAllowed*/);
|
||||
final FakePreferenceController controller = spy(
|
||||
new FakePreferenceController(mContext, KEY));
|
||||
final String controllerSummary = "new_Summary";
|
||||
doReturn(controllerSummary).when(controller).getSummary();
|
||||
|
||||
final CharSequence summary = SliceBuilderUtils.getSubtitleText(mContext, controller, data);
|
||||
|
||||
assertThat(summary).isEqualTo(controllerSummary);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDynamicSummary_returnsScreenTitle() {
|
||||
final SliceData data = getDummyData();
|
||||
@@ -470,25 +484,31 @@ public class SliceBuilderUtilsTest {
|
||||
|
||||
private SliceData getDummyData() {
|
||||
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE,
|
||||
ICON);
|
||||
ICON, IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
}
|
||||
|
||||
private SliceData getDummyData(boolean isDynamicSummaryAllowed) {
|
||||
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE,
|
||||
ICON, isDynamicSummaryAllowed);
|
||||
}
|
||||
|
||||
private SliceData getDummyData(Class prefController, int sliceType, int icon) {
|
||||
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE,
|
||||
icon);
|
||||
icon, IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
}
|
||||
|
||||
private SliceData getDummyData(String summary, String screenTitle) {
|
||||
return getDummyData(TOGGLE_CONTROLLER, summary, SliceData.SliceType.SWITCH, screenTitle,
|
||||
ICON);
|
||||
ICON, IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
}
|
||||
|
||||
private SliceData getDummyData(Class prefController, int sliceType) {
|
||||
return getDummyData(prefController, SUMMARY, sliceType, SCREEN_TITLE, ICON);
|
||||
return getDummyData(prefController, SUMMARY, sliceType, SCREEN_TITLE, ICON,
|
||||
IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
}
|
||||
|
||||
private SliceData getDummyData(Class prefController, String summary, int sliceType,
|
||||
String screenTitle, int icon) {
|
||||
String screenTitle, int icon, boolean isDynamicSummaryAllowed) {
|
||||
return new SliceData.Builder()
|
||||
.setKey(KEY)
|
||||
.setTitle(TITLE)
|
||||
@@ -500,6 +520,7 @@ public class SliceBuilderUtilsTest {
|
||||
.setUri(URI)
|
||||
.setPreferenceControllerClassName(prefController.getName())
|
||||
.setSliceType(sliceType)
|
||||
.setDynamicSummaryAllowed(isDynamicSummaryAllowed)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
@@ -124,6 +124,7 @@ public class SliceDataConverterTest {
|
||||
assertThat(fakeSlice.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME);
|
||||
assertThat(fakeSlice.getSliceType()).isEqualTo(SliceData.SliceType.SLIDER);
|
||||
assertThat(fakeSlice.isPlatformDefined()).isTrue(); // from XML
|
||||
assertThat(fakeSlice.isDynamicSummaryAllowed()).isTrue(); // from XML
|
||||
}
|
||||
|
||||
private void assertFakeA11ySlice(SliceData fakeSlice) {
|
||||
|
@@ -39,6 +39,7 @@ public class SliceDataTest {
|
||||
private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
|
||||
private final int SLICE_TYPE = SliceData.SliceType.SWITCH;
|
||||
private final boolean IS_PLATFORM_DEFINED = true;
|
||||
private final boolean IS_DYNAMIC_SUMMARY_ALLOWED = true;
|
||||
|
||||
@Test
|
||||
public void testBuilder_buildsMatchingObject() {
|
||||
@@ -53,7 +54,8 @@ public class SliceDataTest {
|
||||
.setUri(URI)
|
||||
.setPreferenceControllerClassName(PREF_CONTROLLER)
|
||||
.setSliceType(SLICE_TYPE)
|
||||
.setPlatformDefined(IS_PLATFORM_DEFINED);
|
||||
.setPlatformDefined(IS_PLATFORM_DEFINED)
|
||||
.setDynamicSummaryAllowed(IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
|
||||
SliceData data = builder.build();
|
||||
|
||||
@@ -68,6 +70,7 @@ public class SliceDataTest {
|
||||
assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER);
|
||||
assertThat(data.getSliceType()).isEqualTo(SLICE_TYPE);
|
||||
assertThat(data.isPlatformDefined()).isEqualTo(IS_PLATFORM_DEFINED);
|
||||
assertThat(data.isDynamicSummaryAllowed()).isEqualTo(IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
}
|
||||
|
||||
@Test(expected = SliceData.InvalidSliceDataException.class)
|
||||
@@ -216,7 +219,7 @@ public class SliceDataTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEquality_identicalObjects() {
|
||||
public void testBuilder_noDynamicSummaryAllowed_buildsMatchingObject() {
|
||||
SliceData.Builder builder = new SliceData.Builder()
|
||||
.setKey(KEY)
|
||||
.setTitle(TITLE)
|
||||
@@ -227,6 +230,32 @@ public class SliceDataTest {
|
||||
.setUri(URI)
|
||||
.setPreferenceControllerClassName(PREF_CONTROLLER);
|
||||
|
||||
SliceData data = builder.build();
|
||||
|
||||
assertThat(data.getKey()).isEqualTo(KEY);
|
||||
assertThat(data.getTitle()).isEqualTo(TITLE);
|
||||
assertThat(data.getSummary()).isEqualTo(SUMMARY);
|
||||
assertThat(data.getScreenTitle()).isEqualTo(SCREEN_TITLE);
|
||||
assertThat(data.getIconResource()).isEqualTo(ICON);
|
||||
assertThat(data.getFragmentClassName()).isEqualTo(FRAGMENT_NAME);
|
||||
assertThat(data.getUri()).isEqualTo(URI);
|
||||
assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER);
|
||||
assertThat(data.isDynamicSummaryAllowed()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEquality_identicalObjects() {
|
||||
SliceData.Builder builder = new SliceData.Builder()
|
||||
.setKey(KEY)
|
||||
.setTitle(TITLE)
|
||||
.setSummary(SUMMARY)
|
||||
.setScreenTitle(SCREEN_TITLE)
|
||||
.setIcon(ICON)
|
||||
.setFragmentName(FRAGMENT_NAME)
|
||||
.setUri(URI)
|
||||
.setPreferenceControllerClassName(PREF_CONTROLLER)
|
||||
.setDynamicSummaryAllowed(IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
|
||||
SliceData dataOne = builder.build();
|
||||
SliceData dataTwo = builder.build();
|
||||
|
||||
|
@@ -97,6 +97,45 @@ public class SlicesDatabaseAccessorTest {
|
||||
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
||||
assertThat(data.getUri()).isNull();
|
||||
assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME);
|
||||
assertThat(data.isDynamicSummaryAllowed()).isFalse(); /* default value */
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSliceDataFromKey_allowDynamicSummary_validSliceReturned() {
|
||||
String key = "key";
|
||||
insertSpecialCase(key, true /* isPlatformSlice */, true /* isDynamicSummaryAllowed */);
|
||||
|
||||
SliceData data = mAccessor.getSliceDataFromKey(key);
|
||||
|
||||
assertThat(data.getKey()).isEqualTo(key);
|
||||
assertThat(data.getTitle()).isEqualTo(FAKE_TITLE);
|
||||
assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY);
|
||||
assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
|
||||
assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS);
|
||||
assertThat(data.getIconResource()).isEqualTo(FAKE_ICON);
|
||||
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
||||
assertThat(data.getUri()).isNull();
|
||||
assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME);
|
||||
assertThat(data.isDynamicSummaryAllowed()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSliceDataFromKey_doNotAllowDynamicSummary_validSliceReturned() {
|
||||
String key = "key";
|
||||
insertSpecialCase(key, true /* isPlatformSlice */, false /* isDynamicSummaryAllowed */);
|
||||
|
||||
SliceData data = mAccessor.getSliceDataFromKey(key);
|
||||
|
||||
assertThat(data.getKey()).isEqualTo(key);
|
||||
assertThat(data.getTitle()).isEqualTo(FAKE_TITLE);
|
||||
assertThat(data.getSummary()).isEqualTo(FAKE_SUMMARY);
|
||||
assertThat(data.getScreenTitle()).isEqualTo(FAKE_SCREEN_TITLE);
|
||||
assertThat(data.getKeywords()).isEqualTo(FAKE_KEYWORDS);
|
||||
assertThat(data.getIconResource()).isEqualTo(FAKE_ICON);
|
||||
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
|
||||
assertThat(data.getUri()).isNull();
|
||||
assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME);
|
||||
assertThat(data.isDynamicSummaryAllowed()).isFalse();
|
||||
}
|
||||
|
||||
@Test(expected = IllegalStateException.class)
|
||||
@@ -198,6 +237,11 @@ public class SlicesDatabaseAccessorTest {
|
||||
}
|
||||
|
||||
private void insertSpecialCase(String key, boolean isPlatformSlice) {
|
||||
insertSpecialCase(key, isPlatformSlice, false /* isDynamicSummaryAllowed */);
|
||||
}
|
||||
|
||||
private void insertSpecialCase(String key, boolean isPlatformSlice,
|
||||
boolean isDynamicSummaryAllowed) {
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.KEY, key);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.TITLE, FAKE_TITLE);
|
||||
@@ -208,6 +252,8 @@ public class SlicesDatabaseAccessorTest {
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, FAKE_FRAGMENT_NAME);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, FAKE_CONTROLLER_NAME);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
|
||||
isDynamicSummaryAllowed);
|
||||
values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT);
|
||||
|
||||
mDb.replaceOrThrow(SlicesDatabaseHelper.Tables.TABLE_SLICES_INDEX, null, values);
|
||||
|
@@ -73,6 +73,7 @@ public class SlicesDatabaseHelperTest {
|
||||
IndexColumns.CONTROLLER,
|
||||
IndexColumns.PLATFORM_SLICE,
|
||||
IndexColumns.SLICE_TYPE,
|
||||
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
|
||||
};
|
||||
|
||||
assertThat(columnNames).isEqualTo(expectedNames);
|
||||
|
@@ -53,6 +53,7 @@ public class SlicesIndexerTest {
|
||||
private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
|
||||
private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
|
||||
private final boolean PLATFORM_DEFINED = true;
|
||||
private final boolean IS_DYNAMIC_SUMMARY_ALLOWED = true;
|
||||
private final int SLICE_TYPE = SliceData.SliceType.SLIDER;
|
||||
|
||||
private Context mContext;
|
||||
@@ -131,6 +132,9 @@ public class SlicesIndexerTest {
|
||||
1 /* true */);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE))).isEqualTo(
|
||||
SLICE_TYPE);
|
||||
assertThat(cursor.getInt(
|
||||
cursor.getColumnIndex(IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE))).isEqualTo(
|
||||
1 /* true */);
|
||||
cursor.moveToNext();
|
||||
}
|
||||
}
|
||||
@@ -154,7 +158,8 @@ public class SlicesIndexerTest {
|
||||
.setUri(URI)
|
||||
.setPreferenceControllerClassName(PREF_CONTROLLER)
|
||||
.setPlatformDefined(PLATFORM_DEFINED)
|
||||
.setSliceType(SLICE_TYPE);
|
||||
.setSliceType(SLICE_TYPE)
|
||||
.setDynamicSummaryAllowed(IS_DYNAMIC_SUMMARY_ALLOWED);
|
||||
|
||||
for (int i = 0; i < KEYS.length; i++) {
|
||||
builder.setKey(KEYS[i]).setTitle(TITLES[i]);
|
||||
|
Reference in New Issue
Block a user