diff options
author | Zhihai Xu <zhihaixu@google.com> | 2012-11-01 12:47:49 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-11-01 12:47:49 -0700 |
commit | eddc88fbe59c6d26f833d0f37b13a475325ef4fa (patch) | |
tree | efe96dc1b372e14fdda2e47ba68718cc72abc60c /services/java/com | |
parent | 18ab55402f437f56930f64e813c4c2ae74fa5860 (diff) | |
parent | 9ae23b7d2215de2737fb3752ad9af19bbe07388c (diff) | |
download | frameworks_base-eddc88fbe59c6d26f833d0f37b13a475325ef4fa.zip frameworks_base-eddc88fbe59c6d26f833d0f37b13a475325ef4fa.tar.gz frameworks_base-eddc88fbe59c6d26f833d0f37b13a475325ef4fa.tar.bz2 |
am 9ae23b7d: am 0de49148: Merge "Fix for BluetoothAdapter.getAddress() when BT is off on some devices" into jb-mr1-dev
* commit '9ae23b7d2215de2737fb3752ad9af19bbe07388c':
Fix for BluetoothAdapter.getAddress() when BT is off on some devices
Diffstat (limited to 'services/java/com')
-rwxr-xr-x | services/java/com/android/server/BluetoothManagerService.java | 62 |
1 files changed, 40 insertions, 22 deletions
diff --git a/services/java/com/android/server/BluetoothManagerService.java b/services/java/com/android/server/BluetoothManagerService.java index 6ff33d7..69ccbc7 100755 --- a/services/java/com/android/server/BluetoothManagerService.java +++ b/services/java/com/android/server/BluetoothManagerService.java @@ -53,6 +53,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { private static final String BLUETOOTH_PERM = android.Manifest.permission.BLUETOOTH; private static final String ACTION_SERVICE_STATE_CHANGED="com.android.bluetooth.btservice.action.STATE_CHANGED"; private static final String EXTRA_ACTION="action"; + private static final String SECURE_SETTINGS_BLUETOOTH_ADDR_VALID="bluetooth_addr_valid"; private static final String SECURE_SETTINGS_BLUETOOTH_ADDRESS="bluetooth_address"; private static final String SECURE_SETTINGS_BLUETOOTH_NAME="bluetooth_name"; private static final int TIMEOUT_BIND_MS = 3000; //Maximum msec to wait for a bind @@ -174,7 +175,9 @@ class BluetoothManagerService extends IBluetoothManager.Stub { //Enable if (DBG) Log.d(TAG, "Auto-enabling Bluetooth."); enableHelper(); - } else if (!isNameAndAddressSet()) { + } + + if (!isNameAndAddressSet()) { //Sync the Bluetooth name and address from the Bluetooth Adapter if (DBG) Log.d(TAG,"Retrieving Bluetooth Adapter name and address..."); getNameAndAddress(); @@ -222,11 +225,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub { */ private void loadStoredNameAndAddress() { if (DBG) Log.d(TAG, "Loading stored name and address"); + if (mContext.getResources().getBoolean + (com.android.internal.R.bool.config_bluetooth_address_validation) && + Settings.Secure.getInt(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDR_VALID, 0) == 0) { + // if the valid flag is not set, don't load the address and name + if (DBG) Log.d(TAG, "invalid bluetooth name and address stored"); + return; + } mName = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_NAME); mAddress = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDRESS); - if (mName == null || mAddress == null) { - if (DBG) Log.d(TAG, "Name or address not cached..."); - } + if (DBG) Log.d(TAG, "Stored bluetooth Name=" + mName + ",Address=" + mAddress); } /** @@ -249,6 +257,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (DBG) Log.d(TAG,"Stored Bluetoothaddress: " + Settings.Secure.getString(mContentResolver,SECURE_SETTINGS_BLUETOOTH_ADDRESS)); } + + if ((name != null) && (address != null)) { + Settings.Secure.putInt(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDR_VALID, 1); + } } public IBluetooth registerAdapter(IBluetoothManagerCallback callback){ @@ -560,8 +572,19 @@ class BluetoothManagerService extends IBluetoothManager.Stub { break; } case MESSAGE_SAVE_NAME_AND_ADDRESS: { + boolean unbind = false; if (DBG) Log.d(TAG,"MESSAGE_SAVE_NAME_AND_ADDRESS"); synchronized(mConnection) { + if (!mEnable && mBluetooth != null) { + try { + mBluetooth.enable(); + } catch (RemoteException e) { + Log.e(TAG,"Unable to call enable()",e); + } + } + } + if (mBluetooth != null) waitForOnOff(true, false); + synchronized(mConnection) { if (mBluetooth != null) { String name = null; String address = null; @@ -575,7 +598,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { if (name != null && address != null) { storeNameAndAddress(name,address); if (mConnection.isGetNameAddressOnly()) { - unbindAndFinish(); + unbind = true; } } else { if (msg.arg1 < MAX_SAVE_RETRIES) { @@ -586,10 +609,17 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } else { Log.w(TAG,"Maximum name/address remote retrieval retry exceeded"); if (mConnection.isGetNameAddressOnly()) { - unbindAndFinish(); + unbind = true; } } } + if (!mEnable) { + try { + mBluetooth.disable(); + } catch (RemoteException e) { + Log.e(TAG,"Unable to call disable()",e); + } + } } else { // rebind service by Request GET NAME AND ADDRESS // if service is unbinded by disable or @@ -598,6 +628,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub { mHandler.sendMessage(getMsg); } } + if (!mEnable && mBluetooth != null) waitForOnOff(false, true); + if (unbind) { + unbindAndFinish(); + } break; } case MESSAGE_ENABLE: @@ -677,14 +711,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub { //Inform BluetoothAdapter instances that service is up sendBluetoothServiceUpCallback(); - //Check if name and address is loaded if not get it first. - if (!isNameAndAddressSet()) { - try { - storeNameAndAddress(mBluetooth.getName(), - mBluetooth.getAddress()); - } catch (RemoteException e) {Log.e(TAG, "", e);}; - } - //Do enable request try { if (mQuietEnable == false) { @@ -873,14 +899,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub { sendBluetoothServiceUpCallback(); } - //Check if name and address is loaded if not get it first. - if (!isNameAndAddressSet()) { - try { - if (DBG) Log.d(TAG,"Getting and storing Bluetooth name and address prior to enable."); - storeNameAndAddress(mBluetooth.getName(),mBluetooth.getAddress()); - } catch (RemoteException e) {Log.e(TAG, "", e);}; - } - //Enable bluetooth try { if (!mQuietEnable) { |