From ef06dcb4b189d8946ecb4f09bff94a22fa9caf30 Mon Sep 17 00:00:00 2001 From: Kim Baekgyeong Date: Thu, 5 Dec 2019 04:17:34 +0000 Subject: [PATCH] Add last connected device concept When connecting multiple audio devices Media and Sonification sounds comes out of the last connected device, not a high-priority device. Test: play music Test: connect wired earphone // sound : wired earphone Test: connect usb earphone // sound : usb earphone, not the wired earphone(high-priority) Test: connect bluetooth headset // sound : bluetooth headset Test: disconnect bluetooth headset // sound : usb earphone, not the wired earphone(high-priority) Bug: 135749685 Change-Id: I366e136f8e660c4d7f00935cc9088a926c9a605a --- .../server/audio/AudioDeviceInventory.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/audio/AudioDeviceInventory.java b/services/core/java/com/android/server/audio/AudioDeviceInventory.java index a2b3574880c4e..37add3da5a485 100644 --- a/services/core/java/com/android/server/audio/AudioDeviceInventory.java +++ b/services/core/java/com/android/server/audio/AudioDeviceInventory.java @@ -35,7 +35,6 @@ import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.UserHandle; import android.text.TextUtils; -import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.Slog; @@ -45,6 +44,7 @@ import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.Set; /** @@ -58,7 +58,7 @@ public class AudioDeviceInventory { // Actual list of connected devices // Key for map created from DeviceInfo.makeDeviceListKey() - private final ArrayMap mConnectedDevices = new ArrayMap<>(); + private final LinkedHashMap mConnectedDevices = new LinkedHashMap<>(); private @NonNull AudioDeviceBroker mDeviceBroker; @@ -148,8 +148,7 @@ public class AudioDeviceInventory { */ /*package*/ void onRestoreDevices() { synchronized (mConnectedDevices) { - for (int i = 0; i < mConnectedDevices.size(); i++) { - DeviceInfo di = mConnectedDevices.valueAt(i); + for (DeviceInfo di : mConnectedDevices.values()) { AudioSystem.setDeviceConnectionState( di.mDeviceType, AudioSystem.DEVICE_STATE_AVAILABLE, @@ -799,11 +798,10 @@ public class AudioDeviceInventory { } int delay = 0; Set devices = new HashSet<>(); - for (int i = 0; i < mConnectedDevices.size(); i++) { - int dev = mConnectedDevices.valueAt(i).mDeviceType; - if (((dev & AudioSystem.DEVICE_BIT_IN) == 0) - && BECOMING_NOISY_INTENT_DEVICES_SET.contains(dev)) { - devices.add(dev); + for (DeviceInfo di : mConnectedDevices.values()) { + if (((di.mDeviceType & AudioSystem.DEVICE_BIT_IN) == 0) + && BECOMING_NOISY_INTENT_DEVICES_SET.contains(di.mDeviceType)) { + devices.add(di.mDeviceType); } } if (musicDevice == AudioSystem.DEVICE_NONE) {