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]);