diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java index 283a41a810576..57815370e2bab 100644 --- a/media/java/android/media/MediaRoute2Info.java +++ b/media/java/android/media/MediaRoute2Info.java @@ -28,11 +28,13 @@ import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; +import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Locale; import java.util.Objects; import java.util.Set; @@ -622,6 +624,58 @@ public final class MediaRoute2Info implements Parcelable { return true; } + /** + * Dumps the current state of the object to the given {@code pw} as a human-readable string. + * + *
Used in the context of dumpsys.
+ * + * @hide + */ + public void dump(@NonNull PrintWriter pw, @NonNull String prefix) { + pw.println(prefix + "MediaRoute2Info"); + + String indent = prefix + " "; + + pw.println(indent + "mId=" + mId); + pw.println(indent + "mName=" + mName); + pw.println(indent + "mFeatures=" + mFeatures); + pw.println(indent + "mIsSystem=" + mIsSystem); + pw.println(indent + "mIconUri=" + mIconUri); + pw.println(indent + "mDescription=" + mDescription); + pw.println(indent + "mConnectionState=" + mConnectionState); + pw.println(indent + "mClientPackageName=" + mClientPackageName); + pw.println(indent + "mPackageName=" + mPackageName); + + dumpVolume(pw, indent); + + pw.println(indent + "mAddress=" + mAddress); + pw.println(indent + "mDeduplicationIds=" + mDeduplicationIds); + pw.println(indent + "mExtras=" + mExtras); + pw.println(indent + "mProviderId=" + mProviderId); + } + + private void dumpVolume(@NonNull PrintWriter pw, @NonNull String prefix) { + String volumeHandlingName; + + switch (mVolumeHandling) { + case PLAYBACK_VOLUME_FIXED: + volumeHandlingName = "FIXED"; + break; + case PLAYBACK_VOLUME_VARIABLE: + volumeHandlingName = "VARIABLE"; + break; + default: + volumeHandlingName = "UNKNOWN"; + break; + } + + String volume = String.format(Locale.US, + "volume(current=%d, max=%d, handling=%s(%d))", + mVolume, mVolumeMax, volumeHandlingName, mVolumeHandling); + + pw.println(prefix + volume); + } + @Override public boolean equals(Object obj) { if (this == obj) { diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java index 62e145a66d0ce..d2b460e4fb511 100644 --- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java +++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java @@ -2438,6 +2438,7 @@ class MediaRouter2ServiceImpl { pw.println(indent + "mUniqueRequestId=" + mUniqueRequestId); pw.println(indent + "mManagerRequestId=" + mManagerRequestId); mOldSession.dump(pw, indent); + mRoute.dump(pw, prefix); } } }