Loading media/java/android/media/AudioDeviceInfo.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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) { Loading packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +19 −16 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } } Loading Loading
media/java/android/media/AudioDeviceInfo.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; /** Loading Loading @@ -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) { Loading
packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +19 −16 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } } Loading