summaryrefslogtreecommitdiffstats
path: root/src/com/android/bluetooth/a2dp/Avrcp.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/bluetooth/a2dp/Avrcp.java')
-rwxr-xr-xsrc/com/android/bluetooth/a2dp/Avrcp.java38
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