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

Commit ce9bcc49 authored by Julia Reynolds's avatar Julia Reynolds Committed by Android (Google) Code Review
Browse files

Merge "Show the connected device more reliably"

parents 2e3569d7 24cc759d
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);
                }
            }