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

Commit 1ea19b1d authored by Kyunglyul Hyun's avatar Kyunglyul Hyun
Browse files

Add address to MediaRoute2Info

The route ID of a bluetooth route was its hardware address and
SettingsLib depended on that to get BluetoothDevice.

We can't use the address as ID for a pair of hearing devices,
which has their own address but should have the same route ID.

Instead, this CL adds "address" field explictly to be used for bluetooth
routes.
Maybe it can be used by other devices as well.

Bug: 157708273
Test: make -j42 RunSettingsLibRoboTests && cts test
Change-Id: Ib940da9975fc8d68ec3fb7cf2c4a85c0d1a195f3
parent 448b11bd
Loading
Loading
Loading
Loading
+30 −21
Original line number Diff line number Diff line
@@ -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.
         * <p>
+1 −1
Original line number Diff line number Diff line
@@ -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) {
+2 −2
Original line number Diff line number Diff line
@@ -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)))
+1 −0
Original line number Diff line number Diff line
@@ -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;
    }