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

Commit 10ef83fe authored by Chen Chen's avatar Chen Chen
Browse files

BluetoothPhoneState: call clearSignalStrengthUpdateRequest() at the beginning...

BluetoothPhoneState: call clearSignalStrengthUpdateRequest() at the beginning of stopListenForPhoneState() to make sure it's always called.

Resolving issues introduced in aosp/1901910.

Per telecom's comment clearSignalStrengthUpdateRequest() must be called before setSignalStrengthUpdateRequest()

clearSignalStrengthUpdateRequest() is called in stopListenForPhoneState() while
setSignalStrengthUpdateRequest() is called in startListenForPhoneState().

In BluetoothPhoneState we make sure stopListenForPhoneState() is always called before startListenForPhoneState(). However, we may return early for stopListenForPhoneState() and clearSignalStrengthUpdateRequest() won't called.

Bug: 240179714
Test: atest BluetoothInstrumentationTests

Change-Id: I7aefcb9ab74d89d00aca67d807799dca7a12eb3c
parent 8e2934e1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -173,6 +173,7 @@ public class HeadsetPhoneState {

    private void stopListenForPhoneState() {
        synchronized (mPhoneStateListenerLock) {
            mTelephonyManager.clearSignalStrengthUpdateRequest(mSignalStrengthUpdateRequest);
            if (mPhoneStateListener == null) {
                Log.i(TAG, "stopListenForPhoneState(), no listener indicates nothing is listening");
                return;
@@ -181,7 +182,6 @@ public class HeadsetPhoneState {
                    + getTelephonyEventsToListen());
            mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
            mPhoneStateListener = null;
            mTelephonyManager.clearSignalStrengthUpdateRequest(mSignalStrengthUpdateRequest);
        }
    }

+8 −4
Original line number Diff line number Diff line
@@ -126,6 +126,8 @@ public class HeadsetPhoneStateTest {
        BluetoothDevice device1 = TestUtils.getTestDevice(mAdapter, 1);
        mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE);
        verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE));
        verify(mTelephonyManager).clearSignalStrengthUpdateRequest(
                any(SignalStrengthUpdateRequest.class));
        verifyNoMoreInteractions(mTelephonyManager);
    }

@@ -162,7 +164,7 @@ public class HeadsetPhoneStateTest {
        mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE);
        verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE));
        verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE));
        verify(mTelephonyManager).clearSignalStrengthUpdateRequest(
        verify(mTelephonyManager, times(2)).clearSignalStrengthUpdateRequest(
                any(SignalStrengthUpdateRequest.class));
    }

@@ -181,7 +183,7 @@ public class HeadsetPhoneStateTest {

        mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_NONE);
        verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE));
        verify(mTelephonyManager).clearSignalStrengthUpdateRequest(
        verify(mTelephonyManager, times(2)).clearSignalStrengthUpdateRequest(
                any(SignalStrengthUpdateRequest.class));
    }

@@ -210,7 +212,7 @@ public class HeadsetPhoneStateTest {
        // Disabling updates from second device should cancel subscription
        mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_NONE);
        verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_NONE));
        verify(mTelephonyManager).clearSignalStrengthUpdateRequest(
        verify(mTelephonyManager, times(2)).clearSignalStrengthUpdateRequest(
                any(SignalStrengthUpdateRequest.class));
    }

@@ -226,6 +228,8 @@ public class HeadsetPhoneStateTest {
        // Partially enabling updates from first device should trigger partial subscription
        mHeadsetPhoneState.listenForPhoneState(device1, PhoneStateListener.LISTEN_SERVICE_STATE);
        verify(mTelephonyManager).listen(any(), eq(PhoneStateListener.LISTEN_SERVICE_STATE));
        verify(mTelephonyManager).clearSignalStrengthUpdateRequest(
                any(SignalStrengthUpdateRequest.class));
        verifyNoMoreInteractions(mTelephonyManager);
        // Partially enabling updates from second device should trigger partial subscription
        mHeadsetPhoneState.listenForPhoneState(device2,
@@ -244,7 +248,7 @@ public class HeadsetPhoneStateTest {
        // Partially disabling updates from second device should cancel subscription
        mHeadsetPhoneState.listenForPhoneState(device2, PhoneStateListener.LISTEN_NONE);
        verify(mTelephonyManager, times(3)).listen(any(), eq(PhoneStateListener.LISTEN_NONE));
        verify(mTelephonyManager, times(3)).clearSignalStrengthUpdateRequest(
        verify(mTelephonyManager, times(4)).clearSignalStrengthUpdateRequest(
                any(SignalStrengthUpdateRequest.class));
    }
}