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

Commit 24cc759d authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Show the connected device more reliably

Test: manual
Change-Id: Ief39215321e0a283f724dd0b0cdf5b9eeab1e116
Fixes: 72494077
parent 72482d91
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.util.SparseIntArray;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.Objects;
import java.util.TreeSet;

/**
@@ -176,6 +177,19 @@ public final class AudioDeviceInfo {
        }
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AudioDeviceInfo that = (AudioDeviceInfo) o;
        return Objects.equals(getPort(), that.getPort());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getPort());
    }

    private final AudioDevicePort mPort;

    AudioDeviceInfo(AudioDevicePort port) {
+19 −16
Original line number Diff line number Diff line
@@ -59,7 +59,9 @@ import com.android.systemui.statusbar.phone.StatusBar;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

@@ -109,8 +111,10 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa
    private boolean mShowVolumeDialog;
    private boolean mShowSafetyWarning;
    private DeviceCallback mDeviceCallback = new DeviceCallback();
    private AudioDeviceInfo mConnectedDevice;
    private final NotificationManager mNotificationManager;
    @GuardedBy("mLock")
    private List<AudioDeviceInfo> mConnectedDevices = new ArrayList<>();
    private Object mLock = new Object();

    private boolean mDestroyed;
    private VolumePolicy mVolumePolicy;
@@ -1055,26 +1059,25 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa

    protected final class DeviceCallback extends AudioDeviceCallback {
        public void onAudioDevicesAdded(AudioDeviceInfo[] addedDevices) {
            synchronized (mLock) {
                for (AudioDeviceInfo info : addedDevices) {
                    if (info.isSink()
                            && (info.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP
                            || info.getType() == AudioDeviceInfo.TYPE_BLUETOOTH_SCO)) {
                    mConnectedDevice = info;
                        mConnectedDevices.add(info);
                        mCallbacks.onConnectedDeviceChanged(info.getProductName().toString());
                    }
                }
            }
        }

        public void onAudioDevicesRemoved(AudioDeviceInfo[] removedDevices) {
            if (mConnectedDevice == null) {
                mCallbacks.onConnectedDeviceChanged(null);
                return;
            }
            synchronized (mLock) {
                for (AudioDeviceInfo info : removedDevices) {
                if (info.isSink() == mConnectedDevice.isSink()
                        && Objects.equals(info.getProductName(), mConnectedDevice.getProductName())
                        && info.getType() == mConnectedDevice.getType()) {
                    mConnectedDevice = null;
                    mConnectedDevices.remove(info);
                }

                if (mConnectedDevices.size() == 0) {
                    mCallbacks.onConnectedDeviceChanged(null);
                }
            }