Merge "Fix Connect State message in Device details for Hearing Aids"
This commit is contained in:
@@ -110,6 +110,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
|
||||
mHiSyncId = id;
|
||||
}
|
||||
|
||||
public boolean isHearingAidDevice() {
|
||||
return mHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Last time a bt profile auto-connect was attempted.
|
||||
* If an ACTION_UUID intent comes in within
|
||||
@@ -144,8 +148,8 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
|
||||
|
||||
void onProfileStateChanged(LocalBluetoothProfile profile, int newProfileState) {
|
||||
if (Utils.D) {
|
||||
Log.d(TAG, "onProfileStateChanged: profile " + profile +
|
||||
" newProfileState " + newProfileState);
|
||||
Log.d(TAG, "onProfileStateChanged: profile " + profile + ", device=" + mDevice
|
||||
+ ", newProfileState " + newProfileState);
|
||||
}
|
||||
if (mLocalAdapter.getBluetoothState() == BluetoothAdapter.STATE_TURNING_OFF)
|
||||
{
|
||||
|
||||
@@ -162,14 +162,14 @@ public class CachedBluetoothDeviceManager {
|
||||
*/
|
||||
public synchronized String getHearingAidPairDeviceSummary(CachedBluetoothDevice device) {
|
||||
String pairDeviceSummary = null;
|
||||
if (device.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID) {
|
||||
for (CachedBluetoothDevice hearingAidDevice : mHearingAidDevicesNotAddedInCache) {
|
||||
if (hearingAidDevice.getHiSyncId() != BluetoothHearingAid.HI_SYNC_ID_INVALID
|
||||
&& hearingAidDevice.getHiSyncId() == device.getHiSyncId()) {
|
||||
pairDeviceSummary = hearingAidDevice.getConnectionSummary();
|
||||
}
|
||||
}
|
||||
CachedBluetoothDevice otherHearingAidDevice =
|
||||
getHearingAidOtherDevice(device, device.getHiSyncId());
|
||||
if (otherHearingAidDevice != null) {
|
||||
pairDeviceSummary = otherHearingAidDevice.getConnectionSummary();
|
||||
}
|
||||
log("getHearingAidPairDeviceSummary: pairDeviceSummary=" + pairDeviceSummary
|
||||
+ ", otherHearingAidDevice=" + otherHearingAidDevice);
|
||||
|
||||
return pairDeviceSummary;
|
||||
}
|
||||
|
||||
@@ -358,7 +358,7 @@ public class CachedBluetoothDeviceManager {
|
||||
}
|
||||
}
|
||||
|
||||
private CachedBluetoothDevice getHearingAidOtherDevice(CachedBluetoothDevice thisDevice,
|
||||
public CachedBluetoothDevice getHearingAidOtherDevice(CachedBluetoothDevice thisDevice,
|
||||
long hiSyncId) {
|
||||
if (hiSyncId == BluetoothHearingAid.HI_SYNC_ID_INVALID) {
|
||||
return null;
|
||||
|
||||
@@ -378,9 +378,10 @@ public class LocalBluetoothProfileManager {
|
||||
Log.i(TAG, "Failed to connect " + mProfile + " device");
|
||||
}
|
||||
|
||||
if (getHearingAidProfile() != null &&
|
||||
mProfile instanceof HearingAidProfile &&
|
||||
(newState == BluetoothProfile.STATE_CONNECTED)) {
|
||||
boolean isHearingAidProfile = (getHearingAidProfile() != null) &&
|
||||
(mProfile instanceof HearingAidProfile);
|
||||
|
||||
if (isHearingAidProfile && (newState == BluetoothProfile.STATE_CONNECTED)) {
|
||||
// Check if the HiSyncID has being initialized
|
||||
if (cachedDevice.getHiSyncId() == BluetoothHearingAid.HI_SYNC_ID_INVALID) {
|
||||
|
||||
@@ -393,10 +394,22 @@ public class LocalBluetoothProfileManager {
|
||||
}
|
||||
}
|
||||
|
||||
mEventManager.dispatchProfileConnectionStateChanged(cachedDevice, newState,
|
||||
mProfile.getProfileId());
|
||||
cachedDevice.onProfileStateChanged(mProfile, newState);
|
||||
cachedDevice.refresh();
|
||||
|
||||
if (isHearingAidProfile) {
|
||||
CachedBluetoothDevice otherDevice =
|
||||
mDeviceManager.getHearingAidOtherDevice(cachedDevice, cachedDevice.getHiSyncId());
|
||||
if (otherDevice != null) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Refreshing other hearing aid=" + otherDevice
|
||||
+ ", newState=" + newState);
|
||||
}
|
||||
otherDevice.refresh();
|
||||
}
|
||||
}
|
||||
mEventManager.dispatchProfileConnectionStateChanged(cachedDevice, newState,
|
||||
mProfile.getProfileId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -828,4 +828,20 @@ public class CachedBluetoothDeviceManagerTest {
|
||||
assertThat(cachedDevice2.isActiveDevice(BluetoothProfile.HEADSET)).isFalse();
|
||||
assertThat(cachedDevice2.isActiveDevice(BluetoothProfile.HEARING_AID)).isFalse();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test to verify getHearingAidOtherDevice() for hearing aid devices with same HiSyncId.
|
||||
*/
|
||||
@Test
|
||||
public void testGetHearingAidOtherDevice_bothHearingAidsPaired_returnsOtherDevice() {
|
||||
mCachedDevice1.setHiSyncId(HISYNCID1);
|
||||
mCachedDevice2.setHiSyncId(HISYNCID1);
|
||||
mCachedDeviceManager.mCachedDevices.add(mCachedDevice1);
|
||||
mCachedDeviceManager.mHearingAidDevicesNotAddedInCache.add(mCachedDevice2);
|
||||
doAnswer((invocation) -> DEVICE_SUMMARY_1).when(mCachedDevice1).getConnectionSummary();
|
||||
doAnswer((invocation) -> DEVICE_SUMMARY_2).when(mCachedDevice2).getConnectionSummary();
|
||||
|
||||
assertThat(mCachedDeviceManager.getHearingAidOtherDevice(mCachedDevice1, HISYNCID1))
|
||||
.isEqualTo(mCachedDevice2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import static org.robolectric.Shadows.shadowOf;
|
||||
|
||||
import android.bluetooth.BluetoothAdapter;
|
||||
import android.bluetooth.BluetoothDevice;
|
||||
import android.bluetooth.BluetoothHearingAid;
|
||||
import android.bluetooth.BluetoothProfile;
|
||||
import android.content.Context;
|
||||
import android.media.AudioManager;
|
||||
@@ -572,4 +573,16 @@ public class CachedBluetoothDeviceTest {
|
||||
|
||||
assertThat(mCachedDevice.isHfpDevice()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsHearingAidDevice_isHearingAidDevice() {
|
||||
mCachedDevice.setHiSyncId(0x1234);
|
||||
assertThat(mCachedDevice.isHearingAidDevice()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsHearingAidDevice_isNotHearingAidDevice() {
|
||||
mCachedDevice.setHiSyncId(BluetoothHearingAid.HI_SYNC_ID_INVALID);
|
||||
assertThat(mCachedDevice.isHearingAidDevice()).isFalse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.anyLong;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -51,6 +52,7 @@ import java.util.List;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(resourceDir = "../../res")
|
||||
public class LocalBluetoothProfileManagerTest {
|
||||
private final static long HI_SYNC_ID = 0x1234;
|
||||
@Mock
|
||||
private CachedBluetoothDeviceManager mDeviceManager;
|
||||
@Mock
|
||||
@@ -61,6 +63,8 @@ public class LocalBluetoothProfileManagerTest {
|
||||
private BluetoothDevice mDevice;
|
||||
@Mock
|
||||
private CachedBluetoothDevice mCachedBluetoothDevice;
|
||||
@Mock
|
||||
private CachedBluetoothDevice mHearingAidOtherDevice;
|
||||
|
||||
private Context mContext;
|
||||
private LocalBluetoothProfileManager mProfileManager;
|
||||
@@ -198,6 +202,32 @@ public class LocalBluetoothProfileManagerTest {
|
||||
BluetoothProfile.STATE_CONNECTED, BluetoothProfile.HEARING_AID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED with uuid intent will dispatch to
|
||||
* refresh both sides devices.
|
||||
*/
|
||||
@Test
|
||||
public void stateChangedHandler_receiveHAPConnectionStateChanged_shouldRefreshBothSides() {
|
||||
ArrayList<Integer> supportProfiles = new ArrayList<>();
|
||||
supportProfiles.add(BluetoothProfile.HEARING_AID);
|
||||
when(mAdapter.getSupportedProfiles()).thenReturn(supportProfiles);
|
||||
when(mCachedBluetoothDevice.getHiSyncId()).thenReturn(HI_SYNC_ID);
|
||||
when(mDeviceManager.getHearingAidOtherDevice(mCachedBluetoothDevice, HI_SYNC_ID))
|
||||
.thenReturn(mHearingAidOtherDevice);
|
||||
|
||||
mProfileManager = new LocalBluetoothProfileManager(mContext, mAdapter, mDeviceManager,
|
||||
mEventManager);
|
||||
mIntent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
|
||||
mIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
|
||||
mIntent.putExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, BluetoothProfile.STATE_CONNECTING);
|
||||
mIntent.putExtra(BluetoothProfile.EXTRA_STATE, BluetoothProfile.STATE_CONNECTED);
|
||||
|
||||
mContext.sendBroadcast(mIntent);
|
||||
|
||||
verify(mCachedBluetoothDevice).refresh();
|
||||
verify(mHearingAidOtherDevice).refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify BluetoothPan.ACTION_CONNECTION_STATE_CHANGED intent with uuid will dispatch to
|
||||
* profile connection state changed callback
|
||||
|
||||
Reference in New Issue
Block a user