OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 android.Manifest; | 7 import android.Manifest; |
8 import android.annotation.SuppressLint; | 8 import android.annotation.SuppressLint; |
9 import android.annotation.TargetApi; | 9 import android.annotation.TargetApi; |
10 import android.bluetooth.BluetoothAdapter; | 10 import android.bluetooth.BluetoothAdapter; |
11 import android.bluetooth.BluetoothDevice; | 11 import android.bluetooth.BluetoothDevice; |
12 import android.bluetooth.BluetoothGatt; | 12 import android.bluetooth.BluetoothGatt; |
13 import android.bluetooth.BluetoothGattCallback; | 13 import android.bluetooth.BluetoothGattCallback; |
14 import android.bluetooth.BluetoothGattCharacteristic; | 14 import android.bluetooth.BluetoothGattCharacteristic; |
15 import android.bluetooth.BluetoothGattDescriptor; | 15 import android.bluetooth.BluetoothGattDescriptor; |
16 import android.bluetooth.BluetoothGattService; | 16 import android.bluetooth.BluetoothGattService; |
17 import android.bluetooth.le.BluetoothLeScanner; | 17 import android.bluetooth.le.BluetoothLeScanner; |
18 import android.bluetooth.le.ScanCallback; | 18 import android.bluetooth.le.ScanCallback; |
19 import android.bluetooth.le.ScanFilter; | 19 import android.bluetooth.le.ScanFilter; |
20 import android.bluetooth.le.ScanResult; | 20 import android.bluetooth.le.ScanResult; |
21 import android.bluetooth.le.ScanSettings; | 21 import android.bluetooth.le.ScanSettings; |
22 import android.content.Context; | 22 import android.content.Context; |
23 import android.content.pm.PackageManager; | 23 import android.content.pm.PackageManager; |
24 import android.os.Build; | 24 import android.os.Build; |
25 import android.os.ParcelUuid; | 25 import android.os.ParcelUuid; |
26 | 26 |
27 import org.chromium.base.ContextUtils; | |
27 import org.chromium.base.Log; | 28 import org.chromium.base.Log; |
28 import org.chromium.base.ThreadUtils; | 29 import org.chromium.base.ThreadUtils; |
29 import org.chromium.base.annotations.CalledByNative; | 30 import org.chromium.base.annotations.CalledByNative; |
30 import org.chromium.base.annotations.JNINamespace; | 31 import org.chromium.base.annotations.JNINamespace; |
31 | 32 |
32 import java.util.ArrayList; | 33 import java.util.ArrayList; |
33 import java.util.HashMap; | 34 import java.util.HashMap; |
34 import java.util.List; | 35 import java.util.List; |
35 import java.util.UUID; | 36 import java.util.UUID; |
36 | 37 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
103 protected final Context mContext; | 104 protected final Context mContext; |
104 protected BluetoothLeScannerWrapper mScannerWrapper; | 105 protected BluetoothLeScannerWrapper mScannerWrapper; |
105 | 106 |
106 /** | 107 /** |
107 * Creates a BluetoothAdapterWrapper using the default | 108 * Creates a BluetoothAdapterWrapper using the default |
108 * android.bluetooth.BluetoothAdapter. May fail if the default adapter | 109 * android.bluetooth.BluetoothAdapter. May fail if the default adapter |
109 * is not available or if the application does not have sufficient | 110 * is not available or if the application does not have sufficient |
110 * permissions. | 111 * permissions. |
111 */ | 112 */ |
112 @CalledByNative("BluetoothAdapterWrapper") | 113 @CalledByNative("BluetoothAdapterWrapper") |
113 public static BluetoothAdapterWrapper createWithDefaultAdapter(Context c ontext) { | 114 public static BluetoothAdapterWrapper createWithDefaultAdapter() { |
114 final boolean hasMinAPI = Build.VERSION.SDK_INT >= Build.VERSION_COD ES.M; | 115 final boolean hasMinAPI = Build.VERSION.SDK_INT >= Build.VERSION_COD ES.M; |
115 if (!hasMinAPI) { | 116 if (!hasMinAPI) { |
116 Log.i(TAG, "BluetoothAdapterWrapper.create failed: SDK version ( %d) too low.", | 117 Log.i(TAG, "BluetoothAdapterWrapper.create failed: SDK version ( %d) too low.", |
117 Build.VERSION.SDK_INT); | 118 Build.VERSION.SDK_INT); |
118 return null; | 119 return null; |
119 } | 120 } |
120 | 121 |
121 final boolean hasPermissions = | 122 final boolean hasPermissions = |
122 context.checkCallingOrSelfPermission(Manifest.permission.BLU ETOOTH) | 123 ContextUtils.getApplicationContext().checkCallingOrSelfPermi ssion( |
124 Manifest.permission.BLUETOOTH) | |
123 == PackageManager.PERMISSION_GRANTED | 125 == PackageManager.PERMISSION_GRANTED |
124 && context.checkCallingOrSelfPermission(Manifest.permission. BLUETOOTH_ADMIN) | 126 && ContextUtils.getApplicationContext().checkCallingOrSelfPe rmission( |
127 Manifest.permission.BLUETOOTH_ADMIN) | |
125 == PackageManager.PERMISSION_GRANTED; | 128 == PackageManager.PERMISSION_GRANTED; |
126 if (!hasPermissions) { | 129 if (!hasPermissions) { |
127 Log.w(TAG, "BluetoothAdapterWrapper.create failed: Lacking Bluet ooth permissions."); | 130 Log.w(TAG, "BluetoothAdapterWrapper.create failed: Lacking Bluet ooth permissions."); |
128 return null; | 131 return null; |
129 } | 132 } |
130 | 133 |
131 // Only Low Energy currently supported, see BluetoothAdapterAndroid class note. | 134 // Only Low Energy currently supported, see BluetoothAdapterAndroid class note. |
132 final boolean hasLowEnergyFeature = | 135 final boolean hasLowEnergyFeature = |
133 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 | 136 Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 |
134 && context.getPackageManager().hasSystemFeature( | 137 && ContextUtils.getApplicationContext().getPackageManager(). hasSystemFeature( |
135 PackageManager.FEATURE_BLUETOOTH_LE); | 138 PackageManager.FEATURE_BLUETOOTH_LE); |
136 if (!hasLowEnergyFeature) { | 139 if (!hasLowEnergyFeature) { |
137 Log.i(TAG, "BluetoothAdapterWrapper.create failed: No Low Energy support."); | 140 Log.i(TAG, "BluetoothAdapterWrapper.create failed: No Low Energy support."); |
138 return null; | 141 return null; |
139 } | 142 } |
140 | 143 |
141 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); | 144 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); |
142 if (adapter == null) { | 145 if (adapter == null) { |
143 Log.i(TAG, "BluetoothAdapterWrapper.create failed: Default adapt er not found."); | 146 Log.i(TAG, "BluetoothAdapterWrapper.create failed: Default adapt er not found."); |
144 return null; | 147 return null; |
145 } else { | 148 } else { |
146 return new BluetoothAdapterWrapper(adapter, context); | 149 return new BluetoothAdapterWrapper(adapter, ContextUtils.getAppl icationContext()); |
147 } | 150 } |
148 } | 151 } |
149 | 152 |
150 public BluetoothAdapterWrapper(BluetoothAdapter adapter, Context context ) { | 153 public BluetoothAdapterWrapper(BluetoothAdapter adapter, Context context ) { |
151 mAdapter = adapter; | 154 mAdapter = adapter; |
152 mContext = context; | 155 mContext = context; |
153 } | 156 } |
154 | 157 |
155 public boolean disable() { | 158 public boolean disable() { |
156 return mAdapter.disable(); | 159 return mAdapter.disable(); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
310 mDescriptorsToWrappers; | 313 mDescriptorsToWrappers; |
311 | 314 |
312 public BluetoothDeviceWrapper(BluetoothDevice device) { | 315 public BluetoothDeviceWrapper(BluetoothDevice device) { |
313 mDevice = device; | 316 mDevice = device; |
314 mCharacteristicsToWrappers = | 317 mCharacteristicsToWrappers = |
315 new HashMap<BluetoothGattCharacteristic, BluetoothGattCharac teristicWrapper>(); | 318 new HashMap<BluetoothGattCharacteristic, BluetoothGattCharac teristicWrapper>(); |
316 mDescriptorsToWrappers = | 319 mDescriptorsToWrappers = |
317 new HashMap<BluetoothGattDescriptor, BluetoothGattDescriptor Wrapper>(); | 320 new HashMap<BluetoothGattDescriptor, BluetoothGattDescriptor Wrapper>(); |
318 } | 321 } |
319 | 322 |
320 public BluetoothGattWrapper connectGatt(Context context, boolean autoCon nect, | 323 public BluetoothGattWrapper connectGatt( |
scheib
2017/05/10 20:40:20
This method should preserve the Android SDK signat
Peter Wen
2017/05/11 14:01:34
Done.
| |
321 BluetoothGattCallbackWrapper callback, int transport) { | 324 boolean autoConnect, BluetoothGattCallbackWrapper callback, int transport) { |
322 return new BluetoothGattWrapper( | 325 return new BluetoothGattWrapper( |
323 mDevice.connectGatt(context, autoConnect, | 326 mDevice.connectGatt(ContextUtils.getApplicationContext(), au toConnect, |
324 new ForwardBluetoothGattCallbackToWrapper(callback, this), transport), | 327 new ForwardBluetoothGattCallbackToWrapper(callback, this), transport), |
325 this); | 328 this); |
326 } | 329 } |
327 | 330 |
328 public String getAddress() { | 331 public String getAddress() { |
329 return mDevice.getAddress(); | 332 return mDevice.getAddress(); |
330 } | 333 } |
331 | 334 |
332 public int getBluetoothClass_getDeviceClass() { | 335 public int getBluetoothClass_getDeviceClass() { |
333 if (mDevice == null || mDevice.getBluetoothClass() == null) { | 336 if (mDevice == null || mDevice.getBluetoothClass() == null) { |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
609 | 612 |
610 public byte[] getValue() { | 613 public byte[] getValue() { |
611 return mDescriptor.getValue(); | 614 return mDescriptor.getValue(); |
612 } | 615 } |
613 | 616 |
614 public boolean setValue(byte[] value) { | 617 public boolean setValue(byte[] value) { |
615 return mDescriptor.setValue(value); | 618 return mDescriptor.setValue(value); |
616 } | 619 } |
617 } | 620 } |
618 } | 621 } |
OLD | NEW |