Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 25dc1f1f authored by Console Chen's avatar Console Chen Committed by Android (Google) Code Review
Browse files

Merge "Adding the ability to customize the subtitle on an unavailable slice"

parents bcc94e40 ce16d7ad
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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">
+17 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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";
@@ -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 = "|";

@@ -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();
@@ -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
+5 −2
Original line number Diff line number Diff line
@@ -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),
@@ -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();
+15 −1
Original line number Diff line number Diff line
@@ -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.
     */
@@ -76,6 +75,8 @@ public class SliceData {

    private final boolean mIsDynamicSummaryAllowed;

    private final String mUnavailableSliceSubtitle;

    public String getKey() {
        return mKey;
    }
@@ -124,6 +125,10 @@ public class SliceData {
        return mIsDynamicSummaryAllowed;
    }

    public String getUnavailableSliceSubtitle() {
        return mUnavailableSliceSubtitle;
    }

    private SliceData(Builder builder) {
        mKey = builder.mKey;
        mTitle = builder.mTitle;
@@ -137,6 +142,7 @@ public class SliceData {
        mSliceType = builder.mSliceType;
        mIsPlatformDefined = builder.mIsPlatformDefined;
        mIsDynamicSummaryAllowed = builder.mIsDynamicSummaryAllowed;
        mUnavailableSliceSubtitle = builder.mUnavailableSliceSubtitle;
    }

    @Override
@@ -178,6 +184,8 @@ public class SliceData {

        private boolean mIsDynamicSummaryAllowed;

        private String mUnavailableSliceSubtitle;

        public Builder setKey(String key) {
            mKey = key;
            return this;
@@ -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");
+7 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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.
@@ -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)
@@ -220,6 +223,7 @@ class SliceDataConverter {
                        .setSliceType(sliceType)
                        .setPlatformDefined(isPlatformSlice)
                        .setDynamicSummaryAllowed(isDynamicSummaryAllowed)
                        .setUnavailableSliceSubtitle(unavailableSliceSubtitle)
                        .build();

                final BasePreferenceController controller =
Loading