diff options
3 files changed, 39 insertions, 25 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 13933659a0f8..a72f311e55ed 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -32,6 +32,8 @@ import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES; import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET; import static android.media.MediaRoute2ProviderService.REASON_UNKNOWN_ERROR; +import static com.android.settingslib.media.LocalMediaManager.MediaDeviceState.STATE_SELECTED; + import android.annotation.TargetApi; import android.app.Notification; import android.bluetooth.BluetoothAdapter; @@ -497,9 +499,11 @@ public class InfoMediaManager extends MediaManager { mediaDevice = new InfoMediaDevice(mContext, mRouterManager, route, mPackageName); if (!TextUtils.isEmpty(mPackageName) - && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId()) - && mCurrentConnectedDevice == null) { - mCurrentConnectedDevice = mediaDevice; + && getRoutingSessionInfo().getSelectedRoutes().contains(route.getId())) { + mediaDevice.setState(STATE_SELECTED); + if (mCurrentConnectedDevice == null) { + mCurrentConnectedDevice = mediaDevice; + } } break; case TYPE_BUILTIN_SPEAKER: diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 5520ea41aef9..c2e36b79b753 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -63,12 +63,14 @@ public class LocalMediaManager implements BluetoothCallback { @IntDef({MediaDeviceState.STATE_CONNECTED, MediaDeviceState.STATE_CONNECTING, MediaDeviceState.STATE_DISCONNECTED, - MediaDeviceState.STATE_CONNECTING_FAILED}) + MediaDeviceState.STATE_CONNECTING_FAILED, + MediaDeviceState.STATE_SELECTED}) public @interface MediaDeviceState { int STATE_CONNECTED = 0; int STATE_CONNECTING = 1; int STATE_DISCONNECTED = 2; int STATE_CONNECTING_FAILED = 3; + int STATE_SELECTED = 4; } private final Collection<DeviceCallback> mCallbacks = new CopyOnWriteArrayList<>(); diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java index 3984ee9aa007..2fb534ddfe96 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java @@ -31,6 +31,8 @@ import static android.media.MediaRoute2Info.TYPE_USB_HEADSET; import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES; import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET; +import static com.android.settingslib.media.LocalMediaManager.MediaDeviceState.STATE_SELECTED; + import android.content.Context; import android.graphics.drawable.Drawable; import android.media.MediaRoute2Info; @@ -55,22 +57,22 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { @Retention(RetentionPolicy.SOURCE) @IntDef({MediaDeviceType.TYPE_UNKNOWN, + MediaDeviceType.TYPE_PHONE_DEVICE, MediaDeviceType.TYPE_USB_C_AUDIO_DEVICE, MediaDeviceType.TYPE_3POINT5_MM_AUDIO_DEVICE, MediaDeviceType.TYPE_FAST_PAIR_BLUETOOTH_DEVICE, MediaDeviceType.TYPE_BLUETOOTH_DEVICE, MediaDeviceType.TYPE_CAST_DEVICE, - MediaDeviceType.TYPE_CAST_GROUP_DEVICE, - MediaDeviceType.TYPE_PHONE_DEVICE}) + MediaDeviceType.TYPE_CAST_GROUP_DEVICE}) public @interface MediaDeviceType { int TYPE_UNKNOWN = 0; - int TYPE_USB_C_AUDIO_DEVICE = 1; - int TYPE_3POINT5_MM_AUDIO_DEVICE = 2; - int TYPE_FAST_PAIR_BLUETOOTH_DEVICE = 3; - int TYPE_BLUETOOTH_DEVICE = 4; - int TYPE_CAST_DEVICE = 5; - int TYPE_CAST_GROUP_DEVICE = 6; - int TYPE_PHONE_DEVICE = 7; + int TYPE_PHONE_DEVICE = 1; + int TYPE_USB_C_AUDIO_DEVICE = 2; + int TYPE_3POINT5_MM_AUDIO_DEVICE = 3; + int TYPE_FAST_PAIR_BLUETOOTH_DEVICE = 4; + int TYPE_BLUETOOTH_DEVICE = 5; + int TYPE_CAST_DEVICE = 6; + int TYPE_CAST_GROUP_DEVICE = 7; } @VisibleForTesting @@ -305,12 +307,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { * The most recent used one + device group with usage info sorted by how many times the * device has been used. * 4. The order is followed below rule: - * 1. USB-C audio device - * 2. 3.5 mm audio device - * 3. Bluetooth device - * 4. Cast device - * 5. Cast group device - * 6. Phone + * 1. Phone + * 2. USB-C audio device + * 3. 3.5 mm audio device + * 4. Bluetooth device + * 5. Cast device + * 6. Cast group device * * So the device list will look like 5 slots ranked as below. * Rule 4 + Rule 1 + the most recently used device + Rule 3 + Rule 2 @@ -330,6 +332,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { } } + if (getState() == STATE_SELECTED) { + return -1; + } else if (another.getState() == STATE_SELECTED) { + return 1; + } + // Both devices have same connection status, compare the range zone if (NearbyDevice.compareRangeZones(getRangeZone(), another.getRangeZone()) != 0) { return NearbyDevice.compareRangeZones(getRangeZone(), another.getRangeZone()); @@ -378,12 +386,12 @@ public abstract class MediaDevice implements Comparable<MediaDevice> { return s1.compareToIgnoreCase(s2); } else { // Both devices have never been used, the priority is: - // 1. USB-C audio device - // 2. 3.5 mm audio device - // 3. Bluetooth device - // 4. Cast device - // 5. Cast group device - // 6. Phone + // 1. Phone + // 2. USB-C audio device + // 3. 3.5 mm audio device + // 4. Bluetooth device + // 5. Cast device + // 6. Cast group device return mType < another.mType ? -1 : 1; } } |