From dcbc97fc28f4eb5910acc11dfac5efcd597c737d Mon Sep 17 00:00:00 2001 From: Matthew Xie Date: Fri, 16 Sep 2011 16:57:24 -0700 Subject: Check null of pidPair to skip the case the service record has been removed Check null of pidPair instead of pidPair.first which caused a nullpointer exception. clean local variables after sending out STATE_OFF intent. Check bluetooth state in removeServiceRecord. bug 5330367 Change-Id: Ib0af8143223bea48d3f587cca18544c4aef29980 --- .../server/BluetoothAdapterStateMachine.java | 26 ++++++++++------------ 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'core/java/android/server/BluetoothAdapterStateMachine.java') diff --git a/core/java/android/server/BluetoothAdapterStateMachine.java b/core/java/android/server/BluetoothAdapterStateMachine.java index ac46ee2d08d3..d26364ec7159 100644 --- a/core/java/android/server/BluetoothAdapterStateMachine.java +++ b/core/java/android/server/BluetoothAdapterStateMachine.java @@ -434,6 +434,10 @@ final class BluetoothAdapterStateMachine extends StateMachine { if (mPublicState == BluetoothAdapter.STATE_TURNING_OFF) { transitionTo(mHotOff); finishSwitchingOff(); + if (!mContext.getResources().getBoolean + (com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) { + deferMessage(obtainMessage(TURN_COLD)); + } } } else { if (mPublicState != BluetoothAdapter.STATE_TURNING_ON) { @@ -486,16 +490,6 @@ final class BluetoothAdapterStateMachine extends StateMachine { } return retValue; } - - private void finishSwitchingOff() { - mBluetoothService.finishDisable(); - if (mContext.getResources().getBoolean - (com.android.internal.R.bool.config_bluetooth_adapter_quick_switch)) { - broadcastState(BluetoothAdapter.STATE_OFF); - } else { - deferMessage(obtainMessage(TURN_COLD)); - } - } } private class BluetoothOn extends State { @@ -656,12 +650,10 @@ final class BluetoothAdapterStateMachine extends StateMachine { //$FALL-THROUGH$ all devices are already disconnected case ALL_DEVICES_DISCONNECTED: removeMessages(DEVICES_DISCONNECT_TIMEOUT); - mBluetoothService.finishDisable(); - broadcastState(BluetoothAdapter.STATE_OFF); + finishSwitchingOff(); break; case DEVICES_DISCONNECT_TIMEOUT: - mBluetoothService.finishDisable(); - broadcastState(BluetoothAdapter.STATE_OFF); + finishSwitchingOff(); Log.e(TAG, "Devices fail to disconnect, reseting..."); transitionTo(mHotOff); deferMessage(obtainMessage(TURN_COLD)); @@ -695,6 +687,12 @@ final class BluetoothAdapterStateMachine extends StateMachine { } } + private void finishSwitchingOff() { + mBluetoothService.finishDisable(); + broadcastState(BluetoothAdapter.STATE_OFF); + mBluetoothService.cleanupAfterFinishDisable(); + } + private void shutoffBluetooth() { mBluetoothService.shutoffBluetooth(); mEventLoop.stop(); -- cgit v1.2.3