Merge "Fix for BluetoothAdapter.getAddress() when BT is off on some devices" into jb-mr1-dev

This commit is contained in:
Zhihai Xu
2012-11-01 12:43:27 -07:00
committed by Android (Google) Code Review
3 changed files with 44 additions and 26 deletions

View File

@ -650,9 +650,9 @@
speech --> speech -->
<bool name="config_bluetooth_wide_band_speech">true</bool> <bool name="config_bluetooth_wide_band_speech">true</bool>
<!-- Boolean indicating if current platform supports quick switch-on/off of <!-- Boolean indicating if current platform need do one-time bluetooth address
Bluetooth Module --> re-validation -->
<bool name="config_bluetooth_adapter_quick_switch">true</bool> <bool name="config_bluetooth_address_validation">false</bool>
<!-- The default data-use polling period. --> <!-- The default data-use polling period. -->
<integer name="config_datause_polling_period_sec">600</integer> <integer name="config_datause_polling_period_sec">600</integer>

View File

@ -245,7 +245,7 @@
<java-symbol type="bool" name="action_bar_embed_tabs_pre_jb" /> <java-symbol type="bool" name="action_bar_embed_tabs_pre_jb" />
<java-symbol type="bool" name="action_bar_expanded_action_views_exclusive" /> <java-symbol type="bool" name="action_bar_expanded_action_views_exclusive" />
<java-symbol type="bool" name="config_allowActionMenuItemTextWithIcon" /> <java-symbol type="bool" name="config_allowActionMenuItemTextWithIcon" />
<java-symbol type="bool" name="config_bluetooth_adapter_quick_switch" /> <java-symbol type="bool" name="config_bluetooth_address_validation" />
<java-symbol type="bool" name="config_bluetooth_sco_off_call" /> <java-symbol type="bool" name="config_bluetooth_sco_off_call" />
<java-symbol type="bool" name="config_cellBroadcastAppLinks" /> <java-symbol type="bool" name="config_cellBroadcastAppLinks" />
<java-symbol type="bool" name="config_duplicate_port_omadm_wappush" /> <java-symbol type="bool" name="config_duplicate_port_omadm_wappush" />

View File

@ -53,6 +53,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
private static final String BLUETOOTH_PERM = android.Manifest.permission.BLUETOOTH; 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 ACTION_SERVICE_STATE_CHANGED="com.android.bluetooth.btservice.action.STATE_CHANGED";
private static final String EXTRA_ACTION="action"; 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_ADDRESS="bluetooth_address";
private static final String SECURE_SETTINGS_BLUETOOTH_NAME="bluetooth_name"; 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 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 //Enable
if (DBG) Log.d(TAG, "Auto-enabling Bluetooth."); if (DBG) Log.d(TAG, "Auto-enabling Bluetooth.");
enableHelper(); enableHelper();
} else if (!isNameAndAddressSet()) { }
if (!isNameAndAddressSet()) {
//Sync the Bluetooth name and address from the Bluetooth Adapter //Sync the Bluetooth name and address from the Bluetooth Adapter
if (DBG) Log.d(TAG,"Retrieving Bluetooth Adapter name and address..."); if (DBG) Log.d(TAG,"Retrieving Bluetooth Adapter name and address...");
getNameAndAddress(); getNameAndAddress();
@ -222,11 +225,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
*/ */
private void loadStoredNameAndAddress() { private void loadStoredNameAndAddress() {
if (DBG) Log.d(TAG, "Loading stored name and address"); 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); mName = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_NAME);
mAddress = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDRESS); mAddress = Settings.Secure.getString(mContentResolver, SECURE_SETTINGS_BLUETOOTH_ADDRESS);
if (mName == null || mAddress == null) { if (DBG) Log.d(TAG, "Stored bluetooth Name=" + mName + ",Address=" + mAddress);
if (DBG) Log.d(TAG, "Name or address not cached...");
}
} }
/** /**
@ -249,6 +257,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
if (DBG) Log.d(TAG,"Stored Bluetoothaddress: " + if (DBG) Log.d(TAG,"Stored Bluetoothaddress: " +
Settings.Secure.getString(mContentResolver,SECURE_SETTINGS_BLUETOOTH_ADDRESS)); 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){ public IBluetooth registerAdapter(IBluetoothManagerCallback callback){
@ -560,7 +572,18 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
break; break;
} }
case MESSAGE_SAVE_NAME_AND_ADDRESS: { case MESSAGE_SAVE_NAME_AND_ADDRESS: {
boolean unbind = false;
if (DBG) Log.d(TAG,"MESSAGE_SAVE_NAME_AND_ADDRESS"); 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) { synchronized(mConnection) {
if (mBluetooth != null) { if (mBluetooth != null) {
String name = null; String name = null;
@ -575,7 +598,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
if (name != null && address != null) { if (name != null && address != null) {
storeNameAndAddress(name,address); storeNameAndAddress(name,address);
if (mConnection.isGetNameAddressOnly()) { if (mConnection.isGetNameAddressOnly()) {
unbindAndFinish(); unbind = true;
} }
} else { } else {
if (msg.arg1 < MAX_SAVE_RETRIES) { if (msg.arg1 < MAX_SAVE_RETRIES) {
@ -586,10 +609,17 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
} else { } else {
Log.w(TAG,"Maximum name/address remote retrieval retry exceeded"); Log.w(TAG,"Maximum name/address remote retrieval retry exceeded");
if (mConnection.isGetNameAddressOnly()) { if (mConnection.isGetNameAddressOnly()) {
unbindAndFinish(); unbind = true;
} }
} }
} }
if (!mEnable) {
try {
mBluetooth.disable();
} catch (RemoteException e) {
Log.e(TAG,"Unable to call disable()",e);
}
}
} else { } else {
// rebind service by Request GET NAME AND ADDRESS // rebind service by Request GET NAME AND ADDRESS
// if service is unbinded by disable or // if service is unbinded by disable or
@ -598,6 +628,10 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
mHandler.sendMessage(getMsg); mHandler.sendMessage(getMsg);
} }
} }
if (!mEnable && mBluetooth != null) waitForOnOff(false, true);
if (unbind) {
unbindAndFinish();
}
break; break;
} }
case MESSAGE_ENABLE: case MESSAGE_ENABLE:
@ -677,14 +711,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
//Inform BluetoothAdapter instances that service is up //Inform BluetoothAdapter instances that service is up
sendBluetoothServiceUpCallback(); 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 //Do enable request
try { try {
if (mQuietEnable == false) { if (mQuietEnable == false) {
@ -873,14 +899,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
sendBluetoothServiceUpCallback(); 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 //Enable bluetooth
try { try {
if (!mQuietEnable) { if (!mQuietEnable) {