From 997c7612a8cf63748165144b423ff2ae8e73c3e9 Mon Sep 17 00:00:00 2001 From: Nick Pelly <> Date: Tue, 24 Mar 2009 20:44:48 -0700 Subject: [PATCH] Automated import from //branches/donutburger/...@141696,141696 --- .../server/BluetoothDeviceService.java | 20 ++++++++++++++++++- .../android/server/BluetoothEventLoop.java | 4 ++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/java/android/server/BluetoothDeviceService.java b/core/java/android/server/BluetoothDeviceService.java index a815e573ee78b..c61b25ad98872 100644 --- a/core/java/android/server/BluetoothDeviceService.java +++ b/core/java/android/server/BluetoothDeviceService.java @@ -63,8 +63,10 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub { private BluetoothEventLoop mEventLoop; private IntentFilter mIntentFilter; private boolean mIsAirplaneSensitive; - private final BondState mBondState = new BondState(); // local cache of bondings private int mBluetoothState; + private boolean mRestart = false; // need to call enable() after disable() + + private final BondState mBondState = new BondState(); // local cache of bondings private boolean mIsDiscovering; private final IBatteryStats mBatteryStats; @@ -218,6 +220,11 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub { } finally { Binder.restoreCallingIdentity(ident); } + + if (mRestart) { + mRestart = false; + enable(); + } } /** Bring up BT and persist BT on in settings */ @@ -252,6 +259,17 @@ public class BluetoothDeviceService extends IBluetoothDevice.Stub { return true; } + /** Forcibly restart Bluetooth if it is on */ + /* package */ synchronized void restart() { + if (mBluetoothState != BluetoothDevice.BLUETOOTH_STATE_ON) { + return; + } + mRestart = true; + if (!disable(false)) { + mRestart = false; + } + } + private synchronized void setBluetoothState(int state) { if (state == mBluetoothState) { return; diff --git a/core/java/android/server/BluetoothEventLoop.java b/core/java/android/server/BluetoothEventLoop.java index 6eabea461dec1..11c297cb99e4d 100644 --- a/core/java/android/server/BluetoothEventLoop.java +++ b/core/java/android/server/BluetoothEventLoop.java @@ -76,8 +76,7 @@ class BluetoothEventLoop { } break; case EVENT_RESTART_BLUETOOTH: - mBluetoothService.disable(); - mBluetoothService.enable(); + mBluetoothService.restart(); break; } } @@ -170,6 +169,7 @@ class BluetoothEventLoop { if (mode >= 0) { Intent intent = new Intent(BluetoothIntent.SCAN_MODE_CHANGED_ACTION); intent.putExtra(BluetoothIntent.SCAN_MODE, mode); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); mContext.sendBroadcast(intent, BLUETOOTH_PERM); } }