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

Commit 39f15374 authored by Ömer Faruk Yılmaz's avatar Ömer Faruk Yılmaz
Browse files

Add testMode support to ScanController

Bug: 313335632
Bug: 267361243
Bug: 327503826
Bug: 355773025
Bug: 359228694
Test: m com.android.btservices
Change-Id: I34b6a79eac7e7342eeccca47c2b977d9acabbce4
parent 20d90da1
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -6276,6 +6276,9 @@ public class AdapterService extends Service {
            for (ProfileService profile : mRunningProfiles) {
            for (ProfileService profile : mRunningProfiles) {
                profile.setTestModeEnabled(testModeEnabled);
                profile.setTestModeEnabled(testModeEnabled);
            }
            }
            if (Flags.scanManagerRefactor() && mScanController != null) {
                mScanController.setTestModeEnabled(testModeEnabled);
            }
            mTestModeEnabled = testModeEnabled;
            mTestModeEnabled = testModeEnabled;
            return;
            return;
        }
        }
+6 −8
Original line number Original line Diff line number Diff line
@@ -322,15 +322,13 @@ public class GattService extends ProfileService {
                            }
                            }
                        };
                        };
            }
            }
            if (enableTestMode && !isTestModeEnabled()) {
            if (enableTestMode == isTestModeEnabled()) {
                super.setTestModeEnabled(true);
                return;
                mTestModeHandler.removeMessages(0);
                mTestModeHandler.sendEmptyMessageDelayed(0, DateUtils.SECOND_IN_MILLIS);
            } else if (!enableTestMode && isTestModeEnabled()) {
                super.setTestModeEnabled(false);
                mTestModeHandler.removeMessages(0);
                mTestModeHandler.sendEmptyMessage(0);
            }
            }
            super.setTestModeEnabled(enableTestMode);
            mTestModeHandler.removeMessages(0);
            mTestModeHandler.sendEmptyMessageDelayed(
                0, enableTestMode ? DateUtils.SECOND_IN_MILLIS : 0);
        }
        }
    }
    }


+62 −1
Original line number Original line Diff line number Diff line
@@ -26,11 +26,17 @@ import android.bluetooth.le.ScanResult;
import android.bluetooth.le.ScanSettings;
import android.bluetooth.le.ScanSettings;
import android.content.AttributionSource;
import android.content.AttributionSource;
import android.content.Context;
import android.content.Context;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.WorkSource;
import android.os.WorkSource;
import android.text.format.DateUtils;
import android.util.Log;
import android.util.Log;


import libcore.util.HexEncoding;

import java.util.List;
import java.util.List;


public class ScanController {
public class ScanController {
@@ -42,8 +48,24 @@ public class ScanController {


    private boolean mIsAvailable;
    private boolean mIsAvailable;


    private volatile boolean mTestModeEnabled = false;
    private final Looper mMainLooper;
    private Handler mTestModeHandler;
    private final Object mTestModeLock = new Object();

    /** Example raw beacons captured from a Blue Charm BC011 */
    private static final String[] TEST_MODE_BEACONS =
            new String[] {
                "020106",
                "0201060303AAFE1716AAFE10EE01626C7565636861726D626561636F6E730009168020691E0EFE13551109426C7565436861726D5F313639363835000000",
                "0201060303AAFE1716AAFE00EE626C7565636861726D31000000000001000009168020691E0EFE13551109426C7565436861726D5F313639363835000000",
                "0201060303AAFE1116AAFE20000BF017000008874803FB93540916802069080EFE13551109426C7565436861726D5F313639363835000000000000000000",
                "0201061AFF4C000215426C7565436861726D426561636F6E730EFE1355C509168020691E0EFE13551109426C7565436861726D5F31363936383500000000",
            };

    public ScanController(Context ctx) {
    public ScanController(Context ctx) {
        mTransitionalScanHelper = new TransitionalScanHelper(ctx, () -> false);
        mTransitionalScanHelper = new TransitionalScanHelper(ctx, () -> mTestModeEnabled);
        mMainLooper = ctx.getMainLooper();
        mBinder = new BluetoothScanBinder(this);
        mBinder = new BluetoothScanBinder(this);
        mIsAvailable = true;
        mIsAvailable = true;
        HandlerThread thread = new HandlerThread("BluetoothScanManager");
        HandlerThread thread = new HandlerThread("BluetoothScanManager");
@@ -72,6 +94,45 @@ public class ScanController {
        return mBinder;
        return mBinder;
    }
    }


    public void setTestModeEnabled(boolean enableTestMode) {
        synchronized (mTestModeLock) {
            if (mTestModeHandler == null) {
                mTestModeHandler =
                        new Handler(mMainLooper) {
                            public void handleMessage(Message msg) {
                                synchronized (mTestModeLock) {
                                    if (!mTestModeEnabled) {
                                        return;
                                    }
                                    for (String test : TEST_MODE_BEACONS) {
                                        mTransitionalScanHelper.onScanResultInternal(
                                                0x1b,
                                                0x1,
                                                "DD:34:02:05:5C:4D",
                                                1,
                                                0,
                                                0xff,
                                                127,
                                                -54,
                                                0x0,
                                                HexEncoding.decode(test),
                                                "DD:34:02:05:5C:4E");
                                    }
                                    sendEmptyMessageDelayed(0, DateUtils.SECOND_IN_MILLIS);
                                }
                            }
                        };
            }
            if (enableTestMode == mTestModeEnabled) {
                return;
            }
            mTestModeEnabled = enableTestMode;
            mTestModeHandler.removeMessages(0);
            mTestModeHandler.sendEmptyMessageDelayed(
                    0, enableTestMode ? DateUtils.SECOND_IN_MILLIS : 0);
        }
    }

    static class BluetoothScanBinder extends IBluetoothScan.Stub {
    static class BluetoothScanBinder extends IBluetoothScan.Stub {
        private ScanController mScanController;
        private ScanController mScanController;