From 8eb46b717e8a48b14a88f9690597c5b250f15ee2 Mon Sep 17 00:00:00 2001 From: tmfang Date: Tue, 25 Sep 2018 16:34:40 +0800 Subject: [PATCH] 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 --- res/values/attrs.xml | 2 + .../core/PreferenceXmlParserUtils.java | 15 +++++- .../settings/slices/SliceBuilderUtils.java | 17 ++++++- .../android/settings/slices/SliceData.java | 14 ++++++ .../settings/slices/SliceDataConverter.java | 8 +++- .../slices/SlicesDatabaseAccessor.java | 4 ++ .../settings/slices/SlicesDatabaseHelper.java | 10 +++- .../settings/slices/SlicesIndexer.java | 2 + .../res/xml-mcc998/location_settings.xml | 6 ++- .../res/xml-mcc999/location_settings.xml | 3 +- .../core/PreferenceXmlParserUtilsTest.java | 26 +++++++++++ .../slices/SliceBuilderUtilsTest.java | 31 +++++++++++-- .../slices/SliceDataConverterTest.java | 1 + .../settings/slices/SliceDataTest.java | 33 ++++++++++++- .../slices/SlicesDatabaseAccessorTest.java | 46 +++++++++++++++++++ .../slices/SlicesDatabaseHelperTest.java | 1 + .../settings/slices/SlicesIndexerTest.java | 7 ++- 17 files changed, 210 insertions(+), 16 deletions(-) diff --git a/res/values/attrs.xml b/res/values/attrs.xml index e72912657ec..42473262b2f 100644 --- a/res/values/attrs.xml +++ b/res/values/attrs.xml @@ -75,6 +75,8 @@ + + diff --git a/src/com/android/settings/core/PreferenceXmlParserUtils.java b/src/com/android/settings/core/PreferenceXmlParserUtils.java index 8ef7f8dc460..9fdeeefbe5a 100644 --- a/src/com/android/settings/core/PreferenceXmlParserUtils.java +++ b/src/com/android/settings/core/PreferenceXmlParserUtils.java @@ -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); } diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java index 0306fc937f4..a947fb2d25e 100644 --- a/src/com/android/settings/slices/SliceBuilderUtils.java +++ b/src/com/android/settings/slices/SliceBuilderUtils.java @@ -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); diff --git a/src/com/android/settings/slices/SliceData.java b/src/com/android/settings/slices/SliceData.java index 72729a842f7..87058847f3c 100644 --- a/src/com/android/settings/slices/SliceData.java +++ b/src/com/android/settings/slices/SliceData.java @@ -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"); diff --git a/src/com/android/settings/slices/SliceDataConverter.java b/src/com/android/settings/slices/SliceDataConverter.java index 7c233a6a6ba..29e3d6b453e 100644 --- a/src/com/android/settings/slices/SliceDataConverter.java +++ b/src/com/android/settings/slices/SliceDataConverter.java @@ -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 = diff --git a/src/com/android/settings/slices/SlicesDatabaseAccessor.java b/src/com/android/settings/slices/SlicesDatabaseAccessor.java index 79d3bc6f007..35a0a5d14ac 100644 --- a/src/com/android/settings/slices/SlicesDatabaseAccessor.java +++ b/src/com/android/settings/slices/SlicesDatabaseAccessor.java @@ -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(); } diff --git a/src/com/android/settings/slices/SlicesDatabaseHelper.java b/src/com/android/settings/slices/SlicesDatabaseHelper.java index f1628e766ce..e4630992657 100644 --- a/src/com/android/settings/slices/SlicesDatabaseHelper.java +++ b/src/com/android/settings/slices/SlicesDatabaseHelper.java @@ -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; diff --git a/src/com/android/settings/slices/SlicesIndexer.java b/src/com/android/settings/slices/SlicesIndexer.java index f88af8fe8f4..0ccd223e593 100644 --- a/src/com/android/settings/slices/SlicesIndexer.java +++ b/src/com/android/settings/slices/SlicesIndexer.java @@ -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); diff --git a/tests/robotests/res/xml-mcc998/location_settings.xml b/tests/robotests/res/xml-mcc998/location_settings.xml index f61ca63d68a..16f0d82e1d4 100644 --- a/tests/robotests/res/xml-mcc998/location_settings.xml +++ b/tests/robotests/res/xml-mcc998/location_settings.xml @@ -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"/> + settings:controller="com.android.settings.slices.FakePreferenceController" + settings:allowDynamicSummaryInSlice="true"/> \ No newline at end of file diff --git a/tests/robotests/res/xml-mcc999/location_settings.xml b/tests/robotests/res/xml-mcc999/location_settings.xml index da71a1e18c7..91e4c4130bd 100644 --- a/tests/robotests/res/xml-mcc999/location_settings.xml +++ b/tests/robotests/res/xml-mcc999/location_settings.xml @@ -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"/> \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java index 06d75dae473..3b1b5afc3ab 100644 --- a/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java +++ b/tests/robotests/src/com/android/settings/core/PreferenceXmlParserUtilsTest.java @@ -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 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 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 diff --git a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java index 705c0eb3dd5..16e9cb737a5 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBuilderUtilsTest.java @@ -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(); } } diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java index a7df5a74028..83c35bac58c 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceDataConverterTest.java @@ -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) { diff --git a/tests/robotests/src/com/android/settings/slices/SliceDataTest.java b/tests/robotests/src/com/android/settings/slices/SliceDataTest.java index 0d919683879..9adee0765a3 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceDataTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceDataTest.java @@ -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(); diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java index bea5e8933a3..949d1513ffa 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseAccessorTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java index 602a7fd8217..a00d343f8fb 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesDatabaseHelperTest.java @@ -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); diff --git a/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java b/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java index b823105dd02..c92ee915316 100644 --- a/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java +++ b/tests/robotests/src/com/android/settings/slices/SlicesIndexerTest.java @@ -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]);