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

Commit 8cec3a87 authored by William Escande's avatar William Escande
Browse files

Trunk stable flag for AutoConnect multi HFP feature

Bug: 305867804
Test: atest PhonePolicyTest
Change-Id: I46c1948df6f8ef929bbf898c9714e82fa3841a43
parent 02969b9e
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -675,7 +675,9 @@ public class AdapterService extends Service {
        mSdpManager = SdpManager.init(this);
        loadLeAudioAllowDevices();

        mDatabaseManager = new DatabaseManager(this);
        FeatureFlagsImpl featureFlags = new FeatureFlagsImpl();

        mDatabaseManager = new DatabaseManager(this, featureFlags);
        mDatabaseManager.start(MetadataDatabase.createDatabase(this));

        boolean isAutomotiveDevice =
@@ -691,7 +693,7 @@ public class AdapterService extends Service {
         */
        if (!isAutomotiveDevice && getResources().getBoolean(R.bool.enable_phone_policy)) {
            Log.i(TAG, "Phone policy enabled");
            mPhonePolicy = new PhonePolicy(this, new ServiceFactory(), new FeatureFlagsImpl());
            mPhonePolicy = new PhonePolicy(this, new ServiceFactory(), featureFlags);
            mPhonePolicy.start();
        } else {
            Log.i(TAG, "Phone policy disabled");
+1 −8
Original line number Diff line number Diff line
@@ -78,13 +78,6 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback {
    private static boolean sLeAudioEnabledByDefault = DeviceConfig.getBoolean(
            DeviceConfig.NAMESPACE_BLUETOOTH, CONFIG_LE_AUDIO_ENABLED_BY_DEFAULT, false);

    /** flag for multi auto connect */
    public static boolean sIsHfpMultiAutoConnectEnabled =
            DeviceConfig.getBoolean(
                    DeviceConfig.NAMESPACE_BLUETOOTH,
                    "com.android.bluetooth.hfp_multi_auto_connect",
                    false);

    // Timeouts
    @VisibleForTesting static int sConnectOtherProfilesTimeoutMillis = 6000; // 6s

@@ -627,7 +620,7 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback {
            return;
        }

        if (sIsHfpMultiAutoConnectEnabled) {
        if (mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) {
            final List<BluetoothDevice> mostRecentlyConnectedHfpDevices =
                    mDatabaseManager.getMostRecentlyActiveHfpDevices();
            for (BluetoothDevice hfpDevice : mostRecentlyConnectedHfpDevices) {
+8 −12
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ import android.util.Log;
import com.android.bluetooth.BluetoothStatsLog;
import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.PhonePolicy;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;

@@ -67,7 +67,8 @@ import java.util.stream.Collectors;
public class DatabaseManager {
    private static final String TAG = "BluetoothDatabase";

    private AdapterService mAdapterService = null;
    private final AdapterService mAdapterService;
    private final FeatureFlags mFeatureFlags;
    private HandlerThread mHandlerThread = null;
    private Handler mHandler = null;
    private final Object mDatabaseLock = new Object();
@@ -112,11 +113,10 @@ public class DatabaseManager {
    private static final String
            LEGACY_HEARING_AID_PRIORITY_PREFIX = "bluetooth_hearing_aid_priority_";

    /**
     * Constructor of the DatabaseManager
     */
    public DatabaseManager(AdapterService service) {
        mAdapterService = service;
    /** Constructor of the DatabaseManager */
    public DatabaseManager(AdapterService service, FeatureFlags featureFlags) {
        mAdapterService = Objects.requireNonNull(service, "Adapter service cannot be null");
        mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null");
        mMetadataChangedLog = EvictingQueue.create(METADATA_CHANGED_LOG_MAX_SIZE);
    }

@@ -648,7 +648,7 @@ public class DatabaseManager {
            if (isA2dpDevice) {
                resetActiveA2dpDevice();
            }
            if (isHfpDevice && !PhonePolicy.sIsHfpMultiAutoConnectEnabled) {
            if (isHfpDevice && !mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) {
                resetActiveHfpDevice();
            }

@@ -1034,10 +1034,6 @@ public class DatabaseManager {
     */
    public void start(MetadataDatabase database) {
        Log.d(TAG, "start()");
        if (mAdapterService == null) {
            Log.e(TAG, "stat failed, mAdapterService is null.");
            return;
        }

        if (database == null) {
            Log.e(TAG, "stat failed, database is null.");
+6 −3
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import com.android.bluetooth.TestUtils;
import com.android.bluetooth.Utils;
import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.flags.FakeFeatureFlagsImpl;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.hearingaid.HearingAidService;
import com.android.bluetooth.hfp.HeadsetService;
import com.android.bluetooth.le_audio.LeAudioService;
@@ -101,7 +103,8 @@ public class ActiveDeviceManagerTest {
        // Set up mocks and test assets
        MockitoAnnotations.initMocks(this);
        TestUtils.setAdapterService(mAdapterService);
        mDatabaseManager = new TestDatabaseManager(mAdapterService);

        mDatabaseManager = new TestDatabaseManager(mAdapterService, new FakeFeatureFlagsImpl());

        when(mAdapterService.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager);
        when(mAdapterService.getSystemServiceName(AudioManager.class))
@@ -1323,8 +1326,8 @@ public class ActiveDeviceManagerTest {
    private class TestDatabaseManager extends DatabaseManager {
        ArrayMap<BluetoothDevice, SparseIntArray> mProfileConnectionPolicy;

        TestDatabaseManager(AdapterService service) {
            super(service);
        TestDatabaseManager(AdapterService service, FeatureFlags featureFlags) {
            super(service, featureFlags);
            mProfileConnectionPolicy = new ArrayMap<>();
        }

+6 −3
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ import com.android.bluetooth.TestUtils;
import com.android.bluetooth.Utils;
import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.flags.FakeFeatureFlagsImpl;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.hearingaid.HearingAidService;
import com.android.bluetooth.hfp.HeadsetService;
import com.android.bluetooth.le_audio.LeAudioService;
@@ -99,7 +101,8 @@ public class AudioRoutingManagerTest {
        // Set up mocks and test assets
        MockitoAnnotations.initMocks(this);
        TestUtils.setAdapterService(mAdapterService);
        mDatabaseManager = new TestDatabaseManager(mAdapterService);

        mDatabaseManager = new TestDatabaseManager(mAdapterService, new FakeFeatureFlagsImpl());

        when(mAdapterService.getSystemService(Context.AUDIO_SERVICE)).thenReturn(mAudioManager);
        when(mAdapterService.getSystemServiceName(AudioManager.class))
@@ -1245,8 +1248,8 @@ public class AudioRoutingManagerTest {
    private class TestDatabaseManager extends DatabaseManager {
        ArrayMap<BluetoothDevice, SparseIntArray> mProfileConnectionPolicy;

        TestDatabaseManager(AdapterService service) {
            super(service);
        TestDatabaseManager(AdapterService service, FeatureFlags featureFlags) {
            super(service, featureFlags);
            mProfileConnectionPolicy = new ArrayMap<>();
        }

Loading