| Index: device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java
|
| diff --git a/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java b/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java
|
| index 3a35167d200d6a13e816edc70a57202348046e89..e5fa0f55c4c4af66f2394a9c118735ad18bbdd81 100644
|
| --- a/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java
|
| +++ b/device/bluetooth/test/android/java/src/org/chromium/device/bluetooth/Fakes.java
|
| @@ -8,11 +8,13 @@ import android.annotation.TargetApi;
|
| import android.bluetooth.BluetoothDevice;
|
| import android.bluetooth.le.ScanFilter;
|
| import android.bluetooth.le.ScanSettings;
|
| +import android.content.Context;
|
| import android.os.Build;
|
| import android.os.ParcelUuid;
|
|
|
| import org.chromium.base.Log;
|
| import org.chromium.base.annotations.CalledByNative;
|
| +import org.chromium.base.annotations.JNINamespace;
|
|
|
| import java.util.ArrayList;
|
| import java.util.List;
|
| @@ -20,6 +22,7 @@ import java.util.List;
|
| /**
|
| * Fake implementations of android.bluetooth.* classes for testing.
|
| */
|
| +@JNINamespace("device")
|
| @TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
| class Fakes {
|
| private static final String TAG = "cr.Bluetooth";
|
| @@ -29,18 +32,20 @@ class Fakes {
|
| */
|
| static class FakeBluetoothAdapter extends Wrappers.BluetoothAdapterWrapper {
|
| private final FakeBluetoothLeScanner mFakeScanner;
|
| + final long mNativeBluetoothTestAndroid;
|
|
|
| /**
|
| * Creates a FakeBluetoothAdapter.
|
| */
|
| @CalledByNative("FakeBluetoothAdapter")
|
| - public static FakeBluetoothAdapter create() {
|
| + public static FakeBluetoothAdapter create(long nativeBluetoothTestAndroid) {
|
| Log.v(TAG, "FakeBluetoothAdapter created.");
|
| - return new FakeBluetoothAdapter();
|
| + return new FakeBluetoothAdapter(nativeBluetoothTestAndroid);
|
| }
|
|
|
| - private FakeBluetoothAdapter() {
|
| + private FakeBluetoothAdapter(long nativeBluetoothTestAndroid) {
|
| super(null, new FakeBluetoothLeScanner());
|
| + mNativeBluetoothTestAndroid = nativeBluetoothTestAndroid;
|
| mFakeScanner = (FakeBluetoothLeScanner) mScanner;
|
| }
|
|
|
| @@ -56,8 +61,8 @@ class Fakes {
|
| uuids.add(ParcelUuid.fromString("00001801-0000-1000-8000-00805f9b34fb"));
|
|
|
| mFakeScanner.mCallback.onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES,
|
| - new FakeScanResult(new FakeBluetoothDevice(
|
| - "01:00:00:90:1E:BE", "FakeBluetoothDevice"),
|
| + new FakeScanResult(new FakeBluetoothDevice(this, "01:00:00:90:1E:BE",
|
| + "FakeBluetoothDevice"),
|
| uuids));
|
| break;
|
| }
|
| @@ -67,24 +72,26 @@ class Fakes {
|
| uuids.add(ParcelUuid.fromString("00001803-0000-1000-8000-00805f9b34fb"));
|
|
|
| mFakeScanner.mCallback.onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES,
|
| - new FakeScanResult(new FakeBluetoothDevice(
|
| - "01:00:00:90:1E:BE", "FakeBluetoothDevice"),
|
| + new FakeScanResult(new FakeBluetoothDevice(this, "01:00:00:90:1E:BE",
|
| + "FakeBluetoothDevice"),
|
| uuids));
|
| break;
|
| }
|
| case 3: {
|
| ArrayList<ParcelUuid> uuids = null;
|
| - mFakeScanner.mCallback.onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES,
|
| - new FakeScanResult(new FakeBluetoothDevice("01:00:00:90:1E:BE", ""),
|
| - uuids));
|
| + mFakeScanner.mCallback.onScanResult(
|
| + ScanSettings.CALLBACK_TYPE_ALL_MATCHES,
|
| + new FakeScanResult(
|
| + new FakeBluetoothDevice(this, "01:00:00:90:1E:BE", ""), uuids));
|
|
|
| break;
|
| }
|
| case 4: {
|
| ArrayList<ParcelUuid> uuids = null;
|
| - mFakeScanner.mCallback.onScanResult(ScanSettings.CALLBACK_TYPE_ALL_MATCHES,
|
| - new FakeScanResult(new FakeBluetoothDevice("02:00:00:8B:74:63", ""),
|
| - uuids));
|
| + mFakeScanner.mCallback.onScanResult(
|
| + ScanSettings.CALLBACK_TYPE_ALL_MATCHES,
|
| + new FakeScanResult(
|
| + new FakeBluetoothDevice(this, "02:00:00:8B:74:63", ""), uuids));
|
|
|
| break;
|
| }
|
| @@ -177,15 +184,45 @@ class Fakes {
|
| * Fakes android.bluetooth.BluetoothDevice.
|
| */
|
| static class FakeBluetoothDevice extends Wrappers.BluetoothDeviceWrapper {
|
| + final FakeBluetoothAdapter mAdapter;
|
| private String mAddress;
|
| private String mName;
|
| + private Wrappers.BluetoothGattCallbackWrapper mGattCallback;
|
|
|
| - public FakeBluetoothDevice(String address, String name) {
|
| + public FakeBluetoothDevice(FakeBluetoothAdapter adapter, String address, String name) {
|
| super(null);
|
| + mAdapter = adapter;
|
| mAddress = address;
|
| mName = name;
|
| }
|
|
|
| + // Create a call to onConnectionStateChange on the |chrome_device| using parameters
|
| + // |status| & |connected|.
|
| + @CalledByNative("FakeBluetoothDevice")
|
| + private static void connectionStateChange(
|
| + ChromeBluetoothDevice chromeDevice, int status, boolean connected) {
|
| + FakeBluetoothDevice fakeDevice = (FakeBluetoothDevice) chromeDevice.mDevice;
|
| + fakeDevice.mGattCallback.onConnectionStateChange(status, connected
|
| + ? android.bluetooth.BluetoothProfile.STATE_CONNECTED
|
| + : android.bluetooth.BluetoothProfile.STATE_DISCONNECTED);
|
| + }
|
| +
|
| + // -----------------------------------------------------------------------------------------
|
| + // Wrappers.BluetoothDeviceWrapper overrides:
|
| +
|
| + @Override
|
| + public Wrappers.BluetoothGattWrapper connectGatt(Context context, boolean autoConnect,
|
| + Wrappers.BluetoothGattCallbackWrapper callback) {
|
| + if (mGattCallback != null && mGattCallback != callback) {
|
| + throw new IllegalArgumentException(
|
| + "BluetoothGattWrapper doesn't support calls to connectGatt() with "
|
| + + "multiple distinct callbacks.");
|
| + }
|
| + nativeOnBluetoothDeviceConnectGattCalled(mAdapter.mNativeBluetoothTestAndroid);
|
| + mGattCallback = callback;
|
| + return new FakeBluetoothGatt(this);
|
| + }
|
| +
|
| @Override
|
| public String getAddress() {
|
| return mAddress;
|
| @@ -206,4 +243,31 @@ class Fakes {
|
| return mName;
|
| }
|
| }
|
| +
|
| + /**
|
| + * Fakes android.bluetooth.BluetoothDevice.
|
| + */
|
| + static class FakeBluetoothGatt extends Wrappers.BluetoothGattWrapper {
|
| + final FakeBluetoothDevice mDevice;
|
| +
|
| + public FakeBluetoothGatt(FakeBluetoothDevice device) {
|
| + super(null);
|
| + mDevice = device;
|
| + }
|
| +
|
| + @Override
|
| + public void disconnect() {
|
| + nativeOnFakeBluetoothGattDisconnect(mDevice.mAdapter.mNativeBluetoothTestAndroid);
|
| + }
|
| + }
|
| +
|
| + // ---------------------------------------------------------------------------------------------
|
| + // BluetoothTestAndroid C++ methods declared for access from java:
|
| +
|
| + // Binds to BluetoothAdapterAndroid::OnBluetoothDeviceConnectGattCalled.
|
| + private static native void nativeOnBluetoothDeviceConnectGattCalled(
|
| + long nativeBluetoothTestAndroid);
|
| +
|
| + // Binds to BluetoothAdapterAndroid::OnFakeBluetoothGattDisconnect.
|
| + private static native void nativeOnFakeBluetoothGattDisconnect(long nativeBluetoothTestAndroid);
|
| }
|
|
|