From ae74c912b73b8d44cdfa78e47e68781c2966cbe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Budnik?= Date: Wed, 11 Jan 2023 16:13:45 +0000 Subject: [PATCH] Copy lists to ensure deep immutability in RoutingSessionInfo This avoids lists in RoutingSessionInfo being modified from the original builder after creation. This change also removes redundant code. Test: atest CtsMediaBetterTogetherTestCases Bug: 265064892 Change-Id: Id4a3fb65f78c1f6f9374450a06c4071dbacb9b47 --- .../android/media/RoutingSessionInfo.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/media/java/android/media/RoutingSessionInfo.java b/media/java/android/media/RoutingSessionInfo.java index 0982132e006d0..e1af909d63fca 100644 --- a/media/java/android/media/RoutingSessionInfo.java +++ b/media/java/android/media/RoutingSessionInfo.java @@ -23,7 +23,6 @@ import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; -import android.util.Log; import com.android.internal.util.Preconditions; @@ -117,6 +116,8 @@ public final class RoutingSessionInfo implements Parcelable { mProviderId = src.readString(); mSelectedRoutes = ensureList(src.createStringArrayList()); + Preconditions.checkArgument(!mSelectedRoutes.isEmpty()); + mSelectableRoutes = ensureList(src.createStringArrayList()); mDeselectableRoutes = ensureList(src.createStringArrayList()); mTransferableRoutes = ensureList(src.createStringArrayList()); @@ -416,15 +417,21 @@ public final class RoutingSessionInfo implements Parcelable { return result.toString(); } + /** + * Provides a new list with unique route IDs if {@link #mProviderId} is set, or the original IDs + * otherwise. + * + * @param routeIds list of route IDs to convert + * @return new list with unique IDs or original IDs + */ + + @NonNull private List convertToUniqueRouteIds(@NonNull List routeIds) { - if (routeIds == null) { - Log.w(TAG, "routeIds is null. Returning an empty list"); - return Collections.emptyList(); - } + Objects.requireNonNull(routeIds, "RouteIds cannot be null."); // mProviderId can be null if not set. Return the original list for this case. if (TextUtils.isEmpty(mProviderId)) { - return routeIds; + return new ArrayList<>(routeIds); } List result = new ArrayList<>();