| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.device.bluetooth; | 5 package org.chromium.device.bluetooth; |
| 6 | 6 |
| 7 import org.chromium.base.Log; | 7 import org.chromium.base.Log; |
| 8 import org.chromium.base.annotations.CalledByNative; | 8 import org.chromium.base.annotations.CalledByNative; |
| 9 import org.chromium.base.annotations.JNINamespace; | 9 import org.chromium.base.annotations.JNINamespace; |
| 10 | 10 |
| 11 /** | 11 /** |
| 12 * Exposes android.bluetooth.BluetoothGattDescriptor as necessary | 12 * Exposes android.bluetooth.BluetoothGattDescriptor as necessary |
| 13 * for C++ device::BluetoothRemoteGattDescriptorAndroid. | 13 * for C++ device::BluetoothRemoteGattDescriptorAndroid. |
| 14 * | 14 * |
| 15 * Lifetime is controlled by device::BluetoothRemoteGattDescriptorAndroid. | 15 * Lifetime is controlled by device::BluetoothRemoteGattDescriptorAndroid. |
| 16 */ | 16 */ |
| 17 @JNINamespace("device") | 17 @JNINamespace("device") |
| 18 final class ChromeBluetoothRemoteGattDescriptor { | 18 final class ChromeBluetoothRemoteGattDescriptor { |
| 19 private static final String TAG = "Bluetooth"; | 19 private static final String TAG = "Bluetooth"; |
| 20 | 20 |
| 21 // TODO(scheib): Will need c++ pointer eventually: | 21 private long mNativeBluetoothRemoteGattDescriptorAndroid; |
| 22 // private long mNativeBluetoothRemoteGattDescriptorAndroid; | |
| 23 final Wrappers.BluetoothGattDescriptorWrapper mDescriptor; | 22 final Wrappers.BluetoothGattDescriptorWrapper mDescriptor; |
| 24 final ChromeBluetoothDevice mChromeDevice; | 23 final ChromeBluetoothDevice mChromeDevice; |
| 25 | 24 |
| 26 private ChromeBluetoothRemoteGattDescriptor( | 25 private ChromeBluetoothRemoteGattDescriptor(long nativeBluetoothRemoteGattDe
scriptorAndroid, |
| 27 // TODO(scheib): Will need c++ pointer eventually: | |
| 28 // long nativeBluetoothRemoteGattDescriptorAndroid, | |
| 29 Wrappers.BluetoothGattDescriptorWrapper descriptorWrapper, | 26 Wrappers.BluetoothGattDescriptorWrapper descriptorWrapper, |
| 30 ChromeBluetoothDevice chromeDevice) { | 27 ChromeBluetoothDevice chromeDevice) { |
| 31 // TODO(scheib): Will need c++ pointer eventually: | 28 mNativeBluetoothRemoteGattDescriptorAndroid = nativeBluetoothRemoteGattD
escriptorAndroid; |
| 32 // mNativeBluetoothRemoteGattDescriptorAndroid = | |
| 33 // nativeBluetoothRemoteGattDescriptorAndroid; | |
| 34 mDescriptor = descriptorWrapper; | 29 mDescriptor = descriptorWrapper; |
| 35 mChromeDevice = chromeDevice; | 30 mChromeDevice = chromeDevice; |
| 36 | 31 |
| 37 mChromeDevice.mWrapperToChromeDescriptorsMap.put(descriptorWrapper, this
); | 32 mChromeDevice.mWrapperToChromeDescriptorsMap.put(descriptorWrapper, this
); |
| 38 | 33 |
| 39 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor created."); | 34 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor created."); |
| 40 } | 35 } |
| 41 | 36 |
| 42 /** | 37 /** |
| 43 * Handles C++ object being destroyed. | 38 * Handles C++ object being destroyed. |
| 44 */ | 39 */ |
| 45 @CalledByNative | 40 @CalledByNative |
| 46 private void onBluetoothRemoteGattDescriptorAndroidDestruction() { | 41 private void onBluetoothRemoteGattDescriptorAndroidDestruction() { |
| 47 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor Destroyed."); | 42 Log.v(TAG, "ChromeBluetoothRemoteGattDescriptor Destroyed."); |
| 48 // TODO(scheib): Will need c++ pointer eventually: | 43 mNativeBluetoothRemoteGattDescriptorAndroid = 0; |
| 49 // mNativeBluetoothRemoteGattDescriptorAndroid = 0; | |
| 50 mChromeDevice.mWrapperToChromeDescriptorsMap.remove(mDescriptor); | 44 mChromeDevice.mWrapperToChromeDescriptorsMap.remove(mDescriptor); |
| 51 } | 45 } |
| 52 | 46 |
| 47 void onDescriptorRead(int status) { |
| 48 Log.i(TAG, "onDescriptorRead status:%d==%s", status, |
| 49 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); |
| 50 if (mNativeBluetoothRemoteGattDescriptorAndroid != 0) { |
| 51 nativeOnRead( |
| 52 mNativeBluetoothRemoteGattDescriptorAndroid, status, mDescri
ptor.getValue()); |
| 53 } |
| 54 } |
| 55 |
| 56 void onDescriptorWrite(int status) { |
| 57 Log.i(TAG, "onDescriptorWrite status:%d==%s", status, |
| 58 status == android.bluetooth.BluetoothGatt.GATT_SUCCESS ? "OK" :
"Error"); |
| 59 if (mNativeBluetoothRemoteGattDescriptorAndroid != 0) { |
| 60 nativeOnWrite(mNativeBluetoothRemoteGattDescriptorAndroid, status); |
| 61 } |
| 62 } |
| 63 |
| 53 // -------------------------------------------------------------------------
-------------------- | 64 // -------------------------------------------------------------------------
-------------------- |
| 54 // BluetoothRemoteGattDescriptorAndroid methods implemented in java: | 65 // BluetoothRemoteGattDescriptorAndroid methods implemented in java: |
| 55 | 66 |
| 56 // Implements BluetoothRemoteGattDescriptorAndroid::Create. | 67 // Implements BluetoothRemoteGattDescriptorAndroid::Create. |
| 57 // TODO(http://crbug.com/505554): Replace 'Object' with specific type when J
NI fixed. | 68 // TODO(http://crbug.com/505554): Replace 'Object' with specific type when J
NI fixed. |
| 58 @CalledByNative | 69 @CalledByNative |
| 59 private static ChromeBluetoothRemoteGattDescriptor create( | 70 private static ChromeBluetoothRemoteGattDescriptor create( |
| 60 // TODO(scheib): Will need c++ pointer eventually: | 71 long nativeBluetoothRemoteGattDescriptorAndroid, Object bluetoothGat
tDescriptorWrapper, |
| 61 // long nativeBluetoothRemoteGattDescriptorAndroid, | 72 ChromeBluetoothDevice chromeDevice) { |
| 62 Object bluetoothGattDescriptorWrapper, ChromeBluetoothDevice chromeD
evice) { | 73 return new ChromeBluetoothRemoteGattDescriptor(nativeBluetoothRemoteGatt
DescriptorAndroid, |
| 63 return new ChromeBluetoothRemoteGattDescriptor( | |
| 64 // TODO(scheib): Will need c++ pointer eventually: | |
| 65 // nativeBluetoothRemoteGattDescriptorAndroid, | |
| 66 (Wrappers.BluetoothGattDescriptorWrapper) bluetoothGattDescripto
rWrapper, | 74 (Wrappers.BluetoothGattDescriptorWrapper) bluetoothGattDescripto
rWrapper, |
| 67 chromeDevice); | 75 chromeDevice); |
| 68 } | 76 } |
| 69 | 77 |
| 70 // Implements BluetoothRemoteGattDescriptorAndroid::GetUUID. | 78 // Implements BluetoothRemoteGattDescriptorAndroid::GetUUID. |
| 71 @CalledByNative | 79 @CalledByNative |
| 72 private String getUUID() { | 80 private String getUUID() { |
| 73 return mDescriptor.getUuid().toString(); | 81 return mDescriptor.getUuid().toString(); |
| 74 } | 82 } |
| 83 |
| 84 // Implements BluetoothRemoteGattDescriptorAndroid::ReadRemoteDescriptor. |
| 85 @CalledByNative |
| 86 private boolean readRemoteDescriptor() { |
| 87 if (!mChromeDevice.mBluetoothGatt.readDescriptor(mDescriptor)) { |
| 88 Log.i(TAG, "readRemoteDescriptor readDescriptor failed."); |
| 89 return false; |
| 90 } |
| 91 return true; |
| 92 } |
| 93 |
| 94 // Implements BluetoothRemoteGattDescriptorAndroid::WriteRemoteDescriptor. |
| 95 @CalledByNative |
| 96 private boolean writeRemoteDescriptor(byte[] value) { |
| 97 if (!mDescriptor.setValue(value)) { |
| 98 Log.i(TAG, "writeRemoteDescriptor setValue failed."); |
| 99 return false; |
| 100 } |
| 101 if (!mChromeDevice.mBluetoothGatt.writeDescriptor(mDescriptor)) { |
| 102 Log.i(TAG, "writeRemoteDescriptor writeDescriptor failed."); |
| 103 return false; |
| 104 } |
| 105 return true; |
| 106 } |
| 107 |
| 108 // -------------------------------------------------------------------------
-------------------- |
| 109 // BluetoothAdapterDevice C++ methods declared for access from java: |
| 110 |
| 111 // Binds to BluetoothRemoteGattDescriptorAndroid::OnRead. |
| 112 native void nativeOnRead( |
| 113 long nativeBluetoothRemoteGattDescriptorAndroid, int status, byte[]
value); |
| 114 |
| 115 // Binds to BluetoothRemoteGattDescriptorAndroid::OnWrite. |
| 116 native void nativeOnWrite(long nativeBluetoothRemoteGattDescriptorAndroid, i
nt status); |
| 75 } | 117 } |
| OLD | NEW |