diff options
author | Jaikumar Ganesh <jaikumar@google.com> | 2010-11-01 11:59:57 -0700 |
---|---|---|
committer | Jaikumar Ganesh <jaikumar@google.com> | 2010-11-03 11:05:12 -0700 |
commit | 30d181690e48b26cdfae3b144d23f1e16c75da37 (patch) | |
tree | 91192101a8935cdaad7d8d163165f363446287aa | |
parent | 0a1adf90128b9b640fbfb6196d7cdd5d60adf313 (diff) | |
download | frameworks_base-30d181690e48b26cdfae3b144d23f1e16c75da37.zip frameworks_base-30d181690e48b26cdfae3b144d23f1e16c75da37.tar.gz frameworks_base-30d181690e48b26cdfae3b144d23f1e16c75da37.tar.bz2 |
Add STATE_AUDIO_CONNECTING state.
Why is it needed: SCO audio connections can fail.
Currently no indication is given to clients which are waiting
for SCO connections. This was working fine before because
SCO connections where blocking calls, which was wrong in itself.
Change-Id: Ic449b2db8506a7a5ae6be6c68715f1a7343f9e40
-rw-r--r-- | core/java/android/bluetooth/BluetoothHeadset.java | 36 | ||||
-rw-r--r-- | core/java/android/bluetooth/IBluetoothHeadset.aidl | 1 | ||||
-rw-r--r-- | media/java/android/media/AudioService.java | 4 |
3 files changed, 37 insertions, 4 deletions
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java index c72be6b..c03b444 100644 --- a/core/java/android/bluetooth/BluetoothHeadset.java +++ b/core/java/android/bluetooth/BluetoothHeadset.java @@ -183,7 +183,7 @@ public final class BluetoothHeadset implements BluetoothProfile { public static final String VENDOR_SPECIFIC_HEADSET_EVENT_COMPANY_ID_CATEGORY = "android.bluetooth.headset.intent.category.companyid"; - /* + /** * Headset state when SCO audio is connected * This state can be one of * {@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} of @@ -192,13 +192,21 @@ public final class BluetoothHeadset implements BluetoothProfile { public static final int STATE_AUDIO_CONNECTED = 10; /** - * Headset state when SCO audio is NOT connected + * Headset state when SCO audio is connecting * This state can be one of * {@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} of * {@link #ACTION_AUDIO_STATE_CHANGED} intent. + * @hide */ - public static final int STATE_AUDIO_DISCONNECTED = 11; + public static final int STATE_AUDIO_CONNECTING = 12; + /** + * Headset state when SCO audio is not connected + * This state can be one of + * {@link #EXTRA_STATE} or {@link #EXTRA_PREVIOUS_STATE} of + * {@link #ACTION_AUDIO_STATE_CHANGED} intent. + */ + public static final int STATE_AUDIO_DISCONNECTED = 11; private Context mContext; private ServiceListener mServiceListener; @@ -370,7 +378,8 @@ public final class BluetoothHeadset implements BluetoothProfile { * * <p> Users can listen to {@link #ACTION_AUDIO_STATE_CHANGED}. * {@link #EXTRA_STATE} will be set to {@link #STATE_AUDIO_CONNECTED} - * when the audio connection is established. + * when the audio connection is established, + * and to {@link #STATE_AUDIO_DISCONNECTED} in case of failure. * * <p>Requires {@link android.Manifest.permission#BLUETOOTH} * @@ -593,6 +602,25 @@ public final class BluetoothHeadset implements BluetoothProfile { return false; } + /** + * Get the current audio state of the Headset. + * Note: This is an internal function and shouldn't be exposed + * + * @hide + */ + public int getAudioState(BluetoothDevice device) { + if (DBG) log("getAudioState"); + if (mService != null && isEnabled()) { + try { + return mService.getAudioState(device); + } catch (RemoteException e) {Log.e(TAG, e.toString());} + } else { + Log.w(TAG, "Proxy not attached to service"); + if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable())); + } + return BluetoothHeadset.STATE_AUDIO_DISCONNECTED; + } + private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { if (DBG) Log.d(TAG, "Proxy object connected"); diff --git a/core/java/android/bluetooth/IBluetoothHeadset.aidl b/core/java/android/bluetooth/IBluetoothHeadset.aidl index 3e4c7b4..ab07931 100644 --- a/core/java/android/bluetooth/IBluetoothHeadset.aidl +++ b/core/java/android/bluetooth/IBluetoothHeadset.aidl @@ -46,4 +46,5 @@ interface IBluetoothHeadset { boolean connectHeadsetInternal(in BluetoothDevice device); boolean disconnectHeadsetInternal(in BluetoothDevice device); boolean setAudioState(in BluetoothDevice device, int state); + int getAudioState(in BluetoothDevice device); } diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java index a49bb37..a64158f 100644 --- a/media/java/android/media/AudioService.java +++ b/media/java/android/media/AudioService.java @@ -1973,6 +1973,10 @@ public class AudioService extends IAudioService.Stub { case BluetoothHeadset.STATE_AUDIO_DISCONNECTED: state = AudioManager.SCO_AUDIO_STATE_DISCONNECTED; break; + case BluetoothHeadset.STATE_AUDIO_CONNECTING: + // Todo(): Handle this, ignore for now as a public + // API will break. + break; default: state = AudioManager.SCO_AUDIO_STATE_ERROR; break; |