OSDN Git Service

Bluetooth: Ensure Bluetooth interface handle is valid
authorNitin Arora <niarora@codeaurora.org>
Wed, 29 Apr 2015 19:35:03 +0000 (12:35 -0700)
committerAndre Eisenbach <eisenbach@google.com>
Thu, 7 May 2015 05:24:23 +0000 (22:24 -0700)
This change adds null checks to Bluetooth interface handle to prevent
using null references when BluetoothService is not up. Also removed
the callbacks for the intermediate state removed for now as they are
not being used.

Change-Id: I0e72ff4da467a8bcf5a4e5ac48d8558e7f308c7e

services/core/java/com/android/server/BluetoothManagerService.java

index 1019faa..32b91d2 100644 (file)
@@ -512,7 +512,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
     private void onBluetoothGattServiceUp() {
         if (DBG) Log.d(TAG,"BluetoothGatt Service is Up");
         try{
-            if (isBleAppPresent() == false && mBluetooth.getState() == BluetoothAdapter.STATE_BLE_ON) {
+            if (isBleAppPresent() == false && mBluetooth != null
+                  && mBluetooth.getState() == BluetoothAdapter.STATE_BLE_ON) {
                 mBluetooth.onLeServiceUp();
 
                 // waive WRITE_SECURE_SETTINGS permission check
@@ -531,32 +532,26 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
      */
     private void sendBrEdrDownCallback() {
         if (DBG) Log.d(TAG,"Calling sendBrEdrDownCallback callbacks");
-        int n = mCallbacks.beginBroadcast();
+
+        if(mBluetooth == null) {
+            Log.w(TAG, "Bluetooth handle is null");
+            return;
+        }
 
         if (isBleAppPresent() == false) {
             try {
                 mBluetooth.onBrEdrDown();
             } catch(RemoteException e) {
-                Log.e(TAG,"Unable to call onBrEdrDown", e);
+                Log.e(TAG, "Call to onBrEdrDown() failed.", e);
             }
-        }
-        else{//need to stay at BLE ON. disconnect all Gatt connections
+        } else {
+            // Need to stay at BLE ON. Disconnect all Gatt connections
             try{
-                mBluetoothGatt.unregAll();//disconnectAll();
+                mBluetoothGatt.unregAll();
             } catch(RemoteException e) {
-                Log.e(TAG,"Unable to disconn all", e);
-            }
-        }
-
-        Log.d(TAG,"Broadcasting onBrEdrDown() to " + n + " receivers.");
-        for (int i=0; i <n; i++) {
-            try {
-                mCallbacks.getBroadcastItem(i).onBrEdrDown();
-            }  catch (RemoteException e) {
-                Log.e(TAG, "Unable to call sendBrEdrDownCallback() on callback #" + i, e);
+                Log.e(TAG, "Unable to disconnect all apps.", e);
             }
         }
-        mCallbacks.finishBroadcast();
     }
 
     /** @hide*/