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

Commit 951ed55c authored by Kihong Seong's avatar Kihong Seong
Browse files

Modify ScanManager cosntructor to take looper as parameter

This allows ScanManager constructor to take a custom looper as a
parameter, allowing easier testing with use of TestLooper class.

Bug: 309702502
Test: atest BluetoothInstrumentationTests
Change-Id: I0a036c5db99d517e799873f695aec6532307f33e
parent 35938e60
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.bluetooth.gatt;

import android.os.Looper;
import android.util.Log;

import com.android.bluetooth.Utils;
@@ -68,9 +69,21 @@ public class GattObjectsFactory {
        return ScanNativeInterface.getInstance();
    }

    public ScanManager createScanManager(GattService service, AdapterService adapterService,
            BluetoothAdapterProxy bluetoothAdapterProxy) {
        return new ScanManager(service, adapterService, bluetoothAdapterProxy);
    /**
     * Create an instance of ScanManager
     *
     * @param service a GattService instance
     * @param adapterService an AdapterService instance
     * @param bluetoothAdapterProxy a bluetoothAdapterProxy instance
     * @param looper the looper to be used for processing messages
     * @return the created ScanManager instance
     */
    public ScanManager createScanManager(
            GattService service,
            AdapterService adapterService,
            BluetoothAdapterProxy bluetoothAdapterProxy,
            Looper looper) {
        return new ScanManager(service, adapterService, bluetoothAdapterProxy, looper);
    }

    public PeriodicScanManager createPeriodicScanManager(AdapterService adapterService) {
+7 −2
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ import android.net.MacAddress;
import android.os.Binder;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Message;
import android.os.ParcelUuid;
@@ -359,8 +360,12 @@ public class GattService extends ProfileService {
                        mAdapterService,
                        mAdvertiserMap);

        mScanManager = GattObjectsFactory.getInstance()
                .createScanManager(this, mAdapterService, mBluetoothAdapterProxy);
        HandlerThread thread = new HandlerThread("BluetoothScanManager");
        thread.start();
        mScanManager =
                GattObjectsFactory.getInstance()
                        .createScanManager(
                                this, mAdapterService, mBluetoothAdapterProxy, thread.getLooper());

        mPeriodicScanManager = GattObjectsFactory.getInstance()
                .createPeriodicScanManager(mAdapterService);
+3 −5
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.content.IntentFilter;
import android.hardware.display.DisplayManager;
import android.location.LocationManager;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
@@ -160,7 +159,8 @@ public class ScanManager {
    ScanManager(
            GattService service,
            AdapterService adapterService,
            BluetoothAdapterProxy bluetoothAdapterProxy) {
            BluetoothAdapterProxy bluetoothAdapterProxy,
            Looper looper) {
        mRegularScanClients =
                Collections.newSetFromMap(new ConcurrentHashMap<ScanClient, Boolean>());
        mBatchClients = Collections.newSetFromMap(new ConcurrentHashMap<ScanClient, Boolean>());
@@ -184,9 +184,7 @@ public class ScanManager {
        mPriorityMap.put(ScanSettings.SCAN_MODE_AMBIENT_DISCOVERY, 4);
        mPriorityMap.put(ScanSettings.SCAN_MODE_LOW_LATENCY, 5);

        HandlerThread thread = new HandlerThread("BluetoothScanManager");
        thread.start();
        mHandler = new ClientHandler(thread.getLooper());
        mHandler = new ClientHandler(looper);
        if (mDm != null) {
            mDm.registerDisplayListener(mDisplayListener, null);
        }
+1 −1
Original line number Diff line number Diff line
@@ -119,7 +119,7 @@ public class GattServiceTest {

        GattObjectsFactory.setInstanceForTesting(mFactory);
        doReturn(mNativeInterface).when(mFactory).getNativeInterface();
        doReturn(mScanManager).when(mFactory).createScanManager(any(), any(), any());
        doReturn(mScanManager).when(mFactory).createScanManager(any(), any(), any(), any());
        doReturn(mPeriodicScanManager).when(mFactory).createPeriodicScanManager(any());
        doReturn(mDistanceMeasurementManager).when(mFactory)
                .createDistanceMeasurementManager(any());
+14 −4
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.test.TestLooper;
import android.provider.Settings;
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
@@ -106,6 +107,7 @@ public class ScanManagerTest {
    private Context mTargetContext;
    private ScanManager mScanManager;
    private Handler mHandler;
    private TestLooper mTestLooper;
    private CountDownLatch mLatch;
    private long mScanReportDelay;

@@ -181,7 +183,14 @@ public class ScanManagerTest {
        doReturn(mTargetContext.getUser()).when(mMockGattService).getUser();
        doReturn(mTargetContext.getPackageName()).when(mMockGattService).getPackageName();

        mScanManager = new ScanManager(mMockGattService, mAdapterService, mBluetoothAdapterProxy);
        mTestLooper = new TestLooper();
        mTestLooper.startAutoDispatch();
        mScanManager =
                new ScanManager(
                        mMockGattService,
                        mAdapterService,
                        mBluetoothAdapterProxy,
                        mTestLooper.getLooper());

        mHandler = mScanManager.getClientHandler();
        assertThat(mHandler).isNotNull();
@@ -194,6 +203,7 @@ public class ScanManagerTest {

    @After
    public void tearDown() throws Exception {
        mTestLooper.stopAutoDispatchAndIgnoreExceptions();
        TestUtils.clearAdapterService(mAdapterService);
        BluetoothAdapterProxy.setInstanceForTesting(null);
        GattObjectsFactory.setInstanceForTesting(null);
@@ -216,7 +226,7 @@ public class ScanManagerTest {
        }
        mHandler.sendMessage(msg);
        // Wait for async work from handler thread
        TestUtils.waitForLooperToBeIdle(mHandler.getLooper());
        TestUtils.waitForLooperToFinishScheduledTask(mHandler.getLooper());
    }

    private ScanClient createScanClient(
@@ -1394,7 +1404,7 @@ public class ScanManagerTest {
                BluetoothProfile.STATE_CONNECTING);

        // Wait for handleConnectingState to happen
        TestUtils.waitForLooperToBeIdle(mHandler.getLooper());
        TestUtils.waitForLooperToFinishScheduledTask(mHandler.getLooper());
        assertThat(mScanManager.mIsConnecting).isTrue();
    }

@@ -1430,7 +1440,7 @@ public class ScanManagerTest {

        t1.join();
        t2.join();
        TestUtils.waitForLooperToBeIdle(mHandler.getLooper());
        TestUtils.waitForLooperToFinishScheduledTask(mHandler.getLooper());
        assertThat(mScanManager.mProfilesConnecting).isEqualTo(3);
    }
}