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

Commit 18e86e58 authored by William Escande's avatar William Escande
Browse files

Trunk Stable/AdapterService: Use static flagging

DatabaseManager / ActiveDeviceManager / AudioRoutingManager have a weird
dependency of the flagging and are easier to modified all at once

Bug: 323981134
Bug: 308171251
Bug: 305799237
Bug: 305867804
Test: m Bluetooth | mechanical refactor
Change-Id: I32e79051b6e4f5ec75f137ca3bfb9d1e5dd27304
parent 0276a84c
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@ import com.android.bluetooth.BluetoothMethodProxy;
import com.android.bluetooth.Utils;
import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.flags.Flags;
import com.android.bluetooth.hearingaid.HearingAidService;
import com.android.bluetooth.hfp.HeadsetService;
import com.android.bluetooth.le_audio.LeAudioService;
@@ -100,7 +100,7 @@ import java.util.Set;
 *      active Bluetooth device.
 */
public class ActiveDeviceManager implements AdapterService.BluetoothStateCallback {
    private static final String TAG = "ActiveDeviceManager";
    private static final String TAG = ActiveDeviceManager.class.getSimpleName();
    private static final boolean DBG = true;
    @VisibleForTesting
    static final int A2DP_HFP_SYNC_CONNECTION_TIMEOUT_MS = 5_000;
@@ -112,7 +112,6 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac
    private Handler mHandler = null;
    private final AudioManager mAudioManager;
    private final AudioManagerAudioDeviceCallback mAudioManagerAudioDeviceCallback;
    private final FeatureFlags mFeatureFlags;

    private final Object mLock = new Object();
    @GuardedBy("mLock")
@@ -811,10 +810,9 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac
        }
    }

    ActiveDeviceManager(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) {
    ActiveDeviceManager(AdapterService service, ServiceFactory factory) {
        mAdapterService = service;
        mDbManager = mAdapterService.getDatabase();
        mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null");
        mFactory = factory;
        mAudioManager = service.getSystemService(AudioManager.class);
        mAudioManagerAudioDeviceCallback = new AudioManagerAudioDeviceCallback();
@@ -987,7 +985,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac
            if (device == null) {
                success = leAudioService.removeActiveDevice(hasFallbackDevice);
            } else {
                if (mFeatureFlags.leaudioActiveDeviceManagerGroupHandlingFix()) {
                if (Flags.leaudioActiveDeviceManagerGroupHandlingFix()) {
                    if ((mLeAudioActiveDevice != null)
                            && (Objects.equals(
                                    mLeAudioActiveDevice, leAudioService.getLeadDevice(device)))) {
@@ -1004,7 +1002,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac
                return false;
            }

            if (mFeatureFlags.leaudioActiveDeviceManagerGroupHandlingFix()) {
            if (Flags.leaudioActiveDeviceManagerGroupHandlingFix()) {
                mLeAudioActiveDevice = leAudioService.getLeadDevice(device);
            } else {
                mLeAudioActiveDevice = device;
@@ -1260,7 +1258,7 @@ public class ActiveDeviceManager implements AdapterService.BluetoothStateCallbac
     * @return {@code true} if is broadcasting audio, {@code false} otherwise
     */
    private boolean isBroadcastingAudio() {
        if (!mFeatureFlags.leaudioBroadcastAudioHandoverPolicies()) {
        if (!Flags.leaudioBroadcastAudioHandoverPolicies()) {
            // disable this if feature flag is false
            return false;
        }
+6 −12
Original line number Diff line number Diff line
@@ -125,7 +125,6 @@ import com.android.bluetooth.btservice.bluetoothkeystore.BluetoothKeystoreServic
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.btservice.storage.MetadataDatabase;
import com.android.bluetooth.csip.CsipSetCoordinatorService;
import com.android.bluetooth.flags.FeatureFlagsImpl;
import com.android.bluetooth.flags.Flags;
import com.android.bluetooth.gatt.GattService;
import com.android.bluetooth.hap.HapClientService;
@@ -402,7 +401,6 @@ public class AdapterService extends Service {
    private volatile boolean mTestModeEnabled = false;

    private MetricsLogger mMetricsLogger;
    private FeatureFlagsImpl mFeatureFlags;

    /**
     * Register a {@link ProfileService} with AdapterService.
@@ -686,9 +684,7 @@ public class AdapterService extends Service {

        mSdpManager = SdpManager.init(this);

        mFeatureFlags = new FeatureFlagsImpl();

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

        boolean isAutomotiveDevice =
@@ -704,18 +700,16 @@ 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(), mFeatureFlags);
            mPhonePolicy = new PhonePolicy(this, new ServiceFactory());
            mPhonePolicy.start();
        } else {
            Log.i(TAG, "Phone policy disabled");
        }

        if (mFeatureFlags.audioRoutingCentralization()) {
            mActiveDeviceManager =
                    new AudioRoutingManager(this, new ServiceFactory(), mFeatureFlags);
        if (Flags.audioRoutingCentralization()) {
            mActiveDeviceManager = new AudioRoutingManager(this, new ServiceFactory());
        } else {
            mActiveDeviceManager =
                    new ActiveDeviceManager(this, new ServiceFactory(), mFeatureFlags);
            mActiveDeviceManager = new ActiveDeviceManager(this, new ServiceFactory());
        }
        mActiveDeviceManager.start();

@@ -6192,7 +6186,7 @@ public class AdapterService extends Service {
    }

    int getConnectionState(BluetoothDevice device) {
        if (mFeatureFlags.apiGetConnectionStateUsingIdentityAddress()) {
        if (Flags.apiGetConnectionStateUsingIdentityAddress()) {
            final String identityAddress = device.getIdentityAddress();
            return (identityAddress == null)
                    ? mNativeInterface.getConnectionState(getBytesFromAddress(device.getAddress()))
+2 −3
Original line number Diff line number Diff line
@@ -43,7 +43,6 @@ import com.android.bluetooth.BluetoothMethodProxy;
import com.android.bluetooth.Utils;
import com.android.bluetooth.a2dp.A2dpService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
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;
@@ -146,8 +145,8 @@ public class AudioRoutingManager extends ActiveDeviceManager {
        }
    }

    AudioRoutingManager(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) {
        super(service, factory, featureFlags);
    AudioRoutingManager(AdapterService service, ServiceFactory factory) {
        super(service, factory);
        mAdapterService = service;
        mDbManager = mAdapterService.getDatabase();
        mFactory = factory;
+4 −6
Original line number Diff line number Diff line
@@ -38,7 +38,7 @@ import com.android.bluetooth.bas.BatteryService;
import com.android.bluetooth.bass_client.BassClientService;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.csip.CsipSetCoordinatorService;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.flags.Flags;
import com.android.bluetooth.hap.HapClientService;
import com.android.bluetooth.hearingaid.HearingAidService;
import com.android.bluetooth.hfp.HeadsetService;
@@ -84,7 +84,6 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback {
    @VisibleForTesting static int sConnectOtherProfilesTimeoutMillis = 6000; // 6s

    private DatabaseManager mDatabaseManager;
    private final FeatureFlags mFeatureFlags;
    private final AdapterService mAdapterService;
    private final ServiceFactory mFactory;
    private final Handler mHandler;
@@ -171,11 +170,10 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback {
        resetStates();
    }

    PhonePolicy(AdapterService service, ServiceFactory factory, FeatureFlags featureFlags) {
    PhonePolicy(AdapterService service, ServiceFactory factory) {
        mAdapterService = service;
        mDatabaseManager = Objects.requireNonNull(mAdapterService.getDatabase(),
                "DatabaseManager cannot be null when PhonePolicy starts");
        mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null");
        mFactory = factory;
        mHandler = new PhonePolicyHandler(service.getMainLooper());
        mAutoConnectProfilesSupported =
@@ -646,12 +644,12 @@ public class PhonePolicy implements AdapterService.BluetoothStateCallback {
            return;
        }

        if (!mFeatureFlags.autoConnectOnHfpWhenNoA2dpDevice()) {
        if (!Flags.autoConnectOnHfpWhenNoA2dpDevice()) {
            debugLog("HFP auto connect is not enabled");
            return;
        }

        if (mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) {
        if (Flags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) {
            final List<BluetoothDevice> mostRecentlyConnectedHfpDevices =
                    mDatabaseManager.getMostRecentlyActiveHfpDevices();
            for (BluetoothDevice hfpDevice : mostRecentlyConnectedHfpDevices) {
+3 −5
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.flags.FeatureFlags;
import com.android.bluetooth.flags.Flags;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;

@@ -68,7 +68,6 @@ public class DatabaseManager {
    private static final String TAG = "BluetoothDatabase";

    private final AdapterService mAdapterService;
    private final FeatureFlags mFeatureFlags;
    private HandlerThread mHandlerThread = null;
    private Handler mHandler = null;
    private final Object mDatabaseLock = new Object();
@@ -114,9 +113,8 @@ public class DatabaseManager {
            LEGACY_HEARING_AID_PRIORITY_PREFIX = "bluetooth_hearing_aid_priority_";

    /** Constructor of the DatabaseManager */
    public DatabaseManager(AdapterService service, FeatureFlags featureFlags) {
    public DatabaseManager(AdapterService service) {
        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 +646,7 @@ public class DatabaseManager {
            if (isA2dpDevice) {
                resetActiveA2dpDevice();
            }
            if (isHfpDevice && !mFeatureFlags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) {
            if (isHfpDevice && !Flags.autoConnectOnMultipleHfpWhenNoA2dpDevice()) {
                resetActiveHfpDevice();
            }

Loading