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

Commit 3aed6f9e authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add testMode support to ScanController" into main

parents cb6f2c45 39f15374
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -6283,6 +6283,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;