diff --git a/media/java/android/media/MediaRoute2Info.java b/media/java/android/media/MediaRoute2Info.java index e5ad569bb24f4..54c0bc94c2d09 100644 --- a/media/java/android/media/MediaRoute2Info.java +++ b/media/java/android/media/MediaRoute2Info.java @@ -317,9 +317,10 @@ public final class MediaRoute2Info implements Parcelable { @ConnectionState final int mConnectionState; final String mClientPackageName; - final int mVolume; - final int mVolumeMax; final int mVolumeHandling; + final int mVolumeMax; + final int mVolume; + final String mAddress; final Bundle mExtras; final String mProviderId; @@ -336,6 +337,7 @@ public final class MediaRoute2Info implements Parcelable { mVolumeHandling = builder.mVolumeHandling; mVolumeMax = builder.mVolumeMax; mVolume = builder.mVolume; + mAddress = builder.mAddress; mExtras = builder.mExtras; mProviderId = builder.mProviderId; } @@ -353,6 +355,7 @@ public final class MediaRoute2Info implements Parcelable { mVolumeHandling = in.readInt(); mVolumeMax = in.readInt(); mVolume = in.readInt(); + mAddress = in.readString(); mExtras = in.readBundle(); mProviderId = in.readString(); } @@ -483,6 +486,15 @@ public final class MediaRoute2Info implements Parcelable { return mVolume; } + /** + * Gets the hardware address of the route if available. + * @hide + */ + @Nullable + public String getAddress() { + return mAddress; + } + @Nullable public Bundle getExtras() { return mExtras == null ? null : new Bundle(mExtras); @@ -564,6 +576,7 @@ public final class MediaRoute2Info implements Parcelable { && (mVolumeHandling == other.mVolumeHandling) && (mVolumeMax == other.mVolumeMax) && (mVolume == other.mVolume) + && Objects.equals(mAddress, other.mAddress) && Objects.equals(mProviderId, other.mProviderId); } @@ -572,7 +585,7 @@ public final class MediaRoute2Info implements Parcelable { // Note: mExtras is not included. return Objects.hash(mId, mName, mFeatures, mType, mIsSystem, mIconUri, mDescription, mConnectionState, mClientPackageName, mVolumeHandling, mVolumeMax, mVolume, - mProviderId); + mAddress, mProviderId); } @Override @@ -614,6 +627,7 @@ public final class MediaRoute2Info implements Parcelable { dest.writeInt(mVolumeHandling); dest.writeInt(mVolumeMax); dest.writeInt(mVolume); + dest.writeString(mAddress); dest.writeBundle(mExtras); dest.writeString(mProviderId); } @@ -637,6 +651,7 @@ public final class MediaRoute2Info implements Parcelable { int mVolumeHandling = PLAYBACK_VOLUME_FIXED; int mVolumeMax; int mVolume; + String mAddress; Bundle mExtras; String mProviderId; @@ -669,24 +684,7 @@ public final class MediaRoute2Info implements Parcelable { * @param routeInfo the existing instance to copy data from. */ public Builder(@NonNull MediaRoute2Info routeInfo) { - Objects.requireNonNull(routeInfo, "routeInfo must not be null"); - - mId = routeInfo.mId; - mName = routeInfo.mName; - mFeatures = new ArrayList<>(routeInfo.mFeatures); - mType = routeInfo.mType; - mIsSystem = routeInfo.mIsSystem; - mIconUri = routeInfo.mIconUri; - mDescription = routeInfo.mDescription; - mConnectionState = routeInfo.mConnectionState; - mClientPackageName = routeInfo.mClientPackageName; - mVolumeHandling = routeInfo.mVolumeHandling; - mVolumeMax = routeInfo.mVolumeMax; - mVolume = routeInfo.mVolume; - if (routeInfo.mExtras != null) { - mExtras = new Bundle(routeInfo.mExtras); - } - mProviderId = routeInfo.mProviderId; + this(routeInfo.mId, routeInfo); } /** @@ -715,6 +713,7 @@ public final class MediaRoute2Info implements Parcelable { mVolumeHandling = routeInfo.mVolumeHandling; mVolumeMax = routeInfo.mVolumeMax; mVolume = routeInfo.mVolume; + mAddress = routeInfo.mAddress; if (routeInfo.mExtras != null) { mExtras = new Bundle(routeInfo.mExtras); } @@ -864,6 +863,16 @@ public final class MediaRoute2Info implements Parcelable { return this; } + /** + * Sets the hardware address of the route. + * @hide + */ + @NonNull + public Builder setAddress(String address) { + mAddress = address; + return this; + } + /** * Sets a bundle of extras for the route. *

diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 1d32b873c6fad..6c7e03f104dda 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -430,7 +430,7 @@ public class InfoMediaManager extends MediaManager { case TYPE_HEARING_AID: case TYPE_BLUETOOTH_A2DP: final BluetoothDevice device = - BluetoothAdapter.getDefaultAdapter().getRemoteDevice(route.getOriginalId()); + BluetoothAdapter.getDefaultAdapter().getRemoteDevice(route.getAddress()); final CachedBluetoothDevice cachedDevice = mBluetoothManager.getCachedDeviceManager().findDevice(device); if (cachedDevice != null) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java index 248eb5b96b925..94d95f06050df 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/InfoMediaManagerTest.java @@ -681,7 +681,7 @@ public class InfoMediaManagerTest { assertThat(mInfoMediaManager.mMediaDevices.get(0) instanceof PhoneMediaDevice).isTrue(); when(route2Info.getType()).thenReturn(TYPE_BLUETOOTH_A2DP); - when(route2Info.getOriginalId()).thenReturn("00:00:00:00:00:00"); + when(route2Info.getAddress()).thenReturn("00:00:00:00:00:00"); when(mLocalBluetoothManager.getCachedDeviceManager()) .thenReturn(cachedBluetoothDeviceManager); when(cachedBluetoothDeviceManager.findDevice(any(BluetoothDevice.class))) @@ -703,7 +703,7 @@ public class InfoMediaManagerTest { mock(CachedBluetoothDeviceManager.class); when(route2Info.getType()).thenReturn(TYPE_BLUETOOTH_A2DP); - when(route2Info.getOriginalId()).thenReturn("00:00:00:00:00:00"); + when(route2Info.getAddress()).thenReturn("00:00:00:00:00:00"); when(mLocalBluetoothManager.getCachedDeviceManager()) .thenReturn(cachedBluetoothDeviceManager); when(cachedBluetoothDeviceManager.findDevice(any(BluetoothDevice.class))) diff --git a/services/core/java/com/android/server/media/BluetoothRouteProvider.java b/services/core/java/com/android/server/media/BluetoothRouteProvider.java index 2461b0ce93a56..30a636d4240e4 100644 --- a/services/core/java/com/android/server/media/BluetoothRouteProvider.java +++ b/services/core/java/com/android/server/media/BluetoothRouteProvider.java @@ -247,6 +247,7 @@ class BluetoothRouteProvider { .setType(type) .setVolumeHandling(MediaRoute2Info.PLAYBACK_VOLUME_VARIABLE) .setVolumeMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)) + .setAddress(device.getAddress()) .build(); return newBtRoute; }