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

Commit 0a03e9b8 authored by Aritra Sen's avatar Aritra Sen
Browse files

Stop using HFP active device changed broadcast for SilenceDeviceManager.

Bug: 296932947
Test: atest BluetoothInstrumentationTests
Tag: #refactor
Change-Id: I9eef4745d6a4fe24e6c7f04baa9d21dcef0e45f4
parent b96d294b
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -99,10 +99,6 @@ public class SilenceDeviceManager {
                    mHandler.obtainMessage(MSG_HFP_CONNECTION_STATE_CHANGED,
                                           intent).sendToTarget();
                    break;
                case BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED:
                    mHandler.obtainMessage(MSG_HFP_ACTIVE_DEVICE_CHANGED,
                        intent).sendToTarget();
                    break;
                default:
                    Log.e(TAG, "Received unexpected intent, action=" + action);
                    break;
@@ -119,6 +115,15 @@ public class SilenceDeviceManager {
        mHandler.obtainMessage(MSG_A2DP_ACTIVE_DEVICE_CHANGED, device).sendToTarget();
    }

    /**
     * Called when HFP active device is changed by HeadsetService
     *
     * @param device The device currently activated. {@code null} if no HFP device activated
     */
    public void hfpActiveDeviceChanged(BluetoothDevice device) {
        mHandler.obtainMessage(MSG_HFP_ACTIVE_DEVICE_CHANGED, device).sendToTarget();
    }

    class SilenceDeviceManagerHandler extends Handler {
        SilenceDeviceManagerHandler(Looper looper) {
            super(looper);
@@ -193,20 +198,16 @@ public class SilenceDeviceManager {
                    }
                    break;

                case MSG_HFP_ACTIVE_DEVICE_CHANGED: {
                    Intent intent = (Intent) msg.obj;
                    BluetoothDevice hfpActiveDevice =
                            intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                case MSG_HFP_ACTIVE_DEVICE_CHANGED:
                    BluetoothDevice hfpActiveDevice = (BluetoothDevice) msg.obj;
                    if (getSilenceMode(hfpActiveDevice)) {
                        // Resume the device from silence mode.
                        setSilenceMode(hfpActiveDevice, false);
                    }
                }
                    break;

                default: {
                default:
                    Log.e(TAG, "Unknown message: " + msg.what);
                }
                    break;
            }
        }
@@ -227,7 +228,6 @@ public class SilenceDeviceManager {
        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
        filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
        filter.addAction(BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED);
        mAdapterService.registerReceiver(mReceiver, filter);
    }

+4 −0
Original line number Diff line number Diff line
@@ -2133,10 +2133,14 @@ public class HeadsetService extends ProfileService {

    private void broadcastActiveDevice(BluetoothDevice device) {
        logD("broadcastActiveDevice: " + device);

        mAdapterService.getActiveDeviceManager().hfpActiveStateChanged(device);
        mAdapterService.getSilenceDeviceManager().hfpActiveDeviceChanged(device);

        BluetoothStatsLog.write(BluetoothStatsLog.BLUETOOTH_ACTIVE_DEVICE_CHANGED,
                BluetoothProfile.HEADSET, mAdapterService.obfuscateAddress(device),
                mAdapterService.getMetricId(device));

        Intent intent = new Intent(BluetoothHeadset.ACTION_ACTIVE_DEVICE_CHANGED);
        intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
+4 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.btservice.ActiveDeviceManager;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.SilenceDeviceManager;
import com.android.bluetooth.btservice.storage.DatabaseManager;

import org.hamcrest.Matchers;
@@ -152,6 +153,7 @@ public class HeadsetServiceAndStateMachineTest {
    @Spy private HeadsetObjectsFactory mObjectsFactory = HeadsetObjectsFactory.getInstance();
    @Mock private AdapterService mAdapterService;
    @Mock private ActiveDeviceManager mActiveDeviceManager;
    @Mock private SilenceDeviceManager mSilenceDeviceManager;
    @Mock private DatabaseManager mDatabaseManager;
    @Mock private HeadsetSystemInterface mSystemInterface;
    @Mock private AudioManager mAudioManager;
@@ -187,6 +189,7 @@ public class HeadsetServiceAndStateMachineTest {
        doReturn(new BluetoothSinkAudioPolicy.Builder().build()).when(mAdapterService)
                .getRequestedAudioPolicyAsSink(any(BluetoothDevice.class));
        doReturn(mActiveDeviceManager).when(mAdapterService).getActiveDeviceManager();
        doReturn(mSilenceDeviceManager).when(mAdapterService).getSilenceDeviceManager();
        // Mock system interface
        doNothing().when(mSystemInterface).stop();
        doReturn(mPhoneState).when(mSystemInterface).getHeadsetPhoneState();
@@ -471,6 +474,7 @@ public class HeadsetServiceAndStateMachineTest {
        Assert.assertTrue(mHeadsetService.setActiveDevice(activeDevice));
        verify(mNativeInterface).setActiveDevice(activeDevice);
        verify(mActiveDeviceManager).hfpActiveStateChanged(activeDevice);
        verify(mSilenceDeviceManager).hfpActiveDeviceChanged(activeDevice);
        Assert.assertEquals(activeDevice, mHeadsetService.getActiveDevice());
        // Start virtual call
        Assert.assertTrue(mHeadsetService.startScoUsingVirtualVoiceCall());
+3 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.btservice.ActiveDeviceManager;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.SilenceDeviceManager;
import com.android.bluetooth.btservice.storage.DatabaseManager;

import org.hamcrest.Matchers;
@@ -94,6 +95,7 @@ public class HeadsetServiceTest {
    @Spy private HeadsetObjectsFactory mObjectsFactory = HeadsetObjectsFactory.getInstance();
    @Mock private AdapterService mAdapterService;
    @Mock private ActiveDeviceManager mActiveDeviceManager;
    @Mock private SilenceDeviceManager mSilenceDeviceManager;
    @Mock private DatabaseManager mDatabaseManager;
    @Mock private HeadsetSystemInterface mSystemInterface;
    @Mock private HeadsetNativeInterface mNativeInterface;
@@ -123,6 +125,7 @@ public class HeadsetServiceTest {
        doReturn(BluetoothDevice.BOND_BONDED).when(mAdapterService)
                .getBondState(any(BluetoothDevice.class));
        doReturn(mActiveDeviceManager).when(mAdapterService).getActiveDeviceManager();
        doReturn(mSilenceDeviceManager).when(mAdapterService).getSilenceDeviceManager();
        doReturn(mDatabaseManager).when(mAdapterService).getDatabase();
        doReturn(true, false).when(mAdapterService).isStartedProfile(anyString());
        doAnswer(invocation -> {
+4 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import androidx.test.runner.AndroidJUnit4;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.btservice.ActiveDeviceManager;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.SilenceDeviceManager;
import com.android.bluetooth.btservice.storage.DatabaseManager;

import org.hamcrest.core.IsInstanceOf;
@@ -87,6 +88,7 @@ public class HeadsetStateMachineTest {

    @Mock private AdapterService mAdapterService;
    @Mock private ActiveDeviceManager mActiveDeviceManager;
    @Mock private SilenceDeviceManager mSilenceDeviceManager;
    @Mock private DatabaseManager mDatabaseManager;
    @Mock private HeadsetService mHeadsetService;
    @Mock private HeadsetSystemInterface mSystemInterface;
@@ -114,6 +116,8 @@ public class HeadsetStateMachineTest {
        doReturn(true).when(mDatabaseManager).setAudioPolicyMetadata(anyObject(), anyObject());
        // Get an active device manager
        doReturn(mActiveDeviceManager).when(mAdapterService).getActiveDeviceManager();
        // Get a silence device manager
        doReturn(mSilenceDeviceManager).when(mAdapterService).getSilenceDeviceManager();
        doReturn(true).when(mNativeInterface).connectHfp(mTestDevice);
        doReturn(true).when(mNativeInterface).disconnectHfp(mTestDevice);
        doReturn(true).when(mNativeInterface).connectAudio(mTestDevice);