Update supported profiles for voice capability.

Change-Id: If12f97ccc5d7d54d8d3e470dd4bc91fe9119b9cd
This commit is contained in:
Jaikumar Ganesh
2010-11-23 20:08:27 -08:00
parent 52322a9173
commit 8c04b90cc9
3 changed files with 50 additions and 50 deletions

View File

@@ -25,6 +25,7 @@ import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothUuid;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Resources;
@@ -584,44 +585,14 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
if (DEBUG) {
Log.e(TAG, "updating profiles for " + mDevice.getName());
boolean printUuids = true;
BluetoothClass bluetoothClass = mDevice.getBluetoothClass();
if (bluetoothClass != null) {
if (bluetoothClass.doesClassMatch(BluetoothClass.PROFILE_HEADSET) !=
mProfiles.contains(Profile.HEADSET)) {
Log.v(TAG, "headset classbits != uuid");
printUuids = true;
}
if (bluetoothClass.doesClassMatch(BluetoothClass.PROFILE_A2DP) !=
mProfiles.contains(Profile.A2DP)) {
Log.v(TAG, "a2dp classbits != uuid");
printUuids = true;
}
if (bluetoothClass.doesClassMatch(BluetoothClass.PROFILE_OPP) !=
mProfiles.contains(Profile.OPP)) {
Log.v(TAG, "opp classbits != uuid");
printUuids = true;
}
if (bluetoothClass.doesClassMatch(BluetoothClass.PROFILE_HID) !=
mProfiles.contains(Profile.HID)) {
Log.v(TAG, "hid classbits != uuid");
printUuids = true;
}
}
if (printUuids) {
if (bluetoothClass != null) Log.v(TAG, "Class: " + bluetoothClass.toString());
Log.v(TAG, "UUID:");
for (int i = 0; i < uuids.length; i++) {
Log.v(TAG, " " + uuids[i]);
}
}
}
return true;
}

View File

@@ -26,13 +26,13 @@ import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.ParcelUuid;
import android.util.Config;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
// TODO: have some notion of shutting down. Maybe a minute after they leave BT settings?
/**
@@ -48,7 +48,6 @@ public class LocalBluetoothManager {
/** Singleton instance. */
private static LocalBluetoothManager sInstance;
private boolean mInitialized;
private Context mContext;
/** If a BT-related activity is in the foreground, this will be it. */
@@ -89,22 +88,17 @@ public class LocalBluetoothManager {
synchronized (LocalBluetoothManager.class) {
if (sInstance == null) {
sInstance = new LocalBluetoothManager();
}
if (!sInstance.init(context)) {
return null;
}
LocalBluetoothProfileManager.init(sInstance);
}
return sInstance;
}
}
private boolean init(Context context) {
if (mInitialized) return true;
mInitialized = true;
// This will be around as long as this process is
mContext = context.getApplicationContext();
@@ -226,6 +220,12 @@ public class LocalBluetoothManager {
void setBluetoothStateInt(int state) {
mState = state;
if (state == BluetoothAdapter.STATE_ON) {
ParcelUuid[] uuids = mAdapter.getUuids();
LocalBluetoothProfileManager.updateLocalProfiles(getInstance(mContext), uuids);
}
if (state == BluetoothAdapter.STATE_ON ||
state == BluetoothAdapter.STATE_OFF) {
mCachedDeviceManager.onBluetoothStateChanged(state ==

View File

@@ -121,6 +121,30 @@ public abstract class LocalBluetoothProfileManager {
}
}
// TODO(): Combine the init and updateLocalProfiles codes.
// init can get called from various paths, it makes no sense to add and then delete.
public static void updateLocalProfiles(LocalBluetoothManager localManager, ParcelUuid[] uuids) {
if (!BluetoothUuid.containsAnyUuid(uuids, HEADSET_PROFILE_UUIDS)) {
sProfileMap.remove(Profile.HEADSET);
}
if (BluetoothUuid.containsAnyUuid(uuids, A2DP_PROFILE_UUIDS)) {
sProfileMap.remove(Profile.A2DP);
}
if (BluetoothUuid.containsAnyUuid(uuids, OPP_PROFILE_UUIDS)) {
sProfileMap.remove(Profile.OPP);
}
if (BluetoothUuid.containsAnyUuid(uuids, HID_PROFILE_UUIDS)) {
sProfileMap.remove(Profile.HID);
}
if (BluetoothUuid.containsAnyUuid(uuids, PANU_PROFILE_UUIDS)) {
sProfileMap.remove(Profile.PAN);
}
}
private static LinkedList<ServiceListener> mServiceListeners =
new LinkedList<ServiceListener>();
@@ -171,23 +195,28 @@ public abstract class LocalBluetoothProfileManager {
return;
}
if (BluetoothUuid.containsAnyUuid(uuids, HEADSET_PROFILE_UUIDS)) {
if (BluetoothUuid.containsAnyUuid(uuids, HEADSET_PROFILE_UUIDS) &&
sProfileMap.containsKey(Profile.HEADSET)) {
profiles.add(Profile.HEADSET);
}
if (BluetoothUuid.containsAnyUuid(uuids, A2DP_PROFILE_UUIDS)) {
if (BluetoothUuid.containsAnyUuid(uuids, A2DP_PROFILE_UUIDS) &&
sProfileMap.containsKey(Profile.A2DP)) {
profiles.add(Profile.A2DP);
}
if (BluetoothUuid.containsAnyUuid(uuids, OPP_PROFILE_UUIDS)) {
if (BluetoothUuid.containsAnyUuid(uuids, OPP_PROFILE_UUIDS) &&
sProfileMap.containsKey(Profile.OPP)) {
profiles.add(Profile.OPP);
}
if (BluetoothUuid.containsAnyUuid(uuids, HID_PROFILE_UUIDS)) {
if (BluetoothUuid.containsAnyUuid(uuids, HID_PROFILE_UUIDS) &&
sProfileMap.containsKey(Profile.HID)) {
profiles.add(Profile.HID);
}
if (BluetoothUuid.containsAnyUuid(uuids, PANU_PROFILE_UUIDS)) {
if (BluetoothUuid.containsAnyUuid(uuids, PANU_PROFILE_UUIDS) &&
sProfileMap.containsKey(Profile.PAN)) {
profiles.add(Profile.PAN);
}
}