diff options
Diffstat (limited to 'src/com/android/bluetooth/a2dp/Avrcp.java')
-rwxr-xr-x | src/com/android/bluetooth/a2dp/Avrcp.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/com/android/bluetooth/a2dp/Avrcp.java b/src/com/android/bluetooth/a2dp/Avrcp.java index 16fc3274f..c1ebb70b8 100755 --- a/src/com/android/bluetooth/a2dp/Avrcp.java +++ b/src/com/android/bluetooth/a2dp/Avrcp.java @@ -20,6 +20,7 @@ import java.util.Timer; import java.util.TimerTask; import android.app.PendingIntent; +import android.bluetooth.BluetoothA2dp; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; @@ -117,6 +118,7 @@ final class Avrcp { private static final int MESSAGE_FAST_FORWARD = 10; private static final int MESSAGE_REWIND = 11; private static final int MESSAGE_CHANGE_PLAY_POS = 12; + private static final int MESSAGE_SET_A2DP_AUDIO_STATE = 13; private static final int MSG_UPDATE_STATE = 100; private static final int MSG_SET_METADATA = 101; private static final int MSG_SET_TRANSPORT_CONTROLS = 102; @@ -447,10 +449,24 @@ final class Avrcp { sendMessageDelayed(posMsg, SKIP_PERIOD); } break; + + case MESSAGE_SET_A2DP_AUDIO_STATE: + if (DEBUG) Log.v(TAG, "MESSAGE_SET_A2DP_AUDIO_STATE:" + msg.arg1); + updateA2dpAudioState(msg.arg1); + break; } } } + private void updateA2dpAudioState(int state) { + boolean isPlaying = (state == BluetoothA2dp.STATE_PLAYING); + if (isPlaying != isPlayingState(mCurrentPlayState)) { + updatePlayPauseState(isPlaying ? RemoteControlClient.PLAYSTATE_PLAYING : + RemoteControlClient.PLAYSTATE_PAUSED, + RemoteControlClient.PLAYBACK_POSITION_INVALID); + } + } + private void updatePlayPauseState(int state, long currentPosMs) { if (DEBUG) Log.v(TAG, "updatePlayPauseState, old=" + mCurrentPlayState + ", state=" + state); @@ -735,6 +751,20 @@ final class Avrcp { return playStatus; } + private boolean isPlayingState(int playState) { + boolean isPlaying = false; + switch (playState) { + case RemoteControlClient.PLAYSTATE_PLAYING: + case RemoteControlClient.PLAYSTATE_BUFFERING: + isPlaying = true; + break; + default: + isPlaying = false; + break; + } + return isPlaying; + } + /** * This is called from AudioService. It will return whether this device supports abs volume. * NOT USED AT THE MOMENT. @@ -788,6 +818,14 @@ final class Avrcp { return (int) Math.ceil((double) volume*AVRCP_MAX_VOL/mAudioStreamMax); } + /** + * This is called from A2dpStateMachine to set A2dp audio state. + */ + public void setA2dpAudioState(int state) { + Message msg = mHandler.obtainMessage(MESSAGE_SET_A2DP_AUDIO_STATE, state, 0); + mHandler.sendMessage(msg); + } + // Do not modify without updating the HAL bt_rc.h files. // match up with btrc_play_status_t enum of bt_rc.h |