Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(818)

Side by Side Diff: device/bluetooth/android/java/src/org/chromium/device/bluetooth/Wrappers.java

Issue 1610053005: bluetooth: android: Fix a couple of crashes when adapter is turned on/off. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.TargetApi; 8 import android.annotation.TargetApi;
9 import android.bluetooth.BluetoothAdapter; 9 import android.bluetooth.BluetoothAdapter;
10 import android.bluetooth.BluetoothDevice; 10 import android.bluetooth.BluetoothDevice;
(...skipping 28 matching lines...) Expand all
39 * 39 *
40 * Each Wrapper base class accepts an Android API object and passes through 40 * Each Wrapper base class accepts an Android API object and passes through
41 * calls to it. When under test, Fake subclasses override all methods that 41 * calls to it. When under test, Fake subclasses override all methods that
42 * pass through to the Android object and instead provide fake implementations. 42 * pass through to the Android object and instead provide fake implementations.
43 */ 43 */
44 @JNINamespace("device") 44 @JNINamespace("device")
45 @TargetApi(Build.VERSION_CODES.LOLLIPOP) 45 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
46 class Wrappers { 46 class Wrappers {
47 private static final String TAG = "Bluetooth"; 47 private static final String TAG = "Bluetooth";
48 48
49 public static final int DEVICE_CLASS_UNSPECIFIED = 0x1F00;
50
49 /** 51 /**
50 * Wraps android.bluetooth.BluetoothAdapter. 52 * Wraps android.bluetooth.BluetoothAdapter.
51 */ 53 */
52 static class BluetoothAdapterWrapper { 54 static class BluetoothAdapterWrapper {
53 private final BluetoothAdapter mAdapter; 55 private final BluetoothAdapter mAdapter;
54 protected final ContextWrapper mContext; 56 protected final ContextWrapper mContext;
55 protected final BluetoothLeScannerWrapper mScanner; 57 protected final BluetoothLeScannerWrapper mScanner;
56 58
57 /** 59 /**
58 * Creates a BluetoothAdapterWrapper using the default 60 * Creates a BluetoothAdapterWrapper using the default
(...skipping 28 matching lines...) Expand all
87 if (!hasLowEnergyFeature) { 89 if (!hasLowEnergyFeature) {
88 Log.i(TAG, "BluetoothAdapterWrapper.create failed: No Low Energy support."); 90 Log.i(TAG, "BluetoothAdapterWrapper.create failed: No Low Energy support.");
89 return null; 91 return null;
90 } 92 }
91 93
92 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); 94 BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
93 if (adapter == null) { 95 if (adapter == null) {
94 Log.i(TAG, "BluetoothAdapterWrapper.create failed: Default adapt er not found."); 96 Log.i(TAG, "BluetoothAdapterWrapper.create failed: Default adapt er not found.");
95 return null; 97 return null;
96 } else { 98 } else {
97 return new BluetoothAdapterWrapper(adapter, new ContextWrapper(c ontext), 99 BluetoothLeScanner scanner = adapter.getBluetoothLeScanner();
scheib 2016/01/21 05:33:51 In my patch you'll see that I moved the code for o
98 new BluetoothLeScannerWrapper(adapter.getBluetoothLeScan ner())); 100 if (scanner != null) {
101 return new BluetoothAdapterWrapper(adapter, new ContextWrapp er(context),
102 new BluetoothLeScannerWrapper(scanner));
103 } else {
104 return null;
105 }
99 } 106 }
100 } 107 }
101 108
102 public BluetoothAdapterWrapper(BluetoothAdapter adapter, ContextWrapper context, 109 public BluetoothAdapterWrapper(BluetoothAdapter adapter, ContextWrapper context,
103 BluetoothLeScannerWrapper scanner) { 110 BluetoothLeScannerWrapper scanner) {
104 mAdapter = adapter; 111 mAdapter = adapter;
105 mContext = context; 112 mContext = context;
106 mScanner = scanner; 113 mScanner = scanner;
107 } 114 }
108 115
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 } 171 }
165 172
166 public void startScan( 173 public void startScan(
167 List<ScanFilter> filters, int scanSettingsScanMode, ScanCallback Wrapper callback) { 174 List<ScanFilter> filters, int scanSettingsScanMode, ScanCallback Wrapper callback) {
168 ScanSettings settings = 175 ScanSettings settings =
169 new ScanSettings.Builder().setScanMode(scanSettingsScanMode) .build(); 176 new ScanSettings.Builder().setScanMode(scanSettingsScanMode) .build();
170 177
171 ForwardScanCallbackToWrapper callbackForwarder = 178 ForwardScanCallbackToWrapper callbackForwarder =
172 new ForwardScanCallbackToWrapper(callback); 179 new ForwardScanCallbackToWrapper(callback);
173 mCallbacks.put(callback, callbackForwarder); 180 mCallbacks.put(callback, callbackForwarder);
174
175 mScanner.startScan(filters, settings, callbackForwarder); 181 mScanner.startScan(filters, settings, callbackForwarder);
176 } 182 }
177 183
178 public void stopScan(ScanCallbackWrapper callback) { 184 public void stopScan(ScanCallbackWrapper callback) {
179 ForwardScanCallbackToWrapper callbackForwarder = mCallbacks.remove(c allback); 185 ForwardScanCallbackToWrapper callbackForwarder = mCallbacks.remove(c allback);
180 mScanner.stopScan(callbackForwarder); 186 mScanner.stopScan(callbackForwarder);
181 } 187 }
182 } 188 }
183 189
184 /** 190 /**
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 mDevice.connectGatt(context, autoConnect, 275 mDevice.connectGatt(context, autoConnect,
270 new ForwardBluetoothGattCallbackToWrapper(callback, this)), 276 new ForwardBluetoothGattCallbackToWrapper(callback, this)),
271 this); 277 this);
272 } 278 }
273 279
274 public String getAddress() { 280 public String getAddress() {
275 return mDevice.getAddress(); 281 return mDevice.getAddress();
276 } 282 }
277 283
278 public int getBluetoothClass_getDeviceClass() { 284 public int getBluetoothClass_getDeviceClass() {
285 if (mDevice == null || mDevice.getBluetoothClass() == null) {
scheib 2016/01/21 05:33:51 OK, no test needed here because we don't Fake getB
286 // BluetoothDevice.getBluetoothClass() returns null if adapter h as been powered off.
287 // Return DEVICE_CLASS_UNSPECIFIED in these cases.
288 return DEVICE_CLASS_UNSPECIFIED;
289 }
279 return mDevice.getBluetoothClass().getDeviceClass(); 290 return mDevice.getBluetoothClass().getDeviceClass();
280 } 291 }
281 292
282 public int getBondState() { 293 public int getBondState() {
283 return mDevice.getBondState(); 294 return mDevice.getBondState();
284 } 295 }
285 296
286 public String getName() { 297 public String getName() {
287 return mDevice.getName(); 298 return mDevice.getName();
288 } 299 }
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 517
507 public byte[] getValue() { 518 public byte[] getValue() {
508 return mDescriptor.getValue(); 519 return mDescriptor.getValue();
509 } 520 }
510 521
511 public boolean setValue(byte[] value) { 522 public boolean setValue(byte[] value) {
512 return mDescriptor.setValue(value); 523 return mDescriptor.setValue(value);
513 } 524 }
514 } 525 }
515 } 526 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698