Loading res/values/attrs.xml +2 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,8 @@ <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" /> <!-- customized subtitle if it's an unavailable slice --> <attr name="unavailableSliceSubtitle" format="string" /> </declare-styleable> <declare-styleable name="PreferenceScreen"> Loading src/com/android/settings/core/PreferenceXmlParserUtils.java +17 −3 Original line number Diff line number Diff line Loading @@ -72,9 +72,11 @@ public class PreferenceXmlParserUtils { MetadataFlag.FLAG_NEED_PREF_SUMMARY, MetadataFlag.FLAG_NEED_PREF_ICON, MetadataFlag.FLAG_NEED_SEARCHABLE, MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE}) MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE, MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE}) @Retention(RetentionPolicy.SOURCE) public @interface MetadataFlag { int FLAG_INCLUDE_PREF_SCREEN = 1; int FLAG_NEED_KEY = 1 << 1; int FLAG_NEED_PREF_TYPE = 1 << 2; Loading @@ -87,6 +89,7 @@ public class PreferenceXmlParserUtils { int FLAG_NEED_SEARCHABLE = 1 << 9; int FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE = 1 << 10; int FLAG_NEED_PREF_APPEND = 1 << 11; int FLAG_UNAVAILABLE_SLICE_SUBTITLE = 1 << 12; } public static final String METADATA_PREF_TYPE = "type"; Loading @@ -101,6 +104,8 @@ public class PreferenceXmlParserUtils { public static final String METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE = "allow_dynamic_summary_in_slice"; public static final String METADATA_APPEND = "staticPreferenceLocation"; public static final String METADATA_UNAVAILABLE_SLICE_SUBTITLE = "unavailable_slice_subtitle"; private static final String ENTRIES_SEPARATOR = "|"; Loading Loading @@ -249,6 +254,10 @@ public class PreferenceXmlParserUtils { preferenceMetadata.putBoolean(METADATA_APPEND, isAppended(preferenceScreenAttributes)); } if (hasFlag(flags, MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE)) { preferenceMetadata.putString(METADATA_UNAVAILABLE_SLICE_SUBTITLE, getUnavailableSliceSubtitle(preferenceAttributes)); } metadata.add(preferenceMetadata); preferenceAttributes.recycle(); Loading Loading @@ -346,4 +355,9 @@ public class PreferenceXmlParserUtils { return styledAttributes.getInt(R.styleable.PreferenceScreen_staticPreferenceLocation, PREPEND_VALUE) == APPEND_VALUE; } private static String getUnavailableSliceSubtitle(TypedArray styledAttributes) { return styledAttributes.getString( R.styleable.Preference_unavailableSliceSubtitle); } } No newline at end of file src/com/android/settings/slices/SliceBuilderUtils.java +5 −2 Original line number Diff line number Diff line Loading @@ -425,7 +425,10 @@ public class SliceBuilderUtils { final String title = data.getTitle(); final Set<String> keywords = buildSliceKeywords(data); @ColorInt final int color = Utils.getColorAccentDefaultColor(context); final CharSequence summary = context.getText(R.string.disabled_dependent_setting_summary); final String customSubtitle = data.getUnavailableSliceSubtitle(); final CharSequence subtitle = !TextUtils.isEmpty(customSubtitle) ? customSubtitle : context.getText(R.string.disabled_dependent_setting_summary); final IconCompat icon = getSafeIcon(context, data); final SliceAction primaryAction = SliceAction.createDeeplink( getContentPendingIntent(context, data), Loading @@ -436,7 +439,7 @@ public class SliceBuilderUtils { .addRow(new RowBuilder() .setTitle(title) .setTitleItem(icon, ListBuilder.ICON_IMAGE) .setSubtitle(summary) .setSubtitle(subtitle) .setPrimaryAction(primaryAction)) .setKeywords(keywords) .build(); Loading src/com/android/settings/slices/SliceData.java +15 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import java.lang.annotation.RetentionPolicy; * Note that {@link #mKey} is treated as a primary key for this class and determines equality. */ public class SliceData { /** * Flags indicating the UI type of the Slice. */ Loading Loading @@ -76,6 +75,8 @@ public class SliceData { private final boolean mIsDynamicSummaryAllowed; private final String mUnavailableSliceSubtitle; public String getKey() { return mKey; } Loading Loading @@ -124,6 +125,10 @@ public class SliceData { return mIsDynamicSummaryAllowed; } public String getUnavailableSliceSubtitle() { return mUnavailableSliceSubtitle; } private SliceData(Builder builder) { mKey = builder.mKey; mTitle = builder.mTitle; Loading @@ -137,6 +142,7 @@ public class SliceData { mSliceType = builder.mSliceType; mIsPlatformDefined = builder.mIsPlatformDefined; mIsDynamicSummaryAllowed = builder.mIsDynamicSummaryAllowed; mUnavailableSliceSubtitle = builder.mUnavailableSliceSubtitle; } @Override Loading Loading @@ -178,6 +184,8 @@ public class SliceData { private boolean mIsDynamicSummaryAllowed; private String mUnavailableSliceSubtitle; public Builder setKey(String key) { mKey = key; return this; Loading Loading @@ -238,6 +246,12 @@ public class SliceData { return this; } public Builder setUnavailableSliceSubtitle( String unavailableSliceSubtitle) { mUnavailableSliceSubtitle = unavailableSliceSubtitle; return this; } public SliceData build() { if (TextUtils.isEmpty(mKey)) { throw new InvalidSliceDataException("Key cannot be empty"); Loading src/com/android/settings/slices/SliceDataConverter.java +7 −3 Original line number Diff line number Diff line Loading @@ -16,12 +16,12 @@ 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_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; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_PLATFORM_SLICE_FLAG; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_UNAVAILABLE_SLICE_SUBTITLE; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SUMMARY; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_TITLE; Loading Loading @@ -189,7 +189,8 @@ class SliceDataConverter { | MetadataFlag.FLAG_NEED_PREF_ICON | MetadataFlag.FLAG_NEED_PREF_SUMMARY | MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG | MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE); | MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE | MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE); for (Bundle bundle : metadata) { // TODO (b/67996923) Non-controller Slices should become intent-only slices. Loading @@ -208,6 +209,8 @@ class SliceDataConverter { final boolean isPlatformSlice = bundle.getBoolean(METADATA_PLATFORM_SLICE_FLAG); final boolean isDynamicSummaryAllowed = bundle.getBoolean( METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE); final String unavailableSliceSubtitle = bundle.getString( METADATA_UNAVAILABLE_SLICE_SUBTITLE); final SliceData xmlSlice = new SliceData.Builder() .setKey(key) Loading @@ -220,6 +223,7 @@ class SliceDataConverter { .setSliceType(sliceType) .setPlatformDefined(isPlatformSlice) .setDynamicSummaryAllowed(isDynamicSummaryAllowed) .setUnavailableSliceSubtitle(unavailableSliceSubtitle) .build(); final BasePreferenceController controller = Loading Loading
res/values/attrs.xml +2 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,8 @@ <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" /> <!-- customized subtitle if it's an unavailable slice --> <attr name="unavailableSliceSubtitle" format="string" /> </declare-styleable> <declare-styleable name="PreferenceScreen"> Loading
src/com/android/settings/core/PreferenceXmlParserUtils.java +17 −3 Original line number Diff line number Diff line Loading @@ -72,9 +72,11 @@ public class PreferenceXmlParserUtils { MetadataFlag.FLAG_NEED_PREF_SUMMARY, MetadataFlag.FLAG_NEED_PREF_ICON, MetadataFlag.FLAG_NEED_SEARCHABLE, MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE}) MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE, MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE}) @Retention(RetentionPolicy.SOURCE) public @interface MetadataFlag { int FLAG_INCLUDE_PREF_SCREEN = 1; int FLAG_NEED_KEY = 1 << 1; int FLAG_NEED_PREF_TYPE = 1 << 2; Loading @@ -87,6 +89,7 @@ public class PreferenceXmlParserUtils { int FLAG_NEED_SEARCHABLE = 1 << 9; int FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE = 1 << 10; int FLAG_NEED_PREF_APPEND = 1 << 11; int FLAG_UNAVAILABLE_SLICE_SUBTITLE = 1 << 12; } public static final String METADATA_PREF_TYPE = "type"; Loading @@ -101,6 +104,8 @@ public class PreferenceXmlParserUtils { public static final String METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE = "allow_dynamic_summary_in_slice"; public static final String METADATA_APPEND = "staticPreferenceLocation"; public static final String METADATA_UNAVAILABLE_SLICE_SUBTITLE = "unavailable_slice_subtitle"; private static final String ENTRIES_SEPARATOR = "|"; Loading Loading @@ -249,6 +254,10 @@ public class PreferenceXmlParserUtils { preferenceMetadata.putBoolean(METADATA_APPEND, isAppended(preferenceScreenAttributes)); } if (hasFlag(flags, MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE)) { preferenceMetadata.putString(METADATA_UNAVAILABLE_SLICE_SUBTITLE, getUnavailableSliceSubtitle(preferenceAttributes)); } metadata.add(preferenceMetadata); preferenceAttributes.recycle(); Loading Loading @@ -346,4 +355,9 @@ public class PreferenceXmlParserUtils { return styledAttributes.getInt(R.styleable.PreferenceScreen_staticPreferenceLocation, PREPEND_VALUE) == APPEND_VALUE; } private static String getUnavailableSliceSubtitle(TypedArray styledAttributes) { return styledAttributes.getString( R.styleable.Preference_unavailableSliceSubtitle); } } No newline at end of file
src/com/android/settings/slices/SliceBuilderUtils.java +5 −2 Original line number Diff line number Diff line Loading @@ -425,7 +425,10 @@ public class SliceBuilderUtils { final String title = data.getTitle(); final Set<String> keywords = buildSliceKeywords(data); @ColorInt final int color = Utils.getColorAccentDefaultColor(context); final CharSequence summary = context.getText(R.string.disabled_dependent_setting_summary); final String customSubtitle = data.getUnavailableSliceSubtitle(); final CharSequence subtitle = !TextUtils.isEmpty(customSubtitle) ? customSubtitle : context.getText(R.string.disabled_dependent_setting_summary); final IconCompat icon = getSafeIcon(context, data); final SliceAction primaryAction = SliceAction.createDeeplink( getContentPendingIntent(context, data), Loading @@ -436,7 +439,7 @@ public class SliceBuilderUtils { .addRow(new RowBuilder() .setTitle(title) .setTitleItem(icon, ListBuilder.ICON_IMAGE) .setSubtitle(summary) .setSubtitle(subtitle) .setPrimaryAction(primaryAction)) .setKeywords(keywords) .build(); Loading
src/com/android/settings/slices/SliceData.java +15 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,6 @@ import java.lang.annotation.RetentionPolicy; * Note that {@link #mKey} is treated as a primary key for this class and determines equality. */ public class SliceData { /** * Flags indicating the UI type of the Slice. */ Loading Loading @@ -76,6 +75,8 @@ public class SliceData { private final boolean mIsDynamicSummaryAllowed; private final String mUnavailableSliceSubtitle; public String getKey() { return mKey; } Loading Loading @@ -124,6 +125,10 @@ public class SliceData { return mIsDynamicSummaryAllowed; } public String getUnavailableSliceSubtitle() { return mUnavailableSliceSubtitle; } private SliceData(Builder builder) { mKey = builder.mKey; mTitle = builder.mTitle; Loading @@ -137,6 +142,7 @@ public class SliceData { mSliceType = builder.mSliceType; mIsPlatformDefined = builder.mIsPlatformDefined; mIsDynamicSummaryAllowed = builder.mIsDynamicSummaryAllowed; mUnavailableSliceSubtitle = builder.mUnavailableSliceSubtitle; } @Override Loading Loading @@ -178,6 +184,8 @@ public class SliceData { private boolean mIsDynamicSummaryAllowed; private String mUnavailableSliceSubtitle; public Builder setKey(String key) { mKey = key; return this; Loading Loading @@ -238,6 +246,12 @@ public class SliceData { return this; } public Builder setUnavailableSliceSubtitle( String unavailableSliceSubtitle) { mUnavailableSliceSubtitle = unavailableSliceSubtitle; return this; } public SliceData build() { if (TextUtils.isEmpty(mKey)) { throw new InvalidSliceDataException("Key cannot be empty"); Loading
src/com/android/settings/slices/SliceDataConverter.java +7 −3 Original line number Diff line number Diff line Loading @@ -16,12 +16,12 @@ 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_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; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_PLATFORM_SLICE_FLAG; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_UNAVAILABLE_SLICE_SUBTITLE; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_SUMMARY; import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_TITLE; Loading Loading @@ -189,7 +189,8 @@ class SliceDataConverter { | MetadataFlag.FLAG_NEED_PREF_ICON | MetadataFlag.FLAG_NEED_PREF_SUMMARY | MetadataFlag.FLAG_NEED_PLATFORM_SLICE_FLAG | MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE); | MetadataFlag.FLAG_ALLOW_DYNAMIC_SUMMARY_IN_SLICE | MetadataFlag.FLAG_UNAVAILABLE_SLICE_SUBTITLE); for (Bundle bundle : metadata) { // TODO (b/67996923) Non-controller Slices should become intent-only slices. Loading @@ -208,6 +209,8 @@ class SliceDataConverter { final boolean isPlatformSlice = bundle.getBoolean(METADATA_PLATFORM_SLICE_FLAG); final boolean isDynamicSummaryAllowed = bundle.getBoolean( METADATA_ALLOW_DYNAMIC_SUMMARY_IN_SLICE); final String unavailableSliceSubtitle = bundle.getString( METADATA_UNAVAILABLE_SLICE_SUBTITLE); final SliceData xmlSlice = new SliceData.Builder() .setKey(key) Loading @@ -220,6 +223,7 @@ class SliceDataConverter { .setSliceType(sliceType) .setPlatformDefined(isPlatformSlice) .setDynamicSummaryAllowed(isDynamicSummaryAllowed) .setUnavailableSliceSubtitle(unavailableSliceSubtitle) .build(); final BasePreferenceController controller = Loading