Loading android/app/src/com/android/bluetooth/avrcp/AddressedMediaPlayer.java +7 −27 Original line number Diff line number Diff line Loading @@ -252,9 +252,9 @@ public class AddressedMediaPlayer { } } void sendTrackChangeWithId(int trackChangedNT, long trackNumber, MediaController mediaController) { void sendTrackChangeWithId(int trackChangedNT, MediaController mediaController) { if (DEBUG) Log.d(TAG, "sendTrackChangeWithId"); byte[] track; try { String mediaId = mediaController.getMetadata().getDescription().getMediaId(); long qid = 0; Loading @@ -268,33 +268,13 @@ public class AddressedMediaPlayer { } } /* for any item associated with NowPlaying, uid is queueId */ byte[] uid = ByteBuffer.allocate(AvrcpConstants.UID_SIZE).putLong(qid).array(); if (DEBUG) printByteArray("trackChangedRsp", uid); mMediaInterface.trackChangedRsp(trackChangedNT, uid); track = ByteBuffer.allocate(AvrcpConstants.UID_SIZE).putLong(qid).array(); } catch (NullPointerException e) { Log.w(TAG, "Null Pointer while getting current track Uid from media player"); sendTrackChangeRsp(trackChangedNT, trackNumber); } } /* * utility function to respond for track change when failed to get current track UID * from media controller */ private void sendTrackChangeRsp(int trackChangedNT, long trackNumber) { byte[] track = new byte[AvrcpConstants.TRACK_ID_SIZE]; /* track is stored in big endian format */ for (int idx = 0; idx < AvrcpConstants.TRACK_ID_SIZE; ++idx) { if (trackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM && trackNumber == -1) { /* if no track is currently selected then return 0xFF in interim response */ track[idx] = AvrcpConstants.NO_TRACK_SELECTED; } else { /* if Browsing is not supported and a track is selected, then return 0x00 */ track[idx] = AvrcpConstants.TRACK_IS_SELECTED; } Log.w(TAG, "NullPointerException getting uid, sending no track selected"); // Track selected (0x0) is not allowed for browsable players (AVRCP 1.6.1 p64) track = AvrcpConstants.NO_TRACK_SELECTED; } if (DEBUG) printByteArray("sendTrackChangeRsp", track); if (DEBUG) printByteArray("trackChangedRsp", track); mMediaInterface.trackChangedRsp(trackChangedNT, track); } Loading android/app/src/com/android/bluetooth/avrcp/Avrcp.java +10 −18 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ public final class Avrcp { private int mPlayStatusChangedNT; private int mTrackChangedNT; private int mPlayPosChangedNT; private long mTrackNumber; private long mTracksPlayed; private long mSongLengthMs; private long mPlaybackIntervalMs; private long mLastReportedPosition; Loading Loading @@ -195,7 +195,7 @@ public final class Avrcp { mCurrentPlayState = new PlaybackState.Builder().setState(PlaybackState.STATE_NONE, -1L, 0.0f).build(); mPlayStatusChangedNT = AvrcpConstants.NOTIFICATION_TYPE_CHANGED; mTrackChangedNT = AvrcpConstants.NOTIFICATION_TYPE_CHANGED; mTrackNumber = -1L; mTracksPlayed = 0; mLastStateUpdate = -1L; mSongLengthMs = 0L; mPlaybackIntervalMs = 0L; Loading Loading @@ -961,7 +961,7 @@ public final class Avrcp { if (!oldAttributes.equals(mMediaAttributes)) { Log.v(TAG, "MediaAttributes Changed to " + mMediaAttributes.toString()); mTrackNumber++; mTracksPlayed++; if (mTrackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM) { mTrackChangedNT = AvrcpConstants.NOTIFICATION_TYPE_CHANGED; Loading Loading @@ -1111,27 +1111,19 @@ public final class Avrcp { private void sendTrackChangedRsp() { // for players which does not support Browse or when no track is currently selected if (!isBrowseSupported(getCurrentAddrPlayer()) || (mTrackNumber == -1)) { if (!isBrowseSupported(getCurrentAddrPlayer())) { trackChangeRspForBrowseUnsupported(); } else { // for players which support browsing mAddressedMediaPlayer.sendTrackChangeWithId(mTrackChangedNT, mTrackNumber, mMediaController); mAddressedMediaPlayer.sendTrackChangeWithId(mTrackChangedNT, mMediaController); } } private void trackChangeRspForBrowseUnsupported() { byte[] track = new byte[AvrcpConstants.TRACK_ID_SIZE]; /* track is stored in big endian format */ for (int idx = 0; idx < AvrcpConstants.TRACK_ID_SIZE; ++idx) { if (mTrackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM && mTrackNumber == -1) { /* if no track is currently selected then return 0xFF in interim response */ track[idx] = AvrcpConstants.NO_TRACK_SELECTED; } else { /* if Browsing is not supported and a track is selected, then return 0x00 */ track[idx] = AvrcpConstants.TRACK_IS_SELECTED; } byte[] track = AvrcpConstants.TRACK_IS_SELECTED; if (mTrackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM && !mMediaAttributes.exists) { track = AvrcpConstants.NO_TRACK_SELECTED; } registerNotificationRspTrackChangeNative(mTrackChangedNT, track); } Loading Loading @@ -2362,11 +2354,11 @@ public final class Avrcp { sb.append("AVRCP:\n"); ProfileService.println(sb, "mMediaAttributes: " + mMediaAttributes); ProfileService.println(sb, "mTransportControlFlags: " + mTransportControlFlags); ProfileService.println(sb, "mTracksPlayed: " + mTracksPlayed); ProfileService.println(sb, "mCurrentPlayState: " + mCurrentPlayState); ProfileService.println(sb, "mLastStateUpdate: " + mLastStateUpdate); ProfileService.println(sb, "mPlayStatusChangedNT: " + mPlayStatusChangedNT); ProfileService.println(sb, "mTrackChangedNT: " + mTrackChangedNT); ProfileService.println(sb, "mTrackNumber: " + mTrackNumber); ProfileService.println(sb, "mSongLengthMs: " + mSongLengthMs); ProfileService.println(sb, "mPlaybackIntervalMs: " + mPlaybackIntervalMs); ProfileService.println(sb, "mPlayPosChangedNT: " + mPlayPosChangedNT); Loading android/app/src/com/android/bluetooth/avrcp/AvrcpConstants.java +5 −3 Original line number Diff line number Diff line Loading @@ -93,10 +93,12 @@ final class AvrcpConstants { static final int ATTRID_COVER_ART = 0x08; /* constants to send in Track change response */ static final byte NO_TRACK_SELECTED = (byte)0xFF; static final byte TRACK_IS_SELECTED = (byte)0x00; static final byte[] NO_TRACK_SELECTED = {(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; static final byte[] TRACK_IS_SELECTED = {(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00}; /* Max UID size */ /* UID size */ static final int UID_SIZE = 8; static final short DEFAULT_UID_COUNTER = 0x0000; Loading Loading
android/app/src/com/android/bluetooth/avrcp/AddressedMediaPlayer.java +7 −27 Original line number Diff line number Diff line Loading @@ -252,9 +252,9 @@ public class AddressedMediaPlayer { } } void sendTrackChangeWithId(int trackChangedNT, long trackNumber, MediaController mediaController) { void sendTrackChangeWithId(int trackChangedNT, MediaController mediaController) { if (DEBUG) Log.d(TAG, "sendTrackChangeWithId"); byte[] track; try { String mediaId = mediaController.getMetadata().getDescription().getMediaId(); long qid = 0; Loading @@ -268,33 +268,13 @@ public class AddressedMediaPlayer { } } /* for any item associated with NowPlaying, uid is queueId */ byte[] uid = ByteBuffer.allocate(AvrcpConstants.UID_SIZE).putLong(qid).array(); if (DEBUG) printByteArray("trackChangedRsp", uid); mMediaInterface.trackChangedRsp(trackChangedNT, uid); track = ByteBuffer.allocate(AvrcpConstants.UID_SIZE).putLong(qid).array(); } catch (NullPointerException e) { Log.w(TAG, "Null Pointer while getting current track Uid from media player"); sendTrackChangeRsp(trackChangedNT, trackNumber); } } /* * utility function to respond for track change when failed to get current track UID * from media controller */ private void sendTrackChangeRsp(int trackChangedNT, long trackNumber) { byte[] track = new byte[AvrcpConstants.TRACK_ID_SIZE]; /* track is stored in big endian format */ for (int idx = 0; idx < AvrcpConstants.TRACK_ID_SIZE; ++idx) { if (trackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM && trackNumber == -1) { /* if no track is currently selected then return 0xFF in interim response */ track[idx] = AvrcpConstants.NO_TRACK_SELECTED; } else { /* if Browsing is not supported and a track is selected, then return 0x00 */ track[idx] = AvrcpConstants.TRACK_IS_SELECTED; } Log.w(TAG, "NullPointerException getting uid, sending no track selected"); // Track selected (0x0) is not allowed for browsable players (AVRCP 1.6.1 p64) track = AvrcpConstants.NO_TRACK_SELECTED; } if (DEBUG) printByteArray("sendTrackChangeRsp", track); if (DEBUG) printByteArray("trackChangedRsp", track); mMediaInterface.trackChangedRsp(trackChangedNT, track); } Loading
android/app/src/com/android/bluetooth/avrcp/Avrcp.java +10 −18 Original line number Diff line number Diff line Loading @@ -83,7 +83,7 @@ public final class Avrcp { private int mPlayStatusChangedNT; private int mTrackChangedNT; private int mPlayPosChangedNT; private long mTrackNumber; private long mTracksPlayed; private long mSongLengthMs; private long mPlaybackIntervalMs; private long mLastReportedPosition; Loading Loading @@ -195,7 +195,7 @@ public final class Avrcp { mCurrentPlayState = new PlaybackState.Builder().setState(PlaybackState.STATE_NONE, -1L, 0.0f).build(); mPlayStatusChangedNT = AvrcpConstants.NOTIFICATION_TYPE_CHANGED; mTrackChangedNT = AvrcpConstants.NOTIFICATION_TYPE_CHANGED; mTrackNumber = -1L; mTracksPlayed = 0; mLastStateUpdate = -1L; mSongLengthMs = 0L; mPlaybackIntervalMs = 0L; Loading Loading @@ -961,7 +961,7 @@ public final class Avrcp { if (!oldAttributes.equals(mMediaAttributes)) { Log.v(TAG, "MediaAttributes Changed to " + mMediaAttributes.toString()); mTrackNumber++; mTracksPlayed++; if (mTrackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM) { mTrackChangedNT = AvrcpConstants.NOTIFICATION_TYPE_CHANGED; Loading Loading @@ -1111,27 +1111,19 @@ public final class Avrcp { private void sendTrackChangedRsp() { // for players which does not support Browse or when no track is currently selected if (!isBrowseSupported(getCurrentAddrPlayer()) || (mTrackNumber == -1)) { if (!isBrowseSupported(getCurrentAddrPlayer())) { trackChangeRspForBrowseUnsupported(); } else { // for players which support browsing mAddressedMediaPlayer.sendTrackChangeWithId(mTrackChangedNT, mTrackNumber, mMediaController); mAddressedMediaPlayer.sendTrackChangeWithId(mTrackChangedNT, mMediaController); } } private void trackChangeRspForBrowseUnsupported() { byte[] track = new byte[AvrcpConstants.TRACK_ID_SIZE]; /* track is stored in big endian format */ for (int idx = 0; idx < AvrcpConstants.TRACK_ID_SIZE; ++idx) { if (mTrackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM && mTrackNumber == -1) { /* if no track is currently selected then return 0xFF in interim response */ track[idx] = AvrcpConstants.NO_TRACK_SELECTED; } else { /* if Browsing is not supported and a track is selected, then return 0x00 */ track[idx] = AvrcpConstants.TRACK_IS_SELECTED; } byte[] track = AvrcpConstants.TRACK_IS_SELECTED; if (mTrackChangedNT == AvrcpConstants.NOTIFICATION_TYPE_INTERIM && !mMediaAttributes.exists) { track = AvrcpConstants.NO_TRACK_SELECTED; } registerNotificationRspTrackChangeNative(mTrackChangedNT, track); } Loading Loading @@ -2362,11 +2354,11 @@ public final class Avrcp { sb.append("AVRCP:\n"); ProfileService.println(sb, "mMediaAttributes: " + mMediaAttributes); ProfileService.println(sb, "mTransportControlFlags: " + mTransportControlFlags); ProfileService.println(sb, "mTracksPlayed: " + mTracksPlayed); ProfileService.println(sb, "mCurrentPlayState: " + mCurrentPlayState); ProfileService.println(sb, "mLastStateUpdate: " + mLastStateUpdate); ProfileService.println(sb, "mPlayStatusChangedNT: " + mPlayStatusChangedNT); ProfileService.println(sb, "mTrackChangedNT: " + mTrackChangedNT); ProfileService.println(sb, "mTrackNumber: " + mTrackNumber); ProfileService.println(sb, "mSongLengthMs: " + mSongLengthMs); ProfileService.println(sb, "mPlaybackIntervalMs: " + mPlaybackIntervalMs); ProfileService.println(sb, "mPlayPosChangedNT: " + mPlayPosChangedNT); Loading
android/app/src/com/android/bluetooth/avrcp/AvrcpConstants.java +5 −3 Original line number Diff line number Diff line Loading @@ -93,10 +93,12 @@ final class AvrcpConstants { static final int ATTRID_COVER_ART = 0x08; /* constants to send in Track change response */ static final byte NO_TRACK_SELECTED = (byte)0xFF; static final byte TRACK_IS_SELECTED = (byte)0x00; static final byte[] NO_TRACK_SELECTED = {(byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF}; static final byte[] TRACK_IS_SELECTED = {(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00}; /* Max UID size */ /* UID size */ static final int UID_SIZE = 8; static final short DEFAULT_UID_COUNTER = 0x0000; Loading