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')
-rw-r--r--src/com/android/bluetooth/a2dp/Avrcp.java46
1 files changed, 41 insertions, 5 deletions
diff --git a/src/com/android/bluetooth/a2dp/Avrcp.java b/src/com/android/bluetooth/a2dp/Avrcp.java
index f2d559801..6ad7d28b9 100644
--- 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.content.IntentFilter;
@@ -124,8 +125,9 @@ 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 MESSAGE_SET_ADDR_PLAYER_REQ_TIMEOUT = 13;
+ private static final int MESSAGE_SET_ADDR_PLAYER_REQ_TIMEOUT = 14;
private static final int SET_ADDR_PLAYER_TIMEOUT = 2000;
private int mAddressedPlayerChangedNT;
@@ -777,10 +779,24 @@ final class Avrcp {
int isAvailable = msg.arg2;
processRCCStateChange(callingPackageName, isFocussed, isAvailable);
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");
boolean oldPosValid = (mCurrentPosMs !=
@@ -951,9 +967,6 @@ final class Avrcp {
while (rccIterator.hasNext()) {
final MediaPlayerInfo di = rccIterator.next();
if (di.GetPlayerFocus()) {
- if (DEBUG) Log.v(TAG, "incrementing TrackNumber:" + mTrackNumber + "by 1");
- mTrackNumber = di.GetTrackNumber();
- mTrackNumber ++;
di.SetTrackNumber(mTrackNumber);
break;
}
@@ -978,6 +991,7 @@ final class Avrcp {
mMetadata.trackTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_TITLE);
mMetadata.albumTitle = getMdString(data, MediaMetadataRetriever.METADATA_KEY_ALBUM);
mMetadata.genre = getMdString(data, MediaMetadataRetriever.METADATA_KEY_GENRE);
+ mTrackNumber = getMdLong(data, MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS);
mMetadata.tracknum = getMdLong(data, MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);
Log.v(TAG,"mMetadata.toString() = " + mMetadata.toString());
@@ -1399,6 +1413,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.
@@ -1445,7 +1473,7 @@ final class Avrcp {
private int convertToAudioStreamVolume(int volume) {
// Rescale volume to match AudioSystem's volume
- return (int) Math.ceil((double) volume*mAudioStreamMax/AVRCP_MAX_VOL);
+ return (int) Math.round((double) volume*mAudioStreamMax/AVRCP_MAX_VOL);
}
private int convertToAvrcpVolume(int volume) {
@@ -1587,6 +1615,14 @@ private void updateLocalPlayerSettings( byte[] data) {
mHandler.sendMessageDelayed(msg, 130);
}
+ /**
+ * 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