Loading android/app/src/com/android/bluetooth/btservice/AdapterService.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading android/app/src/com/android/bluetooth/gatt/GattService.java +6 −8 Original line number Original line Diff line number Diff line Loading @@ -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); } } } } Loading android/app/src/com/android/bluetooth/le_scan/ScanController.java +62 −1 Original line number Original line Diff line number Diff line Loading @@ -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 { Loading @@ -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"); Loading Loading @@ -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; Loading Loading
android/app/src/com/android/bluetooth/btservice/AdapterService.java +3 −0 Original line number Original line Diff line number Diff line Loading @@ -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; } } Loading
android/app/src/com/android/bluetooth/gatt/GattService.java +6 −8 Original line number Original line Diff line number Diff line Loading @@ -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); } } } } Loading
android/app/src/com/android/bluetooth/le_scan/ScanController.java +62 −1 Original line number Original line Diff line number Diff line Loading @@ -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 { Loading @@ -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"); Loading Loading @@ -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; Loading