summaryrefslogtreecommitdiffstats
path: root/core/java/android/server/BluetoothService.java
diff options
context:
space:
mode:
authorNick Pelly <npelly@google.com>2009-10-12 11:11:38 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2009-10-12 11:11:38 -0700
commit77df9d6e0ca56a34c66a1e30e9696085ddbd9038 (patch)
treeba59173dbb132df09cac6cbcfa28378a38fa57f6 /core/java/android/server/BluetoothService.java
parent7fa610638b09f2a4a29d7df1b16d2fe686b5e5e6 (diff)
parentd301c90446644f63cda9b9263f83332676065bb4 (diff)
downloadframeworks_base-77df9d6e0ca56a34c66a1e30e9696085ddbd9038.zip
frameworks_base-77df9d6e0ca56a34c66a1e30e9696085ddbd9038.tar.gz
frameworks_base-77df9d6e0ca56a34c66a1e30e9696085ddbd9038.tar.bz2
am d301c904: Merge change I305c181c into eclair
Merge commit 'd301c90446644f63cda9b9263f83332676065bb4' into eclair-mr2 * commit 'd301c90446644f63cda9b9263f83332676065bb4': Delay 500ms between each registering each SDP record using sdptool.
Diffstat (limited to 'core/java/android/server/BluetoothService.java')
-rw-r--r--core/java/android/server/BluetoothService.java36
1 files changed, 32 insertions, 4 deletions
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index f0bd249..0db29a4 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -208,6 +208,7 @@ public class BluetoothService extends IBluetooth.Stub {
return false;
}
setBluetoothState(BluetoothAdapter.STATE_TURNING_OFF);
+ mHandler.removeMessages(MESSAGE_REGISTER_SDP_RECORDS);
// Allow 3 seconds for profiles to gracefully disconnect
// TODO: Introduce a callback mechanism so that each profile can notify
@@ -327,12 +328,39 @@ public class BluetoothService extends IBluetooth.Stub {
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_REGISTER_SDP_RECORDS:
- //TODO: Don't assume HSP/HFP is running, don't use sdptool,
- if (isEnabled()) {
+ if (!isEnabled()) {
+ return;
+ }
+ // SystemService.start() forks sdptool to register service
+ // records. It can fail to register some records if it is
+ // forked multiple times in a row, probably because there is
+ // some race in sdptool or bluez when operated in parallel.
+ // As a workaround, delay 500ms between each fork of sdptool.
+ // TODO: Don't fork sdptool in order to regsiter service
+ // records, use a DBUS call instead.
+ switch (msg.arg1) {
+ case 1:
+ Log.d(TAG, "Registering hsag record");
SystemService.start("hsag");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 2, -1), 500);
+ break;
+ case 2:
+ Log.d(TAG, "Registering hfag record");
SystemService.start("hfag");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 3, -1), 500);
+ break;
+ case 3:
+ Log.d(TAG, "Registering opush record");
SystemService.start("opush");
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 4, -1), 500);
+ break;
+ case 4:
+ Log.d(TAG, "Registering pbap record");
SystemService.start("pbap");
+ break;
}
break;
case MESSAGE_FINISH_DISABLE:
@@ -402,8 +430,8 @@ public class BluetoothService extends IBluetooth.Stub {
}
mIsDiscovering = false;
mBondState.loadBondState();
- mHandler.sendMessageDelayed(mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS),
- 3000);
+ mHandler.sendMessageDelayed(
+ mHandler.obtainMessage(MESSAGE_REGISTER_SDP_RECORDS, 1, -1), 3000);
// Log bluetooth on to battery stats.
long ident = Binder.clearCallingIdentity();