summaryrefslogtreecommitdiffstats
path: root/core/java/android/server
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/server')
-rw-r--r--core/java/android/server/BluetoothService.java76
1 files changed, 48 insertions, 28 deletions
diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java
index 6720145..31e5a7b 100644
--- a/core/java/android/server/BluetoothService.java
+++ b/core/java/android/server/BluetoothService.java
@@ -28,7 +28,8 @@ import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
-import android.bluetooth.BluetoothProfileConnectionState;
+import android.bluetooth.BluetoothDeviceProfileState;
+import android.bluetooth.BluetoothProfileState;
import android.bluetooth.BluetoothSocket;
import android.bluetooth.BluetoothUuid;
import android.bluetooth.IBluetooth;
@@ -123,7 +124,9 @@ public class BluetoothService extends IBluetooth.Stub {
private final HashMap<Integer, Integer> mServiceRecordToPid;
- private final HashMap<String, BluetoothProfileConnectionState> mProfileConnectionMgr;
+ private final HashMap<String, BluetoothDeviceProfileState> mDeviceProfileState;
+ private final BluetoothProfileState mA2dpProfileState;
+ private final BluetoothProfileState mHfpProfileState;
private BluetoothA2dpService mA2dpService;
private static String mDockAddress;
@@ -183,7 +186,12 @@ public class BluetoothService extends IBluetooth.Stub {
mUuidIntentTracker = new ArrayList<String>();
mUuidCallbackTracker = new HashMap<RemoteService, IBluetoothCallback>();
mServiceRecordToPid = new HashMap<Integer, Integer>();
- mProfileConnectionMgr = new HashMap<String, BluetoothProfileConnectionState>();
+ mDeviceProfileState = new HashMap<String, BluetoothDeviceProfileState>();
+ mA2dpProfileState = new BluetoothProfileState(mContext, BluetoothProfileState.A2DP);
+ mHfpProfileState = new BluetoothProfileState(mContext, BluetoothProfileState.HFP);
+
+ mHfpProfileState.start();
+ mA2dpProfileState.start();
IntentFilter filter = new IntentFilter();
registerForAirplaneMode(filter);
@@ -1179,9 +1187,9 @@ public class BluetoothService extends IBluetooth.Stub {
if (!BluetoothAdapter.checkBluetoothAddress(address)) {
return false;
}
- BluetoothProfileConnectionState state = mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
if (state != null) {
- state.sendMessage(BluetoothProfileConnectionState.UNPAIR);
+ state.sendMessage(BluetoothDeviceProfileState.UNPAIR);
return true;
} else {
return false;
@@ -1942,53 +1950,65 @@ public class BluetoothService extends IBluetooth.Stub {
}
public boolean connectHeadset(String address) {
- BluetoothProfileConnectionState state = mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
if (state != null) {
- state.sendMessage(BluetoothProfileConnectionState.CONNECT_HFP_OUTGOING);
- return true;
+ Message msg = new Message();
+ msg.arg1 = BluetoothDeviceProfileState.CONNECT_HFP_OUTGOING;
+ msg.obj = state;
+ mHfpProfileState.sendMessage(msg);
+ return true;
}
return false;
}
public boolean disconnectHeadset(String address) {
- BluetoothProfileConnectionState state = mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
if (state != null) {
- state.sendMessage(BluetoothProfileConnectionState.DISCONNECT_HFP_OUTGOING);
+ Message msg = new Message();
+ msg.arg1 = BluetoothDeviceProfileState.DISCONNECT_HFP_OUTGOING;
+ msg.obj = state;
+ mHfpProfileState.sendMessage(msg);
return true;
}
return false;
}
public boolean connectSink(String address) {
- BluetoothProfileConnectionState state = mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
if (state != null) {
- state.sendMessage(BluetoothProfileConnectionState.CONNECT_A2DP_OUTGOING);
- return true;
+ Message msg = new Message();
+ msg.arg1 = BluetoothDeviceProfileState.CONNECT_A2DP_OUTGOING;
+ msg.obj = state;
+ mA2dpProfileState.sendMessage(msg);
+ return true;
}
return false;
}
public boolean disconnectSink(String address) {
- BluetoothProfileConnectionState state = mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
if (state != null) {
- state.sendMessage(BluetoothProfileConnectionState.DISCONNECT_A2DP_OUTGOING);
+ Message msg = new Message();
+ msg.arg1 = BluetoothDeviceProfileState.DISCONNECT_A2DP_OUTGOING;
+ msg.obj = state;
+ mA2dpProfileState.sendMessage(msg);
return true;
}
return false;
}
- private BluetoothProfileConnectionState addProfileState(String address) {
- BluetoothProfileConnectionState state = mProfileConnectionMgr.get(address);
+ private BluetoothDeviceProfileState addProfileState(String address) {
+ BluetoothDeviceProfileState state = mDeviceProfileState.get(address);
if (state != null) return state;
- state = new BluetoothProfileConnectionState(mContext, address, this, mA2dpService);
- mProfileConnectionMgr.put(address, state);
+ state = new BluetoothDeviceProfileState(mContext, address, this, mA2dpService);
+ mDeviceProfileState.put(address, state);
state.start();
return state;
}
private void removeProfileState(String address) {
- mProfileConnectionMgr.remove(address);
+ mDeviceProfileState.remove(address);
}
private void initProfileState() {
@@ -2003,20 +2023,20 @@ public class BluetoothService extends IBluetooth.Stub {
for (String path : bonds) {
String address = getAddressFromObjectPath(path);
- BluetoothProfileConnectionState state = addProfileState(address);
+ BluetoothDeviceProfileState state = addProfileState(address);
// Allow 8 secs for SDP records to get registered.
Message msg = new Message();
- msg.what = BluetoothProfileConnectionState.AUTO_CONNECT_PROFILES;
+ msg.what = BluetoothDeviceProfileState.AUTO_CONNECT_PROFILES;
state.sendMessageDelayed(msg, 8000);
}
}
public boolean notifyIncomingConnection(String address) {
- BluetoothProfileConnectionState state =
- mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state =
+ mDeviceProfileState.get(address);
if (state != null) {
Message msg = new Message();
- msg.what = BluetoothProfileConnectionState.CONNECT_HFP_INCOMING;
+ msg.what = BluetoothDeviceProfileState.CONNECT_HFP_INCOMING;
state.sendMessage(msg);
return true;
}
@@ -2024,11 +2044,11 @@ public class BluetoothService extends IBluetooth.Stub {
}
/*package*/ boolean notifyIncomingA2dpConnection(String address) {
- BluetoothProfileConnectionState state =
- mProfileConnectionMgr.get(address);
+ BluetoothDeviceProfileState state =
+ mDeviceProfileState.get(address);
if (state != null) {
Message msg = new Message();
- msg.what = BluetoothProfileConnectionState.CONNECT_A2DP_INCOMING;
+ msg.what = BluetoothDeviceProfileState.CONNECT_A2DP_INCOMING;
state.sendMessage(msg);
return true;
}