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

Commit 2d212381 authored by Santiago Seifert's avatar Santiago Seifert Committed by Android (Google) Code Review
Browse files

Merge "Add support for app provided disable reason string"

parents 236a96da 691e2664
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -24595,6 +24595,7 @@ package android.media {
  public static final class RouteListingPreference.Item implements android.os.Parcelable {
    method public int describeContents();
    method @Nullable public CharSequence getCustomDisableReasonMessage();
    method public int getDisableReason();
    method public int getFlags();
    method @NonNull public String getRouteId();
@@ -24602,6 +24603,7 @@ package android.media {
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.media.RouteListingPreference.Item> CREATOR;
    field public static final int DISABLE_REASON_AD = 3; // 0x3
    field public static final int DISABLE_REASON_CUSTOM = 5; // 0x5
    field public static final int DISABLE_REASON_DOWNLOADED_CONTENT = 2; // 0x2
    field public static final int DISABLE_REASON_IN_APP_ONLY = 4; // 0x4
    field public static final int DISABLE_REASON_NONE = 0; // 0x0
@@ -24613,6 +24615,7 @@ package android.media {
  public static final class RouteListingPreference.Item.Builder {
    ctor public RouteListingPreference.Item.Builder(@NonNull String);
    method @NonNull public android.media.RouteListingPreference.Item build();
    method @NonNull public android.media.RouteListingPreference.Item.Builder setCustomDisableReasonMessage(@Nullable CharSequence);
    method @NonNull public android.media.RouteListingPreference.Item.Builder setDisableReason(int);
    method @NonNull public android.media.RouteListingPreference.Item.Builder setFlags(int);
    method @NonNull public android.media.RouteListingPreference.Item.Builder setSessionParticipantCount(@IntRange(from=0) int);
+65 −3
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;

/**
@@ -254,7 +255,8 @@ public final class RouteListingPreference implements Parcelable {
                    DISABLE_REASON_SUBSCRIPTION_REQUIRED,
                    DISABLE_REASON_DOWNLOADED_CONTENT,
                    DISABLE_REASON_AD,
                    DISABLE_REASON_IN_APP_ONLY
                    DISABLE_REASON_IN_APP_ONLY,
                    DISABLE_REASON_CUSTOM
                })
        public @interface DisableReason {}

@@ -280,6 +282,15 @@ public final class RouteListingPreference implements Parcelable {
         * will take the user to the app.
         */
        public static final int DISABLE_REASON_IN_APP_ONLY = 4;
        /**
         * The corresponding route is not available because of the reason described by {@link
         * #getCustomDisableReasonMessage()}.
         *
         * <p>Applications should strongly prefer one of the other disable reasons (for the full
         * list, see {@link #getDisableReason()}) in order to guarantee correct localization and
         * rendering across all form factors.
         */
        public static final int DISABLE_REASON_CUSTOM = 5;

        @NonNull
        public static final Creator<Item> CREATOR =
@@ -299,12 +310,15 @@ public final class RouteListingPreference implements Parcelable {
        @Flags private final int mFlags;
        @DisableReason private final int mDisableReason;
        private final int mSessionParticipantCount;
        @Nullable private final CharSequence mCustomDisableReasonMessage;

        private Item(@NonNull Builder builder) {
            mRouteId = builder.mRouteId;
            mFlags = builder.mFlags;
            mDisableReason = builder.mDisableReason;
            mSessionParticipantCount = builder.mSessionParticipantCount;
            mCustomDisableReasonMessage = builder.mCustomDisableReasonMessage;
            validateCustomDisableReasonMessage();
        }

        private Item(Parcel in) {
@@ -314,6 +328,8 @@ public final class RouteListingPreference implements Parcelable {
            mDisableReason = in.readInt();
            mSessionParticipantCount = in.readInt();
            Preconditions.checkArgument(mSessionParticipantCount >= 0);
            mCustomDisableReasonMessage = in.readCharSequence();
            validateCustomDisableReasonMessage();
        }

        /**
@@ -346,6 +362,7 @@ public final class RouteListingPreference implements Parcelable {
         * @see #DISABLE_REASON_DOWNLOADED_CONTENT
         * @see #DISABLE_REASON_AD
         * @see #DISABLE_REASON_IN_APP_ONLY
         * @see #DISABLE_REASON_CUSTOM
         */
        @DisableReason
        public int getDisableReason() {
@@ -363,6 +380,25 @@ public final class RouteListingPreference implements Parcelable {
            return mSessionParticipantCount;
        }

        /**
         * Returns a human-readable {@link CharSequence} describing the reason for this route to be
         * disabled. May be null if {@link #getDisableReason()} is not {@link
         * #DISABLE_REASON_CUSTOM}.
         *
         * <p>This value is ignored if the {@link #getDisableReason() disable reason} for this item
         * is not {@link #DISABLE_REASON_CUSTOM}.
         *
         * <p>Applications must provide a localized message that matches the system's locale. See
         * {@link Locale#getDefault()}.
         *
         * <p>This message is a hint for the system. Applications should strongly prefer one of the
         * other disable reasons listed in {@link #getDisableReason()}.
         */
        @Nullable
        public CharSequence getCustomDisableReasonMessage() {
            return mCustomDisableReasonMessage;
        }

        // Item Parcelable implementation.

        @Override
@@ -376,6 +412,7 @@ public final class RouteListingPreference implements Parcelable {
            dest.writeInt(mFlags);
            dest.writeInt(mDisableReason);
            dest.writeInt(mSessionParticipantCount);
            dest.writeCharSequence(mCustomDisableReasonMessage);
        }

        // Equals and hashCode.
@@ -392,12 +429,28 @@ public final class RouteListingPreference implements Parcelable {
            return mRouteId.equals(item.mRouteId)
                    && mFlags == item.mFlags
                    && mDisableReason == item.mDisableReason
                    && mSessionParticipantCount == item.mSessionParticipantCount;
                    && mSessionParticipantCount == item.mSessionParticipantCount
                    && TextUtils.equals(
                            mCustomDisableReasonMessage, item.mCustomDisableReasonMessage);
        }

        @Override
        public int hashCode() {
            return Objects.hash(mRouteId, mFlags, mDisableReason, mSessionParticipantCount);
            return Objects.hash(
                    mRouteId,
                    mFlags,
                    mDisableReason,
                    mSessionParticipantCount,
                    mCustomDisableReasonMessage);
        }

        private void validateCustomDisableReasonMessage() {
            if (mDisableReason == DISABLE_REASON_CUSTOM) {
                Preconditions.checkArgument(
                        !TextUtils.isEmpty(mCustomDisableReasonMessage),
                        "customDisableReasonMessage must not be null or empty if disable reason is"
                                + " DISABLE_REASON_CUSTOM.");
            }
        }

        /** Builder for {@link Item}. */
@@ -407,6 +460,7 @@ public final class RouteListingPreference implements Parcelable {
            private int mFlags;
            private int mDisableReason;
            private int mSessionParticipantCount;
            private CharSequence mCustomDisableReasonMessage;

            /**
             * Constructor.
@@ -444,6 +498,14 @@ public final class RouteListingPreference implements Parcelable {
                return this;
            }

            /** See {@link Item#getCustomDisableReasonMessage()}. */
            @NonNull
            public Builder setCustomDisableReasonMessage(
                    @Nullable CharSequence customDisableReasonMessage) {
                mCustomDisableReasonMessage = customDisableReasonMessage;
                return this;
            }

            /** Creates and returns a new {@link Item} with the given parameters. */
            @NonNull
            public Item build() {