Add RouteListingPref.Item disable reason and flags

Test: atest MediaRouter2HostSideTest
Bug: 241888071
Bug: 235352899
Change-Id: Ia69778e624929f0cb932370310a4a2b19fc481b0
This commit is contained in:
Santiago Seifert
2022-11-28 13:47:47 +00:00
parent 8b11b90b5a
commit 2276aab27c
2 changed files with 87 additions and 4 deletions

View File

@@ -23906,11 +23906,17 @@ package android.media {
}
public static final class RouteListingPreference.Item implements android.os.Parcelable {
ctor public RouteListingPreference.Item(@NonNull String);
ctor public RouteListingPreference.Item(@NonNull String, int, int);
method public int describeContents();
method public int getDisableReason();
method public int getFlags();
method @NonNull public String getRouteId();
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_NONE = 0; // 0x0
field public static final int DISABLE_REASON_SUBSCRIPTION_REQUIRED = 1; // 0x1
field public static final int FLAG_ONGOING_SESSION = 1; // 0x1
field public static final int FLAG_SUGGESTED_ROUTE = 2; // 0x2
}
public final class RoutingSessionInfo implements android.os.Parcelable {

View File

@@ -16,6 +16,7 @@
package android.media;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
@@ -23,6 +24,8 @@ import android.text.TextUtils;
import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -111,6 +114,45 @@ public final class RouteListingPreference implements Parcelable {
/** Holds preference information for a specific route in a media routing listing. */
public static final class Item implements Parcelable {
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
flag = true,
prefix = {"FLAG_"},
value = {FLAG_ONGOING_SESSION, FLAG_SUGGESTED_ROUTE})
public @interface Flags {}
/**
* The corresponding route is already hosting a session with the app that owns this listing
* preference.
*/
public static final int FLAG_ONGOING_SESSION = 1;
/**
* The corresponding route is specially likely to be selected by the user.
*
* <p>A UI reflecting this preference may reserve a specific space for suggested routes,
* making it more accessible to the user. If the number of suggested routes exceeds the
* number supported by the UI, the routes listed first in {@link
* RouteListingPreference#getItems()} will take priority.
*/
public static final int FLAG_SUGGESTED_ROUTE = 1 << 1;
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(
prefix = {"DISABLE_REASON_"},
value = {DISABLE_REASON_NONE, DISABLE_REASON_SUBSCRIPTION_REQUIRED})
public @interface DisableReason {}
/** The corresponding route is available for routing. */
public static final int DISABLE_REASON_NONE = 0;
/**
* The corresponding route requires a special subscription in order to be available for
* routing.
*/
public static final int DISABLE_REASON_SUBSCRIPTION_REQUIRED = 1;
@NonNull
public static final Creator<Item> CREATOR =
new Creator<>() {
@@ -126,21 +168,29 @@ public final class RouteListingPreference implements Parcelable {
};
@NonNull private final String mRouteId;
@Flags private final int mFlags;
@DisableReason private final int mDisableReason;
/**
* Creates an instance with the given value.
*
* @param routeId See {@link #getRouteId()}. Must not be empty.
* @param flags See {@link #getFlags()}.
* @param disableReason See {@link #getDisableReason()}.
*/
public Item(@NonNull String routeId) {
public Item(@NonNull String routeId, @Flags int flags, @DisableReason int disableReason) {
Preconditions.checkArgument(!TextUtils.isEmpty(routeId));
mRouteId = routeId;
mFlags = flags;
mDisableReason = disableReason;
}
private Item(Parcel in) {
String routeId = in.readString();
Preconditions.checkArgument(!TextUtils.isEmpty(routeId));
mRouteId = routeId;
mFlags = in.readInt();
mDisableReason = in.readInt();
}
/** Returns the id of the route that corresponds to this route listing preference item. */
@@ -149,6 +199,29 @@ public final class RouteListingPreference implements Parcelable {
return mRouteId;
}
/**
* Returns the flags associated to the route that corresponds to this item.
*
* @see #FLAG_ONGOING_SESSION
* @see #FLAG_SUGGESTED_ROUTE
*/
@Flags
public int getFlags() {
return mFlags;
}
/**
* Returns the reason for the corresponding route to be disabled, or {@link
* #DISABLE_REASON_NONE} if the route is not disabled.
*
* @see #DISABLE_REASON_NONE
* @see #DISABLE_REASON_SUBSCRIPTION_REQUIRED
*/
@DisableReason
public int getDisableReason() {
return mDisableReason;
}
// Item Parcelable implementation.
@Override
@@ -159,6 +232,8 @@ public final class RouteListingPreference implements Parcelable {
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(mRouteId);
dest.writeInt(mFlags);
dest.writeInt(mDisableReason);
}
// Equals and hashCode.
@@ -172,12 +247,14 @@ public final class RouteListingPreference implements Parcelable {
return false;
}
Item item = (Item) other;
return mRouteId.equals(item.mRouteId);
return mRouteId.equals(item.mRouteId)
&& mFlags == item.mFlags
&& mDisableReason == item.mDisableReason;
}
@Override
public int hashCode() {
return Objects.hash(mRouteId);
return Objects.hash(mRouteId, mFlags, mDisableReason);
}
}
}