Merge "A new attribute which can show the dynamic summary"

This commit is contained in:
TreeHugger Robot
2018-09-28 02:38:12 +00:00
committed by Android (Google) Code Review
17 changed files with 210 additions and 16 deletions

View File

@@ -75,6 +75,8 @@
<attr name="controller" format="string" /> <attr name="controller" format="string" />
<!-- {@code true} when the controller declared represents a slice from {@link android.app.SettingsSliceContract} --> <!-- {@code true} when the controller declared represents a slice from {@link android.app.SettingsSliceContract} -->
<attr name="platform_slice" format="boolean" /> <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> </declare-styleable>
<!-- For DotsPageIndicator --> <!-- For DotsPageIndicator -->

View File

@@ -69,7 +69,8 @@ public class PreferenceXmlParserUtils {
MetadataFlag.FLAG_NEED_PREF_TITLE, MetadataFlag.FLAG_NEED_PREF_TITLE,
MetadataFlag.FLAG_NEED_PREF_SUMMARY, MetadataFlag.FLAG_NEED_PREF_SUMMARY,
MetadataFlag.FLAG_NEED_PREF_ICON, MetadataFlag.FLAG_NEED_PREF_ICON,
MetadataFlag.FLAG_NEED_SEARCHABLE}) MetadataFlag.FLAG_NEED_SEARCHABLE,
MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE})
@Retention(RetentionPolicy.SOURCE) @Retention(RetentionPolicy.SOURCE)
public @interface MetadataFlag { public @interface MetadataFlag {
int FLAG_INCLUDE_PREF_SCREEN = 1; int FLAG_INCLUDE_PREF_SCREEN = 1;
@@ -82,6 +83,7 @@ public class PreferenceXmlParserUtils {
int FLAG_NEED_PLATFORM_SLICE_FLAG = 1 << 7; int FLAG_NEED_PLATFORM_SLICE_FLAG = 1 << 7;
int FLAG_NEED_KEYWORDS = 1 << 8; int FLAG_NEED_KEYWORDS = 1 << 8;
int FLAG_NEED_SEARCHABLE = 1 << 9; int FLAG_NEED_SEARCHABLE = 1 << 9;
int FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE = 1 << 10;
} }
public static final String METADATA_PREF_TYPE = "type"; 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_PLATFORM_SLICE_FLAG = "platform_slice";
public static final String METADATA_KEYWORDS = "keywords"; public static final String METADATA_KEYWORDS = "keywords";
public static final String METADATA_SEARCHABLE = "searchable"; 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 = "|"; private static final String ENTRIES_SEPARATOR = "|";
@@ -228,6 +232,10 @@ public class PreferenceXmlParserUtils {
preferenceMetadata.putBoolean(METADATA_SEARCHABLE, preferenceMetadata.putBoolean(METADATA_SEARCHABLE,
isSearchable(preferenceAttributes)); 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); metadata.add(preferenceMetadata);
preferenceAttributes.recycle(); preferenceAttributes.recycle();
@@ -312,6 +320,11 @@ public class PreferenceXmlParserUtils {
return styledAttributes.getBoolean(R.styleable.Preference_searchable, true /* default */); 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) { private static String getKeywords(TypedArray styleAttributes) {
return styleAttributes.getString(R.styleable.Preference_keywords); return styleAttributes.getString(R.styleable.Preference_keywords);
} }

View File

@@ -184,12 +184,23 @@ public class SliceBuilderUtils {
*/ */
public static CharSequence getSubtitleText(Context context, public static CharSequence getSubtitleText(Context context,
AbstractPreferenceController controller, SliceData sliceData) { 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, if (isValidSummary(context, summaryText) && !TextUtils.equals(summaryText,
sliceData.getTitle())) { sliceData.getTitle())) {
return summaryText; return summaryText;
} }
// Priority 3 : Show dynamic summary from preference controller.
if (controller != null) { if (controller != null) {
summaryText = controller.getSummary(); summaryText = controller.getSummary();
@@ -198,11 +209,13 @@ public class SliceBuilderUtils {
} }
} }
// Priority 4 : Show summary from slice data.
summaryText = sliceData.getSummary(); summaryText = sliceData.getSummary();
if (isValidSummary(context, summaryText)) { if (isValidSummary(context, summaryText)) {
return summaryText; return summaryText;
} }
// Priority 5 : Show empty text.
return ""; return "";
} }
@@ -217,7 +230,7 @@ public class SliceBuilderUtils {
.build(); .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) { String screenTitle, int sourceMetricsCategory) {
final Bundle args = new Bundle(); final Bundle args = new Bundle();
args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key); args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);

View File

@@ -74,6 +74,8 @@ public class SliceData {
private final boolean mIsPlatformDefined; private final boolean mIsPlatformDefined;
private final boolean mIsDynamicSummaryAllowed;
public String getKey() { public String getKey() {
return mKey; return mKey;
} }
@@ -118,6 +120,10 @@ public class SliceData {
return mIsPlatformDefined; return mIsPlatformDefined;
} }
public boolean isDynamicSummaryAllowed() {
return mIsDynamicSummaryAllowed;
}
private SliceData(Builder builder) { private SliceData(Builder builder) {
mKey = builder.mKey; mKey = builder.mKey;
mTitle = builder.mTitle; mTitle = builder.mTitle;
@@ -130,6 +136,7 @@ public class SliceData {
mPreferenceController = builder.mPrefControllerClassName; mPreferenceController = builder.mPrefControllerClassName;
mSliceType = builder.mSliceType; mSliceType = builder.mSliceType;
mIsPlatformDefined = builder.mIsPlatformDefined; mIsPlatformDefined = builder.mIsPlatformDefined;
mIsDynamicSummaryAllowed = builder.mIsDynamicSummaryAllowed;
} }
@Override @Override
@@ -169,6 +176,8 @@ public class SliceData {
private boolean mIsPlatformDefined; private boolean mIsPlatformDefined;
private boolean mIsDynamicSummaryAllowed;
public Builder setKey(String key) { public Builder setKey(String key) {
mKey = key; mKey = key;
return this; return this;
@@ -224,6 +233,11 @@ public class SliceData {
return this; return this;
} }
public Builder setDynamicSummaryAllowed(boolean isDynamicSummaryAllowed) {
mIsDynamicSummaryAllowed = isDynamicSummaryAllowed;
return this;
}
public SliceData build() { public SliceData build() {
if (TextUtils.isEmpty(mKey)) { if (TextUtils.isEmpty(mKey)) {
throw new InvalidSliceDataException("Key cannot be empty"); throw new InvalidSliceDataException("Key cannot be empty");

View File

@@ -16,6 +16,8 @@
package com.android.settings.slices; 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_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;
@@ -186,7 +188,8 @@ 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_PLATFORM_SLICE_FLAG); | MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG
| MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE);
for (Bundle bundle : metadata) { for (Bundle bundle : metadata) {
// TODO (b/67996923) Non-controller Slices should become intent-only slices. // TODO (b/67996923) Non-controller Slices should become intent-only slices.
@@ -203,6 +206,8 @@ class SliceDataConverter {
final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName, final int sliceType = SliceBuilderUtils.getSliceType(mContext, controllerClassName,
key); key);
final boolean isPlatformSlice = bundle.getBoolean(METADATA_PLATFORM_SLICE_FLAG); 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() final SliceData xmlSlice = new SliceData.Builder()
.setKey(key) .setKey(key)
@@ -214,6 +219,7 @@ class SliceDataConverter {
.setFragmentName(fragmentName) .setFragmentName(fragmentName)
.setSliceType(sliceType) .setSliceType(sliceType)
.setPlatformDefined(isPlatformSlice) .setPlatformDefined(isPlatformSlice)
.setDynamicSummaryAllowed(isDynamicSummaryAllowed)
.build(); .build();
final BasePreferenceController controller = final BasePreferenceController controller =

View File

@@ -49,6 +49,7 @@ public class SlicesDatabaseAccessor {
IndexColumns.CONTROLLER, IndexColumns.CONTROLLER,
IndexColumns.PLATFORM_SLICE, IndexColumns.PLATFORM_SLICE,
IndexColumns.SLICE_TYPE, IndexColumns.SLICE_TYPE,
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
}; };
// Cursor value for boolean true // Cursor value for boolean true
@@ -159,6 +160,8 @@ public class SlicesDatabaseAccessor {
cursor.getColumnIndex(IndexColumns.CONTROLLER)); cursor.getColumnIndex(IndexColumns.CONTROLLER));
final boolean isPlatformDefined = cursor.getInt( final boolean isPlatformDefined = cursor.getInt(
cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE)) == TRUE; cursor.getColumnIndex(IndexColumns.PLATFORM_SLICE)) == TRUE;
final boolean isDynamicSummaryAllowed = cursor.getInt(
cursor.getColumnIndex(IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE)) == TRUE;
int sliceType = cursor.getInt( int sliceType = cursor.getInt(
cursor.getColumnIndex(IndexColumns.SLICE_TYPE)); cursor.getColumnIndex(IndexColumns.SLICE_TYPE));
@@ -178,6 +181,7 @@ public class SlicesDatabaseAccessor {
.setUri(uri) .setUri(uri)
.setPlatformDefined(isPlatformDefined) .setPlatformDefined(isPlatformDefined)
.setSliceType(sliceType) .setSliceType(sliceType)
.setDynamicSummaryAllowed(isDynamicSummaryAllowed)
.build(); .build();
} }

View File

@@ -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 = 2; private static final int DATABASE_VERSION = 3;
public interface Tables { public interface Tables {
String TABLE_SLICES_INDEX = "slices_index"; 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. * {@link SliceData.SliceType} representing the inline type of the result.
*/ */
String SLICE_TYPE = "slice_type"; 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 = private static final String CREATE_SLICES_TABLE =
@@ -117,6 +123,8 @@ public class SlicesDatabaseHelper extends SQLiteOpenHelper {
IndexColumns.PLATFORM_SLICE + IndexColumns.PLATFORM_SLICE +
", " + ", " +
IndexColumns.SLICE_TYPE + IndexColumns.SLICE_TYPE +
", " +
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE +
");"; ");";
private final Context mContext; private final Context mContext;

View File

@@ -111,6 +111,8 @@ class SlicesIndexer implements Runnable {
values.put(IndexColumns.CONTROLLER, dataRow.getPreferenceController()); values.put(IndexColumns.CONTROLLER, dataRow.getPreferenceController());
values.put(IndexColumns.PLATFORM_SLICE, dataRow.isPlatformDefined()); values.put(IndexColumns.PLATFORM_SLICE, dataRow.isPlatformDefined());
values.put(IndexColumns.SLICE_TYPE, dataRow.getSliceType()); 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 */, database.replaceOrThrow(Tables.TABLE_SLICES_INDEX, null /* nullColumnHack */,
values); values);

View File

@@ -25,13 +25,15 @@
android:title="title" android:title="title"
android:icon="@drawable/ic_android" android:icon="@drawable/ic_android"
android:summary="summary1" android:summary="summary1"
settings:controller="com.android.settings.core.BadPreferenceController"/> settings:controller="com.android.settings.core.BadPreferenceController"
settings:allowDynamicSummaryInSlice="true"/>
<Preference <Preference
android:key="key2" android:key="key2"
android:title="title" android:title="title"
android:icon="@drawable/ic_android" android:icon="@drawable/ic_android"
android:summary="summary2" android:summary="summary2"
settings:controller="com.android.settings.slices.FakePreferenceController"/> settings:controller="com.android.settings.slices.FakePreferenceController"
settings:allowDynamicSummaryInSlice="true"/>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -26,6 +26,7 @@
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:keywords="a, b, c"
settings:platform_slice="true"/> settings:platform_slice="true"
settings:allowDynamicSummaryInSlice="true"/>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -16,6 +16,8 @@
package com.android.settings.core; 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_KEY;
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEYWORDS; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEYWORDS;
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SEARCHABLE; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SEARCHABLE;
@@ -289,6 +291,30 @@ public class PreferenceXmlParserUtilsTest {
assertThat(foundKey).isTrue(); 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 * @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

View File

@@ -70,6 +70,7 @@ public class SliceBuilderUtilsTest {
private final Class TOGGLE_CONTROLLER = FakeToggleController.class; private final Class TOGGLE_CONTROLLER = FakeToggleController.class;
private final Class SLIDER_CONTROLLER = FakeSliderController.class; private final Class SLIDER_CONTROLLER = FakeSliderController.class;
private final Class CONTEXT_CONTROLLER = FakeContextOnlyPreferenceController.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 INTENT_PATH = SettingsSlicesContract.PATH_SETTING_INTENT + "/" + KEY;
private final String ACTION_PATH = SettingsSlicesContract.PATH_SETTING_ACTION + "/" + KEY; private final String ACTION_PATH = SettingsSlicesContract.PATH_SETTING_ACTION + "/" + KEY;
@@ -205,6 +206,19 @@ public class SliceBuilderUtilsTest {
assertThat(controller).isInstanceOf(FakeContextOnlyPreferenceController.class); 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 @Test
public void getDynamicSummary_returnsScreenTitle() { public void getDynamicSummary_returnsScreenTitle() {
final SliceData data = getDummyData(); final SliceData data = getDummyData();
@@ -470,25 +484,31 @@ public class SliceBuilderUtilsTest {
private SliceData getDummyData() { private SliceData getDummyData() {
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE, 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) { private SliceData getDummyData(Class prefController, int sliceType, int icon) {
return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE, return getDummyData(TOGGLE_CONTROLLER, SUMMARY, SliceData.SliceType.SWITCH, SCREEN_TITLE,
icon); icon, IS_DYNAMIC_SUMMARY_ALLOWED);
} }
private SliceData getDummyData(String summary, String screenTitle) { private SliceData getDummyData(String summary, String screenTitle) {
return getDummyData(TOGGLE_CONTROLLER, summary, SliceData.SliceType.SWITCH, screenTitle, return getDummyData(TOGGLE_CONTROLLER, summary, SliceData.SliceType.SWITCH, screenTitle,
ICON); ICON, IS_DYNAMIC_SUMMARY_ALLOWED);
} }
private SliceData getDummyData(Class prefController, int sliceType) { 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, private SliceData getDummyData(Class prefController, String summary, int sliceType,
String screenTitle, int icon) { String screenTitle, int icon, boolean isDynamicSummaryAllowed) {
return new SliceData.Builder() return new SliceData.Builder()
.setKey(KEY) .setKey(KEY)
.setTitle(TITLE) .setTitle(TITLE)
@@ -500,6 +520,7 @@ public class SliceBuilderUtilsTest {
.setUri(URI) .setUri(URI)
.setPreferenceControllerClassName(prefController.getName()) .setPreferenceControllerClassName(prefController.getName())
.setSliceType(sliceType) .setSliceType(sliceType)
.setDynamicSummaryAllowed(isDynamicSummaryAllowed)
.build(); .build();
} }
} }

View File

@@ -124,6 +124,7 @@ public class SliceDataConverterTest {
assertThat(fakeSlice.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); assertThat(fakeSlice.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME);
assertThat(fakeSlice.getSliceType()).isEqualTo(SliceData.SliceType.SLIDER); assertThat(fakeSlice.getSliceType()).isEqualTo(SliceData.SliceType.SLIDER);
assertThat(fakeSlice.isPlatformDefined()).isTrue(); // from XML assertThat(fakeSlice.isPlatformDefined()).isTrue(); // from XML
assertThat(fakeSlice.isDynamicSummaryAllowed()).isTrue(); // from XML
} }
private void assertFakeA11ySlice(SliceData fakeSlice) { private void assertFakeA11ySlice(SliceData fakeSlice) {

View File

@@ -39,6 +39,7 @@ public class SliceDataTest {
private final String PREF_CONTROLLER = "com.android.settings.slices.tester"; private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
private final int SLICE_TYPE = SliceData.SliceType.SWITCH; private final int SLICE_TYPE = SliceData.SliceType.SWITCH;
private final boolean IS_PLATFORM_DEFINED = true; private final boolean IS_PLATFORM_DEFINED = true;
private final boolean IS_DYNAMIC_SUMMARY_ALLOWED = true;
@Test @Test
public void testBuilder_buildsMatchingObject() { public void testBuilder_buildsMatchingObject() {
@@ -53,7 +54,8 @@ public class SliceDataTest {
.setUri(URI) .setUri(URI)
.setPreferenceControllerClassName(PREF_CONTROLLER) .setPreferenceControllerClassName(PREF_CONTROLLER)
.setSliceType(SLICE_TYPE) .setSliceType(SLICE_TYPE)
.setPlatformDefined(IS_PLATFORM_DEFINED); .setPlatformDefined(IS_PLATFORM_DEFINED)
.setDynamicSummaryAllowed(IS_DYNAMIC_SUMMARY_ALLOWED);
SliceData data = builder.build(); SliceData data = builder.build();
@@ -68,6 +70,7 @@ public class SliceDataTest {
assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER); assertThat(data.getPreferenceController()).isEqualTo(PREF_CONTROLLER);
assertThat(data.getSliceType()).isEqualTo(SLICE_TYPE); assertThat(data.getSliceType()).isEqualTo(SLICE_TYPE);
assertThat(data.isPlatformDefined()).isEqualTo(IS_PLATFORM_DEFINED); assertThat(data.isPlatformDefined()).isEqualTo(IS_PLATFORM_DEFINED);
assertThat(data.isDynamicSummaryAllowed()).isEqualTo(IS_DYNAMIC_SUMMARY_ALLOWED);
} }
@Test(expected = SliceData.InvalidSliceDataException.class) @Test(expected = SliceData.InvalidSliceDataException.class)
@@ -216,7 +219,7 @@ public class SliceDataTest {
} }
@Test @Test
public void testEquality_identicalObjects() { public void testBuilder_noDynamicSummaryAllowed_buildsMatchingObject() {
SliceData.Builder builder = new SliceData.Builder() SliceData.Builder builder = new SliceData.Builder()
.setKey(KEY) .setKey(KEY)
.setTitle(TITLE) .setTitle(TITLE)
@@ -227,6 +230,32 @@ public class SliceDataTest {
.setUri(URI) .setUri(URI)
.setPreferenceControllerClassName(PREF_CONTROLLER); .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 dataOne = builder.build();
SliceData dataTwo = builder.build(); SliceData dataTwo = builder.build();

View File

@@ -97,6 +97,45 @@ public class SlicesDatabaseAccessorTest {
assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME); assertThat(data.getFragmentClassName()).isEqualTo(FAKE_FRAGMENT_NAME);
assertThat(data.getUri()).isNull(); assertThat(data.getUri()).isNull();
assertThat(data.getPreferenceController()).isEqualTo(FAKE_CONTROLLER_NAME); 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) @Test(expected = IllegalStateException.class)
@@ -198,6 +237,11 @@ public class SlicesDatabaseAccessorTest {
} }
private void insertSpecialCase(String key, boolean isPlatformSlice) { 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(); ContentValues values = new ContentValues();
values.put(SlicesDatabaseHelper.IndexColumns.KEY, key); values.put(SlicesDatabaseHelper.IndexColumns.KEY, key);
values.put(SlicesDatabaseHelper.IndexColumns.TITLE, FAKE_TITLE); 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.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.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
isDynamicSummaryAllowed);
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);

View File

@@ -73,6 +73,7 @@ public class SlicesDatabaseHelperTest {
IndexColumns.CONTROLLER, IndexColumns.CONTROLLER,
IndexColumns.PLATFORM_SLICE, IndexColumns.PLATFORM_SLICE,
IndexColumns.SLICE_TYPE, IndexColumns.SLICE_TYPE,
IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE,
}; };
assertThat(columnNames).isEqualTo(expectedNames); assertThat(columnNames).isEqualTo(expectedNames);

View File

@@ -53,6 +53,7 @@ public class SlicesIndexerTest {
private final Uri URI = Uri.parse("content://com.android.settings.slices/test"); private final Uri URI = Uri.parse("content://com.android.settings.slices/test");
private final String PREF_CONTROLLER = "com.android.settings.slices.tester"; private final String PREF_CONTROLLER = "com.android.settings.slices.tester";
private final boolean PLATFORM_DEFINED = true; private final boolean PLATFORM_DEFINED = true;
private final boolean IS_DYNAMIC_SUMMARY_ALLOWED = true;
private final int SLICE_TYPE = SliceData.SliceType.SLIDER; private final int SLICE_TYPE = SliceData.SliceType.SLIDER;
private Context mContext; private Context mContext;
@@ -131,6 +132,9 @@ public class SlicesIndexerTest {
1 /* true */); 1 /* true */);
assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE))).isEqualTo( assertThat(cursor.getInt(cursor.getColumnIndex(IndexColumns.SLICE_TYPE))).isEqualTo(
SLICE_TYPE); SLICE_TYPE);
assertThat(cursor.getInt(
cursor.getColumnIndex(IndexColumns.ALLOW_DYNAMIC_SUMMARY_IN_SLICE))).isEqualTo(
1 /* true */);
cursor.moveToNext(); cursor.moveToNext();
} }
} }
@@ -154,7 +158,8 @@ public class SlicesIndexerTest {
.setUri(URI) .setUri(URI)
.setPreferenceControllerClassName(PREF_CONTROLLER) .setPreferenceControllerClassName(PREF_CONTROLLER)
.setPlatformDefined(PLATFORM_DEFINED) .setPlatformDefined(PLATFORM_DEFINED)
.setSliceType(SLICE_TYPE); .setSliceType(SLICE_TYPE)
.setDynamicSummaryAllowed(IS_DYNAMIC_SUMMARY_ALLOWED);
for (int i = 0; i < KEYS.length; i++) { for (int i = 0; i < KEYS.length; i++) {
builder.setKey(KEYS[i]).setTitle(TITLES[i]); builder.setKey(KEYS[i]).setTitle(TITLES[i]);