Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2bbcc6e9 authored by Stanley Tng's avatar Stanley Tng Committed by Hansong Zhang
Browse files

Fix Connect State message in Device details for Hearing Aids

In the Device details of Settings App and when using two Hearing Aids
devices (left and right sides), this will fix the connect state messages
for these two devices. Also added Robo tests for the changes.

Bug: 116317072
Bug: 117074814
Test: Manual tests and also ran RunSettingsLibRoboTests and RunSettingsRoboTests.
Change-Id: Ia9df6facd99ae91ebb4a819f61ea27551ce35efe
Merged-In: Id2dc364dfa815e72db91b92bcee9745e6c40d34a
Merged-In: Ia9df6facd99ae91ebb4a819f61ea27551ce35efe
(cherry picked from commit 3d8dd1ae2c5b7aad91594062e53ef3bc2db7212e)
parent 9c3f60d2
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -143,8 +143,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)
        {
@@ -224,6 +224,10 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
        connectWithoutResettingTimer(connectAllProfiles);
    }

    public boolean isHearingAidDevice() {
        return mHiSyncId != BluetoothHearingAid.HI_SYNC_ID_INVALID;
    }

    void onBondingDockConnect() {
        // Attempt to connect if UUIDs are available. Otherwise,
        // we will connect when the ACTION_UUID intent arrives.
+8 −8
Original line number Diff line number Diff line
@@ -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;
+18 −5
Original line number Diff line number Diff line
@@ -361,9 +361,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) {

@@ -376,10 +377,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());
        }
    }

+16 −0
Original line number Diff line number Diff line
@@ -835,4 +835,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);
    }
}
+13 −0
Original line number Diff line number Diff line
@@ -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;
@@ -611,4 +612,16 @@ public class CachedBluetoothDeviceTest {

        assertThat(mCachedDevice.isConnectedHearingAidDevice()).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();
    }
}
Loading