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

Commit 11381b1f authored by William Escande's avatar William Escande Committed by Automerger Merge Worker
Browse files

Merge "Trunk Stable/BassClient: Use static flagging" into main am: f532b9a6

parents e97f0198 f532b9a6
Loading
Loading
Loading
Loading
+3 −13
Original line number Diff line number Diff line
@@ -54,8 +54,7 @@ import com.android.bluetooth.btservice.ProfileService;
import com.android.bluetooth.btservice.ServiceFactory;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.csip.CsipSetCoordinatorService;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.flags.FeatureFlagsImpl;
import com.android.bluetooth.flags.Flags;
import com.android.bluetooth.le_audio.LeAudioService;
import com.android.internal.annotations.VisibleForTesting;

@@ -108,7 +107,6 @@ public class BassClientService extends ProfileService {
    private final Map<BluetoothDevice, List<Integer>> mGroupManagedSources =
            new ConcurrentHashMap<>();
    private final Map<BluetoothDevice, List<Integer>> mActiveSourceMap = new ConcurrentHashMap<>();
    private final FeatureFlags mFeatureFlags;
    private final Map<BluetoothDevice, BluetoothLeBroadcastMetadata> mBroadcastMetadataMap =
            new ConcurrentHashMap<>();
    private final LinkedList<BluetoothDevice> mPausedBroadcastSinks = new LinkedList<>();
@@ -152,13 +150,6 @@ public class BassClientService extends ProfileService {

    public BassClientService(Context ctx) {
        super(ctx);
        mFeatureFlags = new FeatureFlagsImpl();
    }

    @VisibleForTesting
    BassClientService(Context ctx, FeatureFlags featureFlags) {
        super(ctx);
        mFeatureFlags = featureFlags;
    }

    public static boolean isEnabled() {
@@ -876,8 +867,7 @@ public class BassClientService extends ProfileService {
                                    device,
                                    this,
                                    mAdapterService,
                                    mStateMachinesThread.getLooper(),
                                    mFeatureFlags);
                                    mStateMachinesThread.getLooper());
            if (stateMachine != null) {
                mStateMachines.put(device, stateMachine);
            }
@@ -1898,7 +1888,7 @@ public class BassClientService extends ProfileService {
    }

    private boolean isAllowedToAddSource() {
        if (mFeatureFlags.leaudioBroadcastAudioHandoverPolicies()) {
        if (Flags.leaudioBroadcastAudioHandoverPolicies()) {
            /* Check if should wait for status update */
            if (mUnicastSourceStreamStatus.isEmpty()) {
                /* Assistant was not active, inform about activation */
+6 −16
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ import com.android.bluetooth.BluetoothMethodProxy;
import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.ProfileService;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.flags.Flags;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.State;
import com.android.internal.util.StateMachine;
@@ -70,7 +70,6 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Scanner;
import java.util.UUID;
import java.util.stream.IntStream;
@@ -128,7 +127,6 @@ public class BassClientStateMachine extends StateMachine {
    private final Connected mConnected = new Connected();
    private final Connecting mConnecting = new Connecting();
    private final ConnectedProcessing mConnectedProcessing = new ConnectedProcessing();
    private final FeatureFlags mFeatureFlags;
    private final List<Pair<ScanResult, Integer>> mSourceSyncRequestsQueue =
            new ArrayList<Pair<ScanResult, Integer>>();

@@ -186,14 +184,12 @@ public class BassClientStateMachine extends StateMachine {
            BassClientService svc,
            AdapterService adapterService,
            Looper looper,
            int connectTimeoutMs,
            FeatureFlags featureFlags) {
            int connectTimeoutMs) {
        super(TAG + "(" + device.toString() + ")", looper);
        mDevice = device;
        mService = svc;
        mAdapterService = adapterService;
        mConnectTimeoutMs = connectTimeoutMs;
        mFeatureFlags = Objects.requireNonNull(featureFlags, "Feature Flags cannot be null");
        addState(mDisconnected);
        addState(mConnected);
        addState(mConnecting);
@@ -214,8 +210,7 @@ public class BassClientStateMachine extends StateMachine {
            BluetoothDevice device,
            BassClientService svc,
            AdapterService adapterService,
            Looper looper,
            FeatureFlags featureFlags) {
            Looper looper) {
        Log.d(TAG, "make for device " + device);

        if (!BassClientPeriodicAdvertisingManager
@@ -226,12 +221,7 @@ public class BassClientStateMachine extends StateMachine {

        BassClientStateMachine BassclientSm =
                new BassClientStateMachine(
                        device,
                        svc,
                        adapterService,
                        looper,
                        BassConstants.CONNECT_TIMEOUT_MS,
                        featureFlags);
                        device, svc, adapterService, looper, BassConstants.CONNECT_TIMEOUT_MS);
        BassclientSm.start();
        return BassclientSm;
    }
@@ -646,7 +636,7 @@ public class BassClientStateMachine extends StateMachine {
            }
        }
        metaData.setEncrypted(encrypted);
        if (mFeatureFlags.leaudioBroadcastMonitorSourceSyncStatus()) {
        if (Flags.leaudioBroadcastMonitorSourceSyncStatus()) {
            // update the rssi value
            ScanResult scanRes = mService.getCachedBroadcast(result.getBroadcastId());
            if (scanRes != null) {
@@ -1185,7 +1175,7 @@ public class BassClientStateMachine extends StateMachine {
        @Override
        public void onSyncLost(int syncHandle) {
            log("OnSyncLost" + syncHandle);
            if (mFeatureFlags.leaudioBroadcastMonitorSourceSyncStatus()) {
            if (Flags.leaudioBroadcastMonitorSourceSyncStatus()) {
                int broadcastId = mService.getBroadcastIdForSyncHandle(syncHandle);
                if (broadcastId != BassConstants.INVALID_BROADCAST_ID) {
                    log("Notify broadcast source lost, broadcast id: " + broadcastId);
+2 −5
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import android.util.Log;

import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.internal.annotations.VisibleForTesting;

/**
@@ -70,16 +69,14 @@ public class BassObjectsFactory {
     * @param device the remote device associated with this state machine
     * @param svc the bass client service
     * @param looper the thread that the state machine is supposed to run on
     * @param featureFlags feature flag from bass client service
     * @return a state machine that is initialized and started, ready to go
     */
    public BassClientStateMachine makeStateMachine(
            BluetoothDevice device,
            BassClientService svc,
            AdapterService adapterService,
            Looper looper,
            FeatureFlags featureFlags) {
        return BassClientStateMachine.make(device, svc, adapterService, looper, featureFlags);
            Looper looper) {
        return BassClientStateMachine.make(device, svc, adapterService, looper);
    }

    /**
+13 −8
Original line number Diff line number Diff line
@@ -68,7 +68,6 @@ import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.btservice.ServiceFactory;
import com.android.bluetooth.btservice.storage.DatabaseManager;
import com.android.bluetooth.csip.CsipSetCoordinatorService;
import com.android.bluetooth.flags.FakeFeatureFlagsImpl;
import com.android.bluetooth.flags.Flags;
import com.android.bluetooth.le_audio.LeAudioService;

@@ -139,7 +138,6 @@ public class BassClientServiceTest {
    private BluetoothDevice mCurrentDevice;
    private BluetoothDevice mCurrentDevice1;
    private BassIntentReceiver mBassIntentReceiver;
    private FakeFeatureFlagsImpl mFakeFlagsImpl;

    @Spy private BassObjectsFactory mObjectsFactory = BassObjectsFactory.getInstance();
    @Mock private AdapterService mAdapterService;
@@ -240,14 +238,11 @@ public class BassClientServiceTest {
                            return stateMachine;
                        })
                .when(mObjectsFactory)
                .makeStateMachine(any(), any(), any(), any(), any());
                .makeStateMachine(any(), any(), any(), any());
        doReturn(mBluetoothLeScannerWrapper).when(mObjectsFactory)
                .getBluetoothLeScannerWrapper(any());

        mFakeFlagsImpl = new FakeFeatureFlagsImpl();
        mFakeFlagsImpl.setFlag(Flags.FLAG_LEAUDIO_BROADCAST_AUDIO_HANDOVER_POLICIES, false);

        mBassClientService = new BassClientService(mTargetContext, mFakeFlagsImpl);
        mBassClientService = new BassClientService(mTargetContext);
        mBassClientService.start();
        mBassClientService.setAvailable(true);

@@ -355,7 +350,6 @@ public class BassClientServiceTest {
                        eq(mCurrentDevice),
                        eq(mBassClientService),
                        eq(mAdapterService),
                        any(),
                        any());
        BassClientStateMachine stateMachine = mStateMachines.get(mCurrentDevice);
        assertThat(stateMachine).isNotNull();
@@ -499,10 +493,21 @@ public class BassClientServiceTest {
                -1));
    }

    private void handleHandoverSupport() {
        if (Flags.leaudioBroadcastAudioHandoverPolicies()) {
            /* Unicast finished streaming */
            mBassClientService.handleUnicastSourceStreamStatusChange(
                    2 /* STATUS_LOCAL_STREAM_SUSPENDED */);
        }
    }

    private void verifyAddSourceForGroup(BluetoothLeBroadcastMetadata meta) {
        // Add broadcast source
        mBassClientService.addSource(mCurrentDevice, meta, true);

        /* In case if device supporth handover, Source stream status needs to be updated */
        handleHandoverSupport();

        // Verify all group members getting ADD_BCAST_SOURCE message
        assertThat(mStateMachines.size()).isEqualTo(2);
        for (BassClientStateMachine sm: mStateMachines.values()) {
+8 −14
Original line number Diff line number Diff line
@@ -83,6 +83,7 @@ import android.os.Bundle;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.platform.test.flag.junit.SetFlagsRule;

import androidx.test.InstrumentationRegistry;
import androidx.test.filters.MediumTest;
@@ -91,8 +92,6 @@ import com.android.bluetooth.BluetoothMethodProxy;
import com.android.bluetooth.TestUtils;
import com.android.bluetooth.Utils;
import com.android.bluetooth.btservice.AdapterService;
import com.android.bluetooth.flags.FakeFeatureFlagsImpl;
import com.android.bluetooth.flags.FeatureFlags;
import com.android.bluetooth.flags.Flags;

import org.hamcrest.core.IsInstanceOf;
@@ -120,6 +119,8 @@ public class BassClientStateMachineTest {
    @Rule
    public final MockitoRule mockito = MockitoJUnit.rule();

    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

    private static final int CONNECTION_TIMEOUT_MS = 1_000;
    private static final int TIMEOUT_MS = 2_000;
    private static final int WAIT_MS = 1_200;
@@ -132,7 +133,6 @@ public class BassClientStateMachineTest {
    private BluetoothDevice mTestDevice;
    private BluetoothDevice mSourceTestDevice;
    private BluetoothDevice mEmptyTestDevice;
    private FakeFeatureFlagsImpl mFakeFlagsImpl;

    @Mock private AdapterService mAdapterService;
    @Mock private BassClientService mBassClientService;
@@ -150,9 +150,6 @@ public class BassClientStateMachineTest {

        TestUtils.setAdapterService(mAdapterService);

        mFakeFlagsImpl = new FakeFeatureFlagsImpl();
        mFakeFlagsImpl.setFlag(Flags.FLAG_LEAUDIO_BROADCAST_MONITOR_SOURCE_SYNC_STATUS, false);
        mFakeFlagsImpl.setFlag(Flags.FLAG_LEAUDIO_BROADCAST_AUDIO_HANDOVER_POLICIES, false);
        BluetoothMethodProxy.setInstanceForTesting(mMethodProxy);
        doNothing().when(mMethodProxy).periodicAdvertisingManagerTransferSync(
                any(), any(), anyInt(), anyInt());
@@ -183,9 +180,7 @@ public class BassClientStateMachineTest {
                        mBassClientService,
                        mAdapterService,
                        mHandlerThread.getLooper(),
                        CONNECTION_TIMEOUT_MS,
                        mFakeFlagsImpl);
        assertThat(mBassClientStateMachine).isNotNull();
                        CONNECTION_TIMEOUT_MS);
        mBassClientStateMachine.start();
    }

@@ -1941,7 +1936,7 @@ public class BassClientStateMachineTest {

    @Test
    public void periodicAdvertisingCallbackOnSyncLost_notifySourceLost() {
        mFakeFlagsImpl.setFlag(Flags.FLAG_LEAUDIO_BROADCAST_MONITOR_SOURCE_SYNC_STATUS, true);
        mSetFlagsRule.enableFlags(Flags.FLAG_LEAUDIO_BROADCAST_MONITOR_SOURCE_SYNC_STATUS);
        PeriodicAdvertisingCallback cb = mBassClientStateMachine.mLocalPeriodicAdvCallback;
        BassClientService.Callbacks callbacks = Mockito.mock(BassClientService.Callbacks.class);
        int syncHandle = 1;
@@ -1955,7 +1950,7 @@ public class BassClientStateMachineTest {

    @Test
    public void periodicAdvertisingCallbackOnBigInfoAdvertisingReport_updateRssi() {
        mFakeFlagsImpl.setFlag(Flags.FLAG_LEAUDIO_BROADCAST_MONITOR_SOURCE_SYNC_STATUS, true);
        mSetFlagsRule.enableFlags(Flags.FLAG_LEAUDIO_BROADCAST_MONITOR_SOURCE_SYNC_STATUS);
        PeriodicAdvertisingCallback cb = mBassClientStateMachine.mLocalPeriodicAdvCallback;
        BassClientService.Callbacks callbacks = Mockito.mock(BassClientService.Callbacks.class);
        int testRssi = -40;
@@ -2178,9 +2173,8 @@ public class BassClientStateMachineTest {
                BassClientService service,
                AdapterService adapterService,
                Looper looper,
                int connectTimeout,
                FeatureFlags featureFlags) {
            super(device, service, adapterService, looper, connectTimeout, featureFlags);
                int connectTimeout) {
            super(device, service, adapterService, looper, connectTimeout);
        }

        @Override