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

Commit 2e7636ea authored by Łukasz Rymanowski's avatar Łukasz Rymanowski
Browse files

HeadsetService: Improve LeAudio -> HFP call handover

With this patch, HeadsetService will set LeAudio inactive when HFP is
about to handover the call.
This will help to disconnect CISes faster and let SCO creation when
CISes are not there.

Bug: 242908683
Test: atest BluetoothInstrumentationTests
Tag: #feature
Change-Id: I8ad17df6c77141e24674735aa02a9a6d9b585078
parent c2477287
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -54,7 +54,9 @@ import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.MetricsLogger;
import com.android.bluetooth.btservice.ProfileService;
import com.android.bluetooth.btservice.ServiceFactory;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.le_audio.LeAudioService;
import com.android.bluetooth.telephony.BluetoothInCallService;
import com.android.internal.annotations.VisibleForTesting;
import com.android.modules.utils.SynchronousResultReceiver;
@@ -141,6 +143,8 @@ public class HeadsetService extends ProfileService {
    private boolean mCreated;
    private static HeadsetService sHeadsetService;

    private final ServiceFactory mFactory = new ServiceFactory();

    public static boolean isEnabled() {
        return BluetoothProperties.isProfileHfpAgEnabled().orElse(false);
    }
@@ -1378,6 +1382,15 @@ public class HeadsetService extends ProfileService {
                }
                broadcastActiveDevice(mActiveDevice);
            } else if (shouldPersistAudio()) {
                /* If HFP is getting active for a phonecall and there is LeAudio device active,
                 * Lets inactive LeAudio device as soon as possible so there is no CISes connected
                 * when SCO is created
                 */
                LeAudioService leAudioService = mFactory.getLeAudioService();
                if (leAudioService != null) {
                    Log.i(TAG, "Make sure there is no le audio device active.");
                    leAudioService.setActiveDevice(null);
                }
                broadcastActiveDevice(mActiveDevice);
                int connectStatus = connectAudio(mActiveDevice);
                if (connectStatus != BluetoothStatusCodes.SUCCESS) {