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

Commit baf856e9 authored by William Escande's avatar William Escande Committed by Gerrit Code Review
Browse files

Merge "Autoconnect fallback on second audio profil"

parents cb5375fc 8c5f65ca
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ 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.hfp.HeadsetService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.modules.utils.SynchronousResultReceiver;
@@ -409,6 +410,14 @@ public class A2dpService extends ProfileService {
            return false;
        } else if (connectionPolicy != BluetoothProfile.CONNECTION_POLICY_UNKNOWN
                && connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
            if (!isOutgoingRequest) {
                HeadsetService headsetService = HeadsetService.getHeadsetService();
                if (headsetService != null && headsetService.okToAcceptConnection(device, true)) {
                    Log.d(TAG, "okToConnect: Fallback connection to allowed HFP profile");
                    headsetService.connect(device);
                    return true;
                }
            }
            // Otherwise, reject the connection if connectionPolicy is not valid.
            Log.w(TAG, "okToConnect: return false, connectionPolicy=" + connectionPolicy);
            return false;
+11 −1
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import android.util.Log;
import com.android.bluetooth.BluetoothMetricsProto;
import com.android.bluetooth.BluetoothStatsLog;
import com.android.bluetooth.Utils;
import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.MetricsLogger;
import com.android.bluetooth.btservice.ProfileService;
@@ -2040,7 +2041,7 @@ public class HeadsetService extends ProfileService {
     * @param device remote device that initiates the connection
     * @return true if the connection is acceptable
     */
    public boolean okToAcceptConnection(BluetoothDevice device) {
    public boolean okToAcceptConnection(BluetoothDevice device, boolean isOutgoingRequest) {
        // Check if this is an incoming connection in Quiet mode.
        if (mAdapterService.isQuietModeEnabled()) {
            Log.w(TAG, "okToAcceptConnection: return false as quiet mode enabled");
@@ -2057,6 +2058,15 @@ public class HeadsetService extends ProfileService {
        } else if (connectionPolicy != BluetoothProfile.CONNECTION_POLICY_UNKNOWN
                && connectionPolicy != BluetoothProfile.CONNECTION_POLICY_ALLOWED) {
            // Otherwise, reject the connection if connection policy is not valid.
            if (!isOutgoingRequest) {
                A2dpService a2dpService = A2dpService.getA2dpService();
                if (a2dpService != null && a2dpService.okToConnect(device, true)) {
                    Log.d(TAG, "okToAcceptConnection: return temporary true,"
                            + " Fallback connection to allowed A2DP profile");
                    a2dpService.connect(device);
                    return true;
                }
            }
            Log.w(TAG, "okToAcceptConnection: return false, connectionPolicy=" + connectionPolicy);
            return false;
        }
+1 −1
Original line number Diff line number Diff line
@@ -525,7 +525,7 @@ public class HeadsetStateMachine extends StateMachine {
                // Both events result in Connecting state as SLC establishment is still required
                case HeadsetHalConstants.CONNECTION_STATE_CONNECTED:
                case HeadsetHalConstants.CONNECTION_STATE_CONNECTING:
                    if (mHeadsetService.okToAcceptConnection(mDevice)) {
                    if (mHeadsetService.okToAcceptConnection(mDevice, false)) {
                        stateLogI("accept incoming connection");
                        transitionTo(mConnecting);
                    } else {
+1 −1
Original line number Diff line number Diff line
@@ -951,7 +951,7 @@ public class HeadsetServiceTest {
        doReturn(bondState).when(mAdapterService).getBondState(device);
        when(mDatabaseManager.getProfileConnectionPolicy(device, BluetoothProfile.HEADSET))
                .thenReturn(priority);
        Assert.assertEquals(expected, mHeadsetService.okToAcceptConnection(device));
        Assert.assertEquals(expected, mHeadsetService.okToAcceptConnection(device, false));
    }

}
+2 −1
Original line number Diff line number Diff line
@@ -123,7 +123,8 @@ public class HeadsetStateMachineTest {
        when(mHeadsetService.getConnectionPolicy(any(BluetoothDevice.class))).thenReturn(
                BluetoothProfile.CONNECTION_POLICY_ALLOWED);
        when(mHeadsetService.getForceScoAudio()).thenReturn(true);
        when(mHeadsetService.okToAcceptConnection(any(BluetoothDevice.class))).thenReturn(true);
        when(mHeadsetService.okToAcceptConnection(any(BluetoothDevice.class), anyBoolean()))
                .thenReturn(true);
        when(mHeadsetService.isScoAcceptable(any(BluetoothDevice.class))).thenReturn(
                BluetoothStatusCodes.SUCCESS);
        // Setup thread and looper