diff --git a/packages/SettingsLib/res/drawable/ic_smartphone.xml b/packages/SettingsLib/res/drawable/ic_smartphone.xml
new file mode 100644
index 0000000000000..84a96da95fb10
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_smartphone.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 2a83edb03d1a1..bf97d772bb0bf 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1153,6 +1153,6 @@
-
- Phone speaker
+
+ This device
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
index 6d0e3ac4b19cd..3092b9960c7ed 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaDevice.java
@@ -16,6 +16,7 @@
package com.android.settingslib.media;
import android.bluetooth.BluetoothClass;
+import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.util.Log;
@@ -41,6 +42,11 @@ public class BluetoothMediaDevice extends MediaDevice {
return mCachedDevice.getName();
}
+ @Override
+ public String getSummary() {
+ return mCachedDevice.getConnectionSummary();
+ }
+
@Override
public int getIcon() {
//TODO(b/117129183): This is not final icon for bluetooth device, just for demo.
@@ -86,4 +92,10 @@ public class BluetoothMediaDevice extends MediaDevice {
}
return false;
}
+
+ @Override
+ public boolean isConnected() {
+ return mCachedDevice.getBondState() == BluetoothDevice.BOND_BONDED
+ && mCachedDevice.isConnected();
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java
index fa2dd887bd3d1..3a738d23f4521 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/BluetoothMediaManager.java
@@ -41,6 +41,9 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
private static final String TAG = "BluetoothMediaManager";
+ private final DeviceAttributeChangeCallback mDeviceAttributeChangeCallback =
+ new DeviceAttributeChangeCallback();
+
private LocalBluetoothManager mLocalBluetoothManager;
private LocalBluetoothProfileManager mProfileManager;
private CachedBluetoothDeviceManager mCachedBluetoothDeviceManager;
@@ -65,7 +68,10 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
mLocalBluetoothManager.getEventManager().registerCallback(this);
buildBluetoothDeviceList();
dispatchDeviceListAdded();
+ addServiceListenerIfNecessary();
+ }
+ private void addServiceListenerIfNecessary() {
// The profile may not ready when calling startScan().
// Device status are all disconnected since profiles are not ready to connected.
// In this case, we observe onServiceConnected() in LocalBluetoothProfileManager.
@@ -78,18 +84,18 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
private void buildBluetoothDeviceList() {
mMediaDevices.clear();
- addConnectedA2dpDevices();
- addConnectedHearingAidDevices();
+ addConnectableA2dpDevices();
+ addConnectableHearingAidDevices();
}
- private void addConnectedA2dpDevices() {
+ private void addConnectableA2dpDevices() {
final A2dpProfile a2dpProfile = mProfileManager.getA2dpProfile();
if (a2dpProfile == null) {
- Log.w(TAG, "addConnectedA2dpDevices() a2dp profile is null!");
+ Log.w(TAG, "addConnectableA2dpDevices() a2dp profile is null!");
return;
}
- final List devices = a2dpProfile.getConnectedDevices();
+ final List devices = a2dpProfile.getConnectableDevices();
for (BluetoothDevice device : devices) {
final CachedBluetoothDevice cachedDevice =
@@ -100,10 +106,12 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
continue;
}
- Log.d(TAG, "addConnectedA2dpDevices() device : " + cachedDevice.getName()
- + ", is connected : " + cachedDevice.isConnected());
+ Log.d(TAG, "addConnectableA2dpDevices() device : " + cachedDevice.getName()
+ + ", is connected : " + cachedDevice.isConnected()
+ + ", is preferred : " + a2dpProfile.isPreferred(device));
- if (cachedDevice.isConnected()) {
+ if (a2dpProfile.isPreferred(device)
+ && BluetoothDevice.BOND_BONDED == cachedDevice.getBondState()) {
addMediaDevice(cachedDevice);
}
}
@@ -111,15 +119,15 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
mIsA2dpProfileReady = a2dpProfile.isProfileReady();
}
- private void addConnectedHearingAidDevices() {
+ private void addConnectableHearingAidDevices() {
final HearingAidProfile hapProfile = mProfileManager.getHearingAidProfile();
if (hapProfile == null) {
- Log.w(TAG, "addConnectedA2dpDevices() hap profile is null!");
+ Log.w(TAG, "addConnectableHearingAidDevices() hap profile is null!");
return;
}
final List devicesHiSyncIds = new ArrayList<>();
- final List devices = hapProfile.getConnectedDevices();
+ final List devices = hapProfile.getConnectableDevices();
for (BluetoothDevice device : devices) {
final CachedBluetoothDevice cachedDevice =
@@ -130,13 +138,16 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
continue;
}
- Log.d(TAG, "addConnectedHearingAidDevices() device : " + cachedDevice.getName()
- + ", is connected : " + cachedDevice.isConnected());
+ Log.d(TAG, "addConnectableHearingAidDevices() device : " + cachedDevice.getName()
+ + ", is connected : " + cachedDevice.isConnected()
+ + ", is preferred : " + hapProfile.isPreferred(device));
+
final long hiSyncId = hapProfile.getHiSyncId(device);
// device with same hiSyncId should not be shown in the UI.
// So do not add it into connectedDevices.
- if (!devicesHiSyncIds.contains(hiSyncId) && cachedDevice.isConnected()) {
+ if (!devicesHiSyncIds.contains(hiSyncId) && hapProfile.isPreferred(device)
+ && BluetoothDevice.BOND_BONDED == cachedDevice.getBondState()) {
devicesHiSyncIds.add(hiSyncId);
addMediaDevice(cachedDevice);
}
@@ -149,6 +160,7 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
MediaDevice mediaDevice = findMediaDevice(MediaDeviceUtils.getId(cachedDevice));
if (mediaDevice == null) {
mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice);
+ cachedDevice.registerCallback(mDeviceAttributeChangeCallback);
mLastAddedDevice = mediaDevice;
mMediaDevices.add(mediaDevice);
}
@@ -157,6 +169,14 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
@Override
public void stopScan() {
mLocalBluetoothManager.getEventManager().unregisterCallback(this);
+ unregisterDeviceAttributeChangeCallback();
+ }
+
+ private void unregisterDeviceAttributeChangeCallback() {
+ for (MediaDevice device : mMediaDevices) {
+ ((BluetoothMediaDevice) device).getCachedDevice()
+ .unregisterCallback(mDeviceAttributeChangeCallback);
+ }
}
@Override
@@ -164,12 +184,13 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
if (BluetoothAdapter.STATE_ON == bluetoothState) {
buildBluetoothDeviceList();
dispatchDeviceListAdded();
+ addServiceListenerIfNecessary();
} else if (BluetoothAdapter.STATE_OFF == bluetoothState) {
final List removeDevicesList = new ArrayList<>();
for (MediaDevice device : mMediaDevices) {
- if (device instanceof BluetoothMediaDevice) {
- removeDevicesList.add(device);
- }
+ ((BluetoothMediaDevice) device).getCachedDevice()
+ .unregisterCallback(mDeviceAttributeChangeCallback);
+ removeDevicesList.add(device);
}
mMediaDevices.removeAll(removeDevicesList);
dispatchDeviceListRemoved(removeDevicesList);
@@ -212,6 +233,7 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
private void removeMediaDevice(CachedBluetoothDevice cachedDevice) {
final MediaDevice mediaDevice = findMediaDevice(MediaDeviceUtils.getId(cachedDevice));
if (mediaDevice != null) {
+ cachedDevice.unregisterCallback(mDeviceAttributeChangeCallback);
mLastRemovedDevice = mediaDevice;
mMediaDevices.remove(mediaDevice);
}
@@ -230,12 +252,17 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
Log.d(TAG, "onProfileConnectionStateChanged() device: " + cachedDevice
+ ", state: " + state + ", bluetoothProfile: " + bluetoothProfile);
- if (isCachedDeviceConnected(cachedDevice)) {
- addMediaDevice(cachedDevice);
- dispatchDeviceAdded(cachedDevice);
- } else {
+ updateMediaDeviceListIfNecessary(cachedDevice);
+ }
+
+ private void updateMediaDeviceListIfNecessary(CachedBluetoothDevice cachedDevice) {
+ if (BluetoothDevice.BOND_NONE == cachedDevice.getBondState()) {
removeMediaDevice(cachedDevice);
dispatchDeviceRemoved(cachedDevice);
+ } else {
+ if (findMediaDevice(MediaDeviceUtils.getId(cachedDevice)) != null) {
+ dispatchDataChanged();
+ }
}
}
@@ -243,13 +270,7 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
public void onAclConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
Log.d(TAG, "onAclConnectionStateChanged() device: " + cachedDevice + ", state: " + state);
- if (isCachedDeviceConnected(cachedDevice)) {
- addMediaDevice(cachedDevice);
- dispatchDeviceAdded(cachedDevice);
- } else {
- removeMediaDevice(cachedDevice);
- dispatchDeviceRemoved(cachedDevice);
- }
+ updateMediaDeviceListIfNecessary(cachedDevice);
}
@Override
@@ -281,4 +302,16 @@ public class BluetoothMediaManager extends MediaManager implements BluetoothCall
public void onServiceDisconnected() {
}
+
+ /**
+ * This callback is for update {@link BluetoothMediaDevice} summary when
+ * {@link CachedBluetoothDevice} connection state is changed.
+ */
+ private class DeviceAttributeChangeCallback implements CachedBluetoothDevice.Callback {
+
+ @Override
+ public void onDeviceAttributesChanged() {
+ dispatchDataChanged();
+ }
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
index 99d9d1c71e0e7..95f3d3d0f7693 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaDevice.java
@@ -40,6 +40,11 @@ public class InfoMediaDevice extends MediaDevice {
return mRouteInfo.getName();
}
+ @Override
+ public String getSummary() {
+ return null;
+ }
+
@Override
public int getIcon() {
//TODO(b/121083246): This is not final icon for cast device, just for demo.
@@ -63,4 +68,9 @@ public class InfoMediaDevice extends MediaDevice {
public void disconnect() {
//TODO(b/121083246): disconnected last select device
}
+
+ @Override
+ public boolean isConnected() {
+ return true;
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
index 44d945a9ee0e2..4e16c66d736ba 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java
@@ -58,7 +58,6 @@ public class LocalMediaManager implements BluetoothCallback {
private Context mContext;
private BluetoothMediaManager mBluetoothMediaManager;
- private InfoMediaManager mInfoMediaManager;
private LocalBluetoothManager mLocalBluetoothManager;
@VisibleForTesting
@@ -97,7 +96,6 @@ public class LocalMediaManager implements BluetoothCallback {
mBluetoothMediaManager =
new BluetoothMediaManager(context, mLocalBluetoothManager, notification);
- mInfoMediaManager = new InfoMediaManager(context, packageName, notification);
}
@VisibleForTesting
@@ -106,7 +104,6 @@ public class LocalMediaManager implements BluetoothCallback {
mContext = context;
mLocalBluetoothManager = localBluetoothManager;
mBluetoothMediaManager = bluetoothMediaManager;
- mInfoMediaManager = infoMediaManager;
}
/**
@@ -115,6 +112,15 @@ public class LocalMediaManager implements BluetoothCallback {
*/
public void connectDevice(MediaDevice connectDevice) {
final MediaDevice device = getMediaDeviceById(mMediaDevices, connectDevice.getId());
+ if (device instanceof BluetoothMediaDevice) {
+ final CachedBluetoothDevice cachedDevice =
+ ((BluetoothMediaDevice) device).getCachedDevice();
+ if (!cachedDevice.isConnected() && !cachedDevice.isBusy()) {
+ cachedDevice.connect(true);
+ return;
+ }
+ }
+
if (device == mCurrentConnectedDevice) {
Log.d(TAG, "connectDevice() this device all ready connected! : " + device.getName());
return;
@@ -150,9 +156,7 @@ public class LocalMediaManager implements BluetoothCallback {
public void startScan() {
mMediaDevices.clear();
mBluetoothMediaManager.registerCallback(mMediaDeviceCallback);
- mInfoMediaManager.registerCallback(mMediaDeviceCallback);
mBluetoothMediaManager.startScan();
- mInfoMediaManager.startScan();
}
private void addPhoneDeviceIfNecessary() {
@@ -186,9 +190,7 @@ public class LocalMediaManager implements BluetoothCallback {
*/
public void stopScan() {
mBluetoothMediaManager.unregisterCallback(mMediaDeviceCallback);
- mInfoMediaManager.unregisterCallback(mMediaDeviceCallback);
mBluetoothMediaManager.stopScan();
- mInfoMediaManager.stopScan();
}
/**
@@ -252,9 +254,17 @@ public class LocalMediaManager implements BluetoothCallback {
}
addPhoneDeviceIfNecessary();
mCurrentConnectedDevice = updateCurrentConnectedDevice();
+ updatePhoneMediaDeviceSummary();
dispatchDeviceListUpdate();
}
+ private void updatePhoneMediaDeviceSummary() {
+ if (mPhoneDevice != null) {
+ ((PhoneMediaDevice) mPhoneDevice)
+ .updateSummary(mCurrentConnectedDevice == mPhoneDevice);
+ }
+ }
+
@Override
public void onDeviceRemoved(MediaDevice device) {
if (mMediaDevices.contains(device)) {
@@ -271,22 +281,23 @@ public class LocalMediaManager implements BluetoothCallback {
dispatchDeviceListUpdate();
}
- @Override
- public void onDeviceAttributesChanged() {
- dispatchDeviceListUpdate();
- }
-
@Override
public void onConnectedDeviceChanged(String id) {
final MediaDevice connectDevice = getMediaDeviceById(mMediaDevices, id);
if (connectDevice == mCurrentConnectedDevice) {
- Log.d(TAG, "onConnectedDeviceChanged() this device all ready connected! : "
- + connectDevice.getName());
+ Log.d(TAG, "onConnectedDeviceChanged() this device all ready connected!");
return;
}
mCurrentConnectedDevice = connectDevice;
+ updatePhoneMediaDeviceSummary();
+ dispatchDeviceListUpdate();
+ }
+ @Override
+ public void onDeviceAttributesChanged() {
+ addPhoneDeviceIfNecessary();
+ removePhoneMediaDeviceIfNecessary();
dispatchDeviceListUpdate();
}
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
index f35c30edd16af..9b9e80310c18d 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java
@@ -34,9 +34,9 @@ public abstract class MediaDevice implements Comparable {
MediaDeviceType.TYPE_BLUETOOTH_DEVICE,
MediaDeviceType.TYPE_PHONE_DEVICE})
public @interface MediaDeviceType {
- int TYPE_CAST_DEVICE = 1;
- int TYPE_BLUETOOTH_DEVICE = 2;
- int TYPE_PHONE_DEVICE = 3;
+ int TYPE_PHONE_DEVICE = 1;
+ int TYPE_CAST_DEVICE = 2;
+ int TYPE_BLUETOOTH_DEVICE = 3;
}
private int mConnectedRecord;
@@ -62,6 +62,13 @@ public abstract class MediaDevice implements Comparable {
*/
public abstract String getName();
+ /**
+ * Get summary from MediaDevice.
+ *
+ * @return summary of MediaDevice.
+ */
+ public abstract String getSummary();
+
/**
* Get resource id of MediaDevice.
*
@@ -93,6 +100,13 @@ public abstract class MediaDevice implements Comparable {
*/
public abstract void disconnect();
+ /**
+ * According the MediaDevice type to check whether we are connected to this MediaDevice.
+ *
+ * @return Whether it is connected.
+ */
+ public abstract boolean isConnected();
+
/**
* Rules:
* 1. If there is one of the connected devices identified as a carkit, this carkit will
@@ -103,9 +117,11 @@ public abstract class MediaDevice implements Comparable {
* 3. For devices with usage record.
* The most recent used one + device group with usage info sorted by how many times the
* device has been used.
+ * 4. Phone device always in the top and the connected Bluetooth devices, cast devices and
+ * phone device will be always above on the disconnect Bluetooth devices.
*
- * So the device list will look like 4 slots ranked as below.
- * Rule 1 + the most recently used device + Rule 3 + Rule 2
+ * 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
* Any slot could be empty. And available device will belong to one of the slots.
*
* @return a negative integer, zero, or a positive integer
@@ -113,6 +129,21 @@ public abstract class MediaDevice implements Comparable {
*/
@Override
public int compareTo(MediaDevice another) {
+ // Check Bluetooth device is have same connection state
+ if (isConnected() ^ another.isConnected()) {
+ if (isConnected()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ }
+
+ // Phone device always in the top.
+ if (mType == MediaDeviceType.TYPE_PHONE_DEVICE) {
+ return -1;
+ } else if (another.mType == MediaDeviceType.TYPE_PHONE_DEVICE) {
+ return 1;
+ }
// Check carkit
if (isCarKitDevice()) {
return -1;
@@ -138,7 +169,7 @@ public abstract class MediaDevice implements Comparable {
final String s2 = another.getName();
return s1.compareToIgnoreCase(s2);
}
- // Both devices have never been used, the priority is Cast > Bluetooth > Phone
+ // Both devices have never been used, the priority is Phone > Cast > Bluetooth
return mType - another.mType;
}
@@ -149,4 +180,13 @@ public abstract class MediaDevice implements Comparable {
protected boolean isCarKitDevice() {
return false;
}
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof MediaDevice)) {
+ return false;
+ }
+ final MediaDevice otherDevice = (MediaDevice) obj;
+ return otherDevice.getId().equals(getId());
+ }
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java
index 2c3a96cafa562..7898982bccbc8 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/MediaManager.java
@@ -117,6 +117,14 @@ public abstract class MediaManager {
}
}
+ protected void dispatchDataChanged() {
+ synchronized (mCallbacks) {
+ for (MediaDeviceCallback callback : mCallbacks) {
+ callback.onDeviceAttributesChanged();
+ }
+ }
+ }
+
/**
* Callback for notifying device is added, removed and attributes changed.
*/
@@ -149,16 +157,17 @@ public abstract class MediaManager {
*/
void onDeviceListRemoved(List devices);
- /**
- * Callback for notifying MediaDevice attributes is changed.
- */
- void onDeviceAttributesChanged();
-
/**
* Callback for notifying connected MediaDevice is changed.
*
* @param id the id of MediaDevice
*/
void onConnectedDeviceChanged(String id);
+
+ /**
+ * Callback for notifying that MediaDevice attributes
+ * (e.g: device name, connection state, subtitle) is changed.
+ */
+ void onDeviceAttributesChanged();
}
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
index 8ec2a7f90f66f..da140aa9371ec 100644
--- a/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
+++ b/packages/SettingsLib/src/com/android/settingslib/media/PhoneMediaDevice.java
@@ -18,6 +18,7 @@ package com.android.settingslib.media;
import android.content.Context;
import android.util.Log;
+import com.android.settingslib.R;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -34,6 +35,7 @@ public class PhoneMediaDevice extends MediaDevice {
private LocalBluetoothProfileManager mProfileManager;
private LocalBluetoothManager mLocalBluetoothManager;
+ private String mSummary = "";
PhoneMediaDevice(Context context, LocalBluetoothManager localBluetoothManager) {
super(context, MediaDeviceType.TYPE_PHONE_DEVICE);
@@ -45,14 +47,17 @@ public class PhoneMediaDevice extends MediaDevice {
@Override
public String getName() {
- return mContext
- .getString(com.android.settingslib.R.string.media_transfer_phone_device_name);
+ return mContext.getString(R.string.media_transfer_this_device_name);
+ }
+
+ @Override
+ public String getSummary() {
+ return mSummary;
}
@Override
public int getIcon() {
- //TODO(b/117129183): This is not final icon for phone device, just for demo.
- return com.android.internal.R.drawable.ic_phone;
+ return R.drawable.ic_smartphone;
}
@Override
@@ -69,6 +74,7 @@ public class PhoneMediaDevice extends MediaDevice {
if (hapProfile != null && a2dpProfile != null) {
isConnected = hapProfile.setActiveDevice(null) && a2dpProfile.setActiveDevice(null);
+ updateSummary(true);
setConnectedRecord();
}
Log.d(TAG, "connect() device : " + getName() + ", is selected : " + isConnected);
@@ -77,6 +83,20 @@ public class PhoneMediaDevice extends MediaDevice {
@Override
public void disconnect() {
- //TODO(b/117129183): disconnected last select device
+ updateSummary(false);
+ }
+
+ @Override
+ public boolean isConnected() {
+ return true;
+ }
+
+ /**
+ * According current active device is {@link PhoneMediaDevice} or not to update summary.
+ */
+ public void updateSummary(boolean isActive) {
+ mSummary = isActive
+ ? mContext.getString(R.string.bluetooth_active_no_battery_level)
+ : "";
}
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
index e5d1b18177263..e0e2fd6860ffc 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaDeviceTest.java
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
+import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
@@ -66,4 +67,20 @@ public class BluetoothMediaDeviceTest {
assertThat(mBluetoothMediaDevice.connect()).isFalse();
}
+
+ @Test
+ public void isCachedBluetoothDeviceConnected_deviceConnected_returnTrue() {
+ when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mDevice.isConnected()).thenReturn(true);
+
+ assertThat(mBluetoothMediaDevice.isConnected()).isTrue();
+ }
+
+ @Test
+ public void isCachedBluetoothDeviceConnected_deviceNotConnected_returnFalse() {
+ when(mDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mDevice.isConnected()).thenReturn(false);
+
+ assertThat(mBluetoothMediaDevice.isConnected()).isFalse();
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaManagerTest.java
index a20e22bb4f26a..48449f20699d5 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/BluetoothMediaManagerTest.java
@@ -87,15 +87,16 @@ public class BluetoothMediaManagerTest {
}
@Test
- public void startScan_haveA2dpProfileConnectedBluetoothDevice_shouldAddDevice() {
+ public void startScan_haveA2dpProfileDeviceIsPreferredAndBonded_shouldAddDevice() {
final List devices = new ArrayList<>();
final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
devices.add(bluetoothDevice);
- when(mA2dpProfile.getConnectedDevices()).thenReturn(devices);
+ when(mA2dpProfile.getConnectableDevices()).thenReturn(devices);
when(mCachedDeviceManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
- when(cachedDevice.isConnected()).thenReturn(true);
+ when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mA2dpProfile.isPreferred(bluetoothDevice)).thenReturn(true);
assertThat(mMediaManager.mMediaDevices).isEmpty();
mMediaManager.startScan();
@@ -103,15 +104,16 @@ public class BluetoothMediaManagerTest {
}
@Test
- public void startScan_haveA2dpProfileDisconnectedBluetoothDevice_shouldNotAddDevice() {
+ public void startScan_haveA2dpProfileDeviceIsPreferredAndBondNone_shouldNotAddDevice() {
final List devices = new ArrayList<>();
final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
devices.add(bluetoothDevice);
- when(mA2dpProfile.getConnectedDevices()).thenReturn(devices);
+ when(mA2dpProfile.getConnectableDevices()).thenReturn(devices);
when(mCachedDeviceManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
- when(cachedDevice.isConnected()).thenReturn(false);
+ when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_NONE);
+ when(mA2dpProfile.isPreferred(bluetoothDevice)).thenReturn(true);
assertThat(mMediaManager.mMediaDevices).isEmpty();
mMediaManager.startScan();
@@ -122,7 +124,7 @@ public class BluetoothMediaManagerTest {
public void startScan_noA2dpProfileBluetoothDevice_shouldNotAddDevice() {
final List devices = new ArrayList<>();
- when(mA2dpProfile.getConnectedDevices()).thenReturn(devices);
+ when(mA2dpProfile.getConnectableDevices()).thenReturn(devices);
assertThat(mMediaManager.mMediaDevices).isEmpty();
mMediaManager.startScan();
@@ -130,15 +132,16 @@ public class BluetoothMediaManagerTest {
}
@Test
- public void startScan_haveHapProfileConnectedBluetoothDevice_shouldAddDevice() {
+ public void startScan_haveHapProfileDeviceIsPreferredAndBonded_shouldAddDevice() {
final List devices = new ArrayList<>();
final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
final BluetoothDevice bluetoothDevice = mock(BluetoothDevice.class);
devices.add(bluetoothDevice);
- when(mHapProfile.getConnectedDevices()).thenReturn(devices);
+ when(mHapProfile.getConnectableDevices()).thenReturn(devices);
when(mCachedDeviceManager.findDevice(bluetoothDevice)).thenReturn(cachedDevice);
- when(cachedDevice.isConnected()).thenReturn(true);
+ when(cachedDevice.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mHapProfile.isPreferred(bluetoothDevice)).thenReturn(true);
assertThat(mMediaManager.mMediaDevices).isEmpty();
mMediaManager.startScan();
@@ -149,7 +152,7 @@ public class BluetoothMediaManagerTest {
public void startScan_noHapProfileBluetoothDevice_shouldNotAddDevice() {
final List devices = new ArrayList<>();
- when(mHapProfile.getConnectedDevices()).thenReturn(devices);
+ when(mHapProfile.getConnectableDevices()).thenReturn(devices);
assertThat(mMediaManager.mMediaDevices).isEmpty();
mMediaManager.startScan();
@@ -230,9 +233,14 @@ public class BluetoothMediaManagerTest {
public void onBluetoothStateChanged_bluetoothStateIsOff_callOnDeviceListRemoved() {
final BluetoothMediaDevice device1 = mock(BluetoothMediaDevice.class);
final BluetoothMediaDevice device2 = mock(BluetoothMediaDevice.class);
+ final CachedBluetoothDevice cachedDevice1 = mock(CachedBluetoothDevice.class);
+ final CachedBluetoothDevice cachedDevice2 = mock(CachedBluetoothDevice.class);
mMediaManager.mMediaDevices.add(device1);
mMediaManager.mMediaDevices.add(device2);
+ when(device1.getCachedDevice()).thenReturn(cachedDevice1);
+ when(device2.getCachedDevice()).thenReturn(cachedDevice2);
+
mMediaManager.registerCallback(mCallback);
mMediaManager.onBluetoothStateChanged(BluetoothAdapter.STATE_OFF);
@@ -311,28 +319,30 @@ public class BluetoothMediaManagerTest {
}
@Test
- public void onProfileConnectionStateChanged_cachedDeviceIsConnect_callOnDeviceAdded() {
- final CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
-
- when(device.isConnectedHearingAidDevice()).thenReturn(true);
- when(device.isConnectedA2dpDevice()).thenReturn(true);
-
- assertThat(mMediaManager.mMediaDevices).isEmpty();
- mMediaManager.registerCallback(mCallback);
- mMediaManager.onProfileConnectionStateChanged(device, 0, 0);
-
- assertThat(mMediaManager.mMediaDevices).hasSize(1);
- verify(mCallback).onDeviceAdded(any());
- }
-
- @Test
- public void onProfileConnectionStateChanged_cachedDeviceIsDisconnect_callOnDeviceRemoved() {
+ public void onProfileConnectionStateChanged_cachedDeviceIsBonded_callDeviceAttributesChanged() {
final CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
final BluetoothMediaDevice bluetoothMediaDevice = mock(BluetoothMediaDevice.class);
mMediaManager.mMediaDevices.add(bluetoothMediaDevice);
- when(device.isConnectedHearingAidDevice()).thenReturn(false);
- when(device.isConnectedA2dpDevice()).thenReturn(false);
+ when(device.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(device.getAddress()).thenReturn(TEST_ADDRESS);
+ when(bluetoothMediaDevice.getId()).thenReturn(TEST_ADDRESS);
+
+ assertThat(mMediaManager.mMediaDevices).hasSize(1);
+ mMediaManager.registerCallback(mCallback);
+ mMediaManager.onProfileConnectionStateChanged(device, 0, 0);
+
+ assertThat(mMediaManager.mMediaDevices).hasSize(1);
+ verify(mCallback).onDeviceAttributesChanged();
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_cachedDeviceIsBondNone_callOnDeviceRemoved() {
+ final CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
+ final BluetoothMediaDevice bluetoothMediaDevice = mock(BluetoothMediaDevice.class);
+ mMediaManager.mMediaDevices.add(bluetoothMediaDevice);
+
+ when(device.getBondState()).thenReturn(BluetoothDevice.BOND_NONE);
when(device.getAddress()).thenReturn(TEST_ADDRESS);
when(bluetoothMediaDevice.getId()).thenReturn(TEST_ADDRESS);
@@ -345,28 +355,30 @@ public class BluetoothMediaManagerTest {
}
@Test
- public void onAclConnectionStateChanged_cachedDeviceIsConnect_callOnDeviceAdded() {
- final CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
-
- when(device.isConnectedHearingAidDevice()).thenReturn(true);
- when(device.isConnectedA2dpDevice()).thenReturn(true);
-
- assertThat(mMediaManager.mMediaDevices).isEmpty();
- mMediaManager.registerCallback(mCallback);
- mMediaManager.onAclConnectionStateChanged(device, 0);
-
- assertThat(mMediaManager.mMediaDevices).hasSize(1);
- verify(mCallback).onDeviceAdded(any());
- }
-
- @Test
- public void onAclConnectionStateChanged_cachedDeviceIsDisconnect_callOnDeviceRemoved() {
+ public void onAclConnectionStateChanged_cachedDeviceIsBonded_callDeviceAttributesChanged() {
final CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
final BluetoothMediaDevice bluetoothMediaDevice = mock(BluetoothMediaDevice.class);
mMediaManager.mMediaDevices.add(bluetoothMediaDevice);
- when(device.isConnectedHearingAidDevice()).thenReturn(false);
- when(device.isConnectedA2dpDevice()).thenReturn(false);
+ when(device.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(device.getAddress()).thenReturn(TEST_ADDRESS);
+ when(bluetoothMediaDevice.getId()).thenReturn(TEST_ADDRESS);
+
+ assertThat(mMediaManager.mMediaDevices).hasSize(1);
+ mMediaManager.registerCallback(mCallback);
+ mMediaManager.onAclConnectionStateChanged(device, 0);
+
+ assertThat(mMediaManager.mMediaDevices).hasSize(1);
+ verify(mCallback).onDeviceAttributesChanged();
+ }
+
+ @Test
+ public void onAclConnectionStateChanged_cachedDeviceIsBondNone_callOnDeviceRemoved() {
+ final CachedBluetoothDevice device = mock(CachedBluetoothDevice.class);
+ final BluetoothMediaDevice bluetoothMediaDevice = mock(BluetoothMediaDevice.class);
+ mMediaManager.mMediaDevices.add(bluetoothMediaDevice);
+
+ when(device.getBondState()).thenReturn(BluetoothDevice.BOND_NONE);
when(device.getAddress()).thenReturn(TEST_ADDRESS);
when(bluetoothMediaDevice.getId()).thenReturn(TEST_ADDRESS);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
index 355681401b9a8..98bb74ad0718c 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/LocalMediaManagerTest.java
@@ -28,6 +28,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import com.android.settingslib.bluetooth.A2dpProfile;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
@@ -112,6 +113,23 @@ public class LocalMediaManagerTest {
eq(LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED));
}
+ @Test
+ public void connectDevice_bluetoothDeviceNotConnected_connectBluetoothDevice() {
+ final MediaDevice device = mock(BluetoothMediaDevice.class);
+ final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
+ mLocalMediaManager.mMediaDevices.add(device);
+
+ when(device.getId()).thenReturn(TEST_DEVICE_ID_1);
+ when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice);
+ when(cachedDevice.isConnected()).thenReturn(false);
+ when(cachedDevice.isBusy()).thenReturn(false);
+
+ mLocalMediaManager.registerCallback(mCallback);
+ mLocalMediaManager.connectDevice(device);
+
+ verify(cachedDevice).connect(true);
+ }
+
@Test
public void getMediaDeviceById_idExist_shouldReturnMediaDevice() {
final MediaDevice device1 = mock(MediaDevice.class);
@@ -321,15 +339,6 @@ public class LocalMediaManagerTest {
verify(mCallback).onDeviceListUpdate(any());
}
- @Test
- public void onDeviceAttributesChanged_shouldDispatchDeviceListUpdate() {
- mLocalMediaManager.registerCallback(mCallback);
-
- mLocalMediaManager.mMediaDeviceCallback.onDeviceAttributesChanged();
-
- verify(mCallback).onDeviceListUpdate(any());
- }
-
@Test
public void onConnectedDeviceChanged_connectedAndCurrentDeviceAreDifferent_notifyThemChanged() {
final MediaDevice device1 = mock(MediaDevice.class);
@@ -366,4 +375,13 @@ public class LocalMediaManagerTest {
verify(mCallback, never()).onDeviceListUpdate(any());
}
+
+ @Test
+ public void onDeviceAttributesChanged_shouldDispatchDeviceListUpdate() {
+ mLocalMediaManager.registerCallback(mCallback);
+
+ mLocalMediaManager.mMediaDeviceCallback.onDeviceAttributesChanged();
+
+ verify(mCallback).onDeviceListUpdate(any());
+ }
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java
index fc514f0ac25cb..23d2c74218cc4 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaDeviceTest.java
@@ -114,6 +114,12 @@ public class MediaDeviceTest {
when(mCachedDevice1.getDevice()).thenReturn(mDevice1);
when(mCachedDevice2.getDevice()).thenReturn(mDevice2);
when(mCachedDevice3.getDevice()).thenReturn(mDevice3);
+ when(mCachedDevice1.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mCachedDevice1.isConnected()).thenReturn(true);
+ when(mCachedDevice2.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mCachedDevice2.isConnected()).thenReturn(true);
+ when(mCachedDevice3.getBondState()).thenReturn(BluetoothDevice.BOND_BONDED);
+ when(mCachedDevice3.isConnected()).thenReturn(true);
when(mRouteInfo1.getId()).thenReturn(ROUTER_ID_1);
when(mRouteInfo2.getId()).thenReturn(ROUTER_ID_2);
when(mRouteInfo3.getId()).thenReturn(ROUTER_ID_3);
@@ -158,12 +164,25 @@ public class MediaDeviceTest {
}
@Test
- public void compareTo_carKit_phone_carKitFirst() {
+ public void compareTo_carKit_phone_phoneFirst() {
when(mDevice1.getBluetoothClass()).thenReturn(mCarkitClass);
- mMediaDevices.add(mPhoneMediaDevice);
mMediaDevices.add(mBluetoothMediaDevice1);
+ mMediaDevices.add(mPhoneMediaDevice);
+ assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
+ Collections.sort(mMediaDevices, COMPARATOR);
assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
+ }
+
+ @Test
+ public void compareTo_carKitIsDisConnected_nonCarKitBluetooth_nonCarKitBluetoothFirst() {
+ when(mDevice1.getBluetoothClass()).thenReturn(mHeadreeClass);
+ when(mDevice2.getBluetoothClass()).thenReturn(mCarkitClass);
+ when(mCachedDevice2.isConnected()).thenReturn(false);
+ mMediaDevices.add(mBluetoothMediaDevice1);
+ mMediaDevices.add(mBluetoothMediaDevice2);
+
+ assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
Collections.sort(mMediaDevices, COMPARATOR);
assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
}
@@ -178,6 +197,7 @@ public class MediaDeviceTest {
Collections.sort(mMediaDevices, COMPARATOR);
assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice2);
}
+
@Test
public void compareTo_connectionRecord_sortByRecord() {
mMediaDevices.add(mBluetoothMediaDevice1);
@@ -195,6 +215,25 @@ public class MediaDeviceTest {
assertThat(mMediaDevices.get(1)).isEqualTo(mBluetoothMediaDevice1);
}
+ @Test
+ public void compareTo_sortByRecord_connectedDeviceFirst() {
+ mMediaDevices.add(mBluetoothMediaDevice1);
+ mMediaDevices.add(mBluetoothMediaDevice2);
+ when(mCachedDevice2.isConnected()).thenReturn(false);
+
+ mBluetoothMediaDevice1.connect();
+ mBluetoothMediaDevice2.connect();
+ mBluetoothMediaDevice2.connect();
+ // Reset last selected record
+ ConnectionRecordManager.getInstance().setConnectionRecord(mContext, null, 0);
+
+ assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
+ assertThat(mMediaDevices.get(1)).isEqualTo(mBluetoothMediaDevice2);
+ Collections.sort(mMediaDevices, COMPARATOR);
+ assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
+ assertThat(mMediaDevices.get(1)).isEqualTo(mBluetoothMediaDevice2);
+ }
+
@Test
public void compareTo_info_bluetooth_infoFirst() {
mMediaDevices.add(mBluetoothMediaDevice1);
@@ -206,13 +245,13 @@ public class MediaDeviceTest {
}
@Test
- public void compareTo_bluetooth_phone_bluetoothFirst() {
- mMediaDevices.add(mPhoneMediaDevice);
+ public void compareTo_bluetooth_phone_phoneFirst() {
mMediaDevices.add(mBluetoothMediaDevice1);
+ mMediaDevices.add(mPhoneMediaDevice);
- assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
- Collections.sort(mMediaDevices, COMPARATOR);
assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
+ Collections.sort(mMediaDevices, COMPARATOR);
+ assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
}
@Test
@@ -235,6 +274,17 @@ public class MediaDeviceTest {
assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
}
+ @Test
+ public void compareTo_sortByAlphabet_connectDeviceFirst() {
+ mMediaDevices.add(mBluetoothMediaDevice2);
+ mMediaDevices.add(mBluetoothMediaDevice1);
+ when(mCachedDevice1.isConnected()).thenReturn(false);
+
+ assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice2);
+ Collections.sort(mMediaDevices, COMPARATOR);
+ assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice2);
+ }
+
// 1.mInfoMediaDevice1: Last Selected device
// 2.mBluetoothMediaDevice1: CarKit device
// 3.mInfoMediaDevice2: * 2 times usage
@@ -242,7 +292,7 @@ public class MediaDeviceTest {
// 5.mBluetoothMediaDevice2: * 2 times usage
// 6.mBluetoothMediaDevice3: * 1 time usage
// 7.mPhoneMediaDevice: * 0 time usage
- // Order: 2 -> 1 -> 3 -> 5 -> 4 -> 6 -> 7
+ // Order: 7 -> 2 -> 1 -> 3 -> 5 -> 4 -> 6
@Test
public void compareTo_mixedDevices_carKitFirst() {
when(mDevice1.getBluetoothClass()).thenReturn(mCarkitClass);
@@ -264,13 +314,55 @@ public class MediaDeviceTest {
mInfoMediaDevice1.connect();
Collections.sort(mMediaDevices, COMPARATOR);
- assertThat(mMediaDevices.get(0)).isEqualTo(mBluetoothMediaDevice1);
+ assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
+ assertThat(mMediaDevices.get(1)).isEqualTo(mBluetoothMediaDevice1);
+ assertThat(mMediaDevices.get(2)).isEqualTo(mInfoMediaDevice1);
+ assertThat(mMediaDevices.get(3)).isEqualTo(mInfoMediaDevice2);
+ assertThat(mMediaDevices.get(4)).isEqualTo(mBluetoothMediaDevice2);
+ assertThat(mMediaDevices.get(5)).isEqualTo(mInfoMediaDevice3);
+ assertThat(mMediaDevices.get(6)).isEqualTo(mBluetoothMediaDevice3);
+ }
+
+ // 1.mInfoMediaDevice1: Last Selected device
+ // 2.mBluetoothMediaDevice1: CarKit device not connected
+ // 3.mInfoMediaDevice2: * 2 times usage
+ // 4.mInfoMediaDevice3: * 1 time usage
+ // 5.mBluetoothMediaDevice2: * 4 times usage not connected
+ // 6.mBluetoothMediaDevice3: * 1 time usage
+ // 7.mPhoneMediaDevice: * 0 time usage
+ // Order: 7 -> 1 -> 3 -> 4 -> 6 -> 2 -> 5
+ @Test
+ public void compareTo_mixedDevices_connectDeviceFirst() {
+ when(mDevice1.getBluetoothClass()).thenReturn(mCarkitClass);
+ when(mDevice2.getBluetoothClass()).thenReturn(mHeadreeClass);
+ when(mDevice3.getBluetoothClass()).thenReturn(mHeadreeClass);
+ when(mCachedDevice1.isConnected()).thenReturn(false);
+ when(mCachedDevice2.isConnected()).thenReturn(false);
+ mMediaDevices.add(mBluetoothMediaDevice1);
+ mMediaDevices.add(mBluetoothMediaDevice2);
+ mMediaDevices.add(mBluetoothMediaDevice3);
+ mMediaDevices.add(mInfoMediaDevice1);
+ mMediaDevices.add(mInfoMediaDevice2);
+ mMediaDevices.add(mInfoMediaDevice3);
+ mMediaDevices.add(mPhoneMediaDevice);
+ mBluetoothMediaDevice3.connect();
+ mBluetoothMediaDevice2.connect();
+ mBluetoothMediaDevice2.connect();
+ mBluetoothMediaDevice2.connect();
+ mBluetoothMediaDevice2.connect();
+ mInfoMediaDevice3.connect();
+ mInfoMediaDevice2.connect();
+ mInfoMediaDevice2.connect();
+ mInfoMediaDevice1.connect();
+
+ Collections.sort(mMediaDevices, COMPARATOR);
+ assertThat(mMediaDevices.get(0)).isEqualTo(mPhoneMediaDevice);
assertThat(mMediaDevices.get(1)).isEqualTo(mInfoMediaDevice1);
assertThat(mMediaDevices.get(2)).isEqualTo(mInfoMediaDevice2);
- assertThat(mMediaDevices.get(3)).isEqualTo(mBluetoothMediaDevice2);
- assertThat(mMediaDevices.get(4)).isEqualTo(mInfoMediaDevice3);
- assertThat(mMediaDevices.get(5)).isEqualTo(mBluetoothMediaDevice3);
- assertThat(mMediaDevices.get(6)).isEqualTo(mPhoneMediaDevice);
+ assertThat(mMediaDevices.get(3)).isEqualTo(mInfoMediaDevice3);
+ assertThat(mMediaDevices.get(4)).isEqualTo(mBluetoothMediaDevice3);
+ assertThat(mMediaDevices.get(5)).isEqualTo(mBluetoothMediaDevice1);
+ assertThat(mMediaDevices.get(6)).isEqualTo(mBluetoothMediaDevice2);
}
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaManagerTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaManagerTest.java
index 98eccb506f63e..ead2be4d7b267 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaManagerTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/MediaManagerTest.java
@@ -110,6 +110,15 @@ public class MediaManagerTest {
verify(mCallback).onConnectedDeviceChanged(TEST_ID);
}
+ @Test
+ public void dispatchDataChanged_registerCallback_shouldDispatchCallback() {
+ mMediaManager.registerCallback(mCallback);
+
+ mMediaManager.dispatchDataChanged();
+
+ verify(mCallback).onDeviceAttributesChanged();
+ }
+
@Test
public void findMediaDevice_idExist_shouldReturnMediaDevice() {
mMediaManager.mMediaDevices.add(mDevice);
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java
index 5ba33f569e441..50a6a9d7be20c 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/media/PhoneMediaDeviceTest.java
@@ -23,6 +23,7 @@ import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
+import com.android.settingslib.R;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.HearingAidProfile;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
@@ -97,4 +98,19 @@ public class PhoneMediaDeviceTest {
assertThat(mPhoneMediaDevice.connect()).isFalse();
}
+
+ @Test
+ public void updateSummary_isActiveIsTrue_returnActiveString() {
+ mPhoneMediaDevice.updateSummary(true);
+
+ assertThat(mPhoneMediaDevice.getSummary())
+ .isEqualTo(mContext.getString(R.string.bluetooth_active_no_battery_level));
+ }
+
+ @Test
+ public void updateSummary_notActive_returnEmpty() {
+ mPhoneMediaDevice.updateSummary(false);
+
+ assertThat(mPhoneMediaDevice.getSummary()).isEmpty();
+ }
}