Loading android/app/jni/com_android_bluetooth_avrcp.cpp +11 −8 Original line number Diff line number Diff line Loading @@ -949,9 +949,10 @@ static jboolean setVolumeNative(JNIEnv* env, jobject object, jint volume) { /* native response for scope as Media player */ static jboolean mediaPlayerListRspNative( JNIEnv* env, jobject object, jbyteArray address, jint rspStatus, jint uidCounter, jbyte itemType, jint numItems, jbyteArray playerTypes, jintArray playerSubtypes, jbyteArray playStatusValues, jshortArray featureBitmask, jobjectArray textArray) { jint uidCounter, jbyte itemType, jint numItems, jintArray playerIds, jbyteArray playerTypes, jintArray playerSubtypes, jbyteArray playStatusValues, jshortArray featureBitmask, jobjectArray textArray) { if (!sBluetoothAvrcpInterface) { ALOGE("%s: sBluetoothAvrcpInterface is null", __func__); return JNI_FALSE; Loading @@ -965,18 +966,20 @@ static jboolean mediaPlayerListRspNative( jbyte *p_playerTypes = NULL, *p_PlayStatusValues = NULL; jshort* p_FeatBitMaskValues = NULL; jint* p_playerSubTypes = NULL; jint *p_playerIds = NULL, *p_playerSubTypes = NULL; btrc_folder_items_t* p_items = NULL; if (rspStatus == BTRC_STS_NO_ERROR) { /* allocate memory */ p_playerIds = env->GetIntArrayElements(playerIds, NULL); p_playerTypes = env->GetByteArrayElements(playerTypes, NULL); p_playerSubTypes = env->GetIntArrayElements(playerSubtypes, NULL); p_PlayStatusValues = env->GetByteArrayElements(playStatusValues, NULL); p_FeatBitMaskValues = env->GetShortArrayElements(featureBitmask, NULL); p_items = new btrc_folder_items_t[numItems]; /* deallocate memory and return if allocation failed */ if (!p_playerTypes || !p_playerSubTypes || !p_PlayStatusValues || !p_FeatBitMaskValues || !p_items) { if (!p_playerIds || !p_playerTypes || !p_playerSubTypes || !p_PlayStatusValues || !p_FeatBitMaskValues || !p_items) { if (p_playerIds) env->ReleaseIntArrayElements(playerIds, p_playerIds, 0); if (p_playerTypes) env->ReleaseByteArrayElements(playerTypes, p_playerTypes, 0); if (p_playerSubTypes) Loading @@ -997,7 +1000,7 @@ static jboolean mediaPlayerListRspNative( /* copy list of media players along with other parameters */ int itemIdx; for (itemIdx = 0; itemIdx < numItems; ++itemIdx) { p_items[itemIdx].player.player_id = (uint16_t)(itemIdx + 1); p_items[itemIdx].player.player_id = p_playerIds[itemIdx]; p_items[itemIdx].player.major_type = p_playerTypes[itemIdx]; p_items[itemIdx].player.sub_type = p_playerSubTypes[itemIdx]; p_items[itemIdx].player.play_status = p_PlayStatusValues[itemIdx]; Loading Loading @@ -1415,7 +1418,7 @@ static JNINativeMethod sMethods[] = { {"setBrowsedPlayerRspNative", "([BIBI[Ljava/lang/String;)Z", (void*)setBrowsedPlayerRspNative}, {"mediaPlayerListRspNative", "([BIIBI[B[I[B[S[Ljava/lang/String;)Z", {"mediaPlayerListRspNative", "([BIIBI[I[B[I[B[S[Ljava/lang/String;)Z", (void*)mediaPlayerListRspNative}, {"getFolderItemsRspNative", Loading android/app/src/com/android/bluetooth/avrcp/Avrcp.java +252 −309 File changed.Preview size limit exceeded, changes collapsed. Show changes android/app/src/com/android/bluetooth/avrcp/AvrcpHelperClasses.java +41 −40 Original line number Diff line number Diff line Loading @@ -88,22 +88,22 @@ class MediaPlayerListRsp { byte mStatus; short mUIDCounter; byte itemType; int[] mPlayerIds; byte[] mPlayerTypes; int[] mPlayerSubTypes; byte[] mPlayStatusValues; short[] mFeatureBitMaskValues; String[] mPlayerNameList, mPackageNameList; List<MediaController> mControllersList; String[] mPlayerNameList; int mNumItems; public MediaPlayerListRsp(byte status, short UIDCounter, int numItems, byte itemType, byte[] playerTypes, int[] playerSubTypes, byte[] playStatusValues, short[] featureBitMaskValues, String[] playerNameList, String packageNameList[], List<MediaController> mediaControllerList) { int[] playerIds, byte[] playerTypes, int[] playerSubTypes, byte[] playStatusValues, short[] featureBitMaskValues, String[] playerNameList) { this.mStatus = status; this.mUIDCounter = UIDCounter; this.mNumItems = numItems; this.itemType = itemType; this.mPlayerIds = playerIds; this.mPlayerTypes = playerTypes; this.mPlayerSubTypes = new int[numItems]; this.mPlayerSubTypes = playerSubTypes; Loading @@ -115,8 +115,6 @@ class MediaPlayerListRsp { this.mFeatureBitMaskValues[bitMaskIndex] = featureBitMaskValues[bitMaskIndex]; } this.mPlayerNameList = playerNameList; this.mPackageNameList = packageNameList; this.mControllersList = mediaControllerList; } } Loading Loading @@ -182,7 +180,6 @@ class NowPlayingListManager { /* stores information of Media Players in the system */ class MediaPlayerInfo { private String packageName; private byte majorType; private int subType; private byte playStatus; Loading @@ -190,21 +187,15 @@ class MediaPlayerInfo { private String displayableName; private MediaController mediaController; MediaPlayerInfo(String packageName, byte majorType, int subType, byte playStatus, short[] featureBitMask, String displayableName, MediaController mediaController) { this.setPackageName(packageName); MediaPlayerInfo(MediaController controller, byte majorType, int subType, byte playStatus, short[] featureBitMask, String displayableName) { this.setMajorType(majorType); this.setSubType(subType); this.playStatus = playStatus; // copying the FeatureBitMask array this.setFeatureBitMask(new short[featureBitMask.length]); for (int count = 0; count < featureBitMask.length; count++) { this.getFeatureBitMask()[count] = featureBitMask[count]; } // store a copy the FeatureBitMask array this.featureBitMask = Arrays.copyOf(featureBitMask, featureBitMask.length); this.setDisplayableName(displayableName); this.setMediaController(mediaController); this.setMediaController(controller); } /* getters and setters */ Loading @@ -225,11 +216,7 @@ class MediaPlayerInfo { } String getPackageName() { return packageName; } void setPackageName(String packageName) { this.packageName = packageName; return mediaController.getPackageName(); } byte getMajorType() { Loading Loading @@ -261,24 +248,38 @@ class MediaPlayerInfo { } void setFeatureBitMask(short[] featureBitMask) { this.featureBitMask = featureBitMask; synchronized (this) { this.featureBitMask = Arrays.copyOf(featureBitMask, featureBitMask.length); } } boolean isBrowseSupported() { synchronized (this) { if (this.featureBitMask == null) return false; for (short bit : this.featureBitMask) { if (bit == AvrcpConstants.AVRC_PF_BROWSE_BIT_NO) return true; } } return false; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n+++ MediaPlayerInfo: +++"); sb.append("\nPlayer Package Name = " + getPackageName()); sb.append("\nMajor Player Type = " + getMajorType()); sb.append("\nPlayer SubType = " + getSubType()); sb.append("\nPlay Status = " + playStatus); sb.append("\nFeatureBitMask:\n "); for (int count = 0; count < getFeatureBitMask().length; count++) { sb.append("\nFeature BitMask[" + count + "] = " + getFeatureBitMask()[count]); } sb.append("\nDisplayable Name = " + getDisplayableName()); sb.append("\nMedia Controller = " + getMediaController().toString()); sb.append("MediaPlayerInfo "); sb.append(getPackageName()); sb.append(" (as '" + getDisplayableName() + "')"); sb.append(" Type = " + getMajorType()); sb.append(", SubType = " + getSubType()); sb.append(", Status = " + playStatus); sb.append(" Feature Bits ["); short[] bits = getFeatureBitMask(); for (int i = 0; i < bits.length; i++) { if (i != 0) sb.append(" "); sb.append(bits[i]); } sb.append("] Controller: "); sb.append(getMediaController()); return sb.toString(); } } Loading @@ -298,10 +299,10 @@ class BrowsePlayerInfo { @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n+++ BrowsePlayerInfo: +++"); sb.append("\nPackage Name = " + packageName); sb.append("\nDisplayable Name = " + displayableName); sb.append("\nService Class = " + serviceClass); sb.append("BrowsePlayerInfo "); sb.append(packageName); sb.append(" ( as '" + displayableName + "')"); sb.append(" service " + serviceClass); return sb.toString(); } } Loading Loading
android/app/jni/com_android_bluetooth_avrcp.cpp +11 −8 Original line number Diff line number Diff line Loading @@ -949,9 +949,10 @@ static jboolean setVolumeNative(JNIEnv* env, jobject object, jint volume) { /* native response for scope as Media player */ static jboolean mediaPlayerListRspNative( JNIEnv* env, jobject object, jbyteArray address, jint rspStatus, jint uidCounter, jbyte itemType, jint numItems, jbyteArray playerTypes, jintArray playerSubtypes, jbyteArray playStatusValues, jshortArray featureBitmask, jobjectArray textArray) { jint uidCounter, jbyte itemType, jint numItems, jintArray playerIds, jbyteArray playerTypes, jintArray playerSubtypes, jbyteArray playStatusValues, jshortArray featureBitmask, jobjectArray textArray) { if (!sBluetoothAvrcpInterface) { ALOGE("%s: sBluetoothAvrcpInterface is null", __func__); return JNI_FALSE; Loading @@ -965,18 +966,20 @@ static jboolean mediaPlayerListRspNative( jbyte *p_playerTypes = NULL, *p_PlayStatusValues = NULL; jshort* p_FeatBitMaskValues = NULL; jint* p_playerSubTypes = NULL; jint *p_playerIds = NULL, *p_playerSubTypes = NULL; btrc_folder_items_t* p_items = NULL; if (rspStatus == BTRC_STS_NO_ERROR) { /* allocate memory */ p_playerIds = env->GetIntArrayElements(playerIds, NULL); p_playerTypes = env->GetByteArrayElements(playerTypes, NULL); p_playerSubTypes = env->GetIntArrayElements(playerSubtypes, NULL); p_PlayStatusValues = env->GetByteArrayElements(playStatusValues, NULL); p_FeatBitMaskValues = env->GetShortArrayElements(featureBitmask, NULL); p_items = new btrc_folder_items_t[numItems]; /* deallocate memory and return if allocation failed */ if (!p_playerTypes || !p_playerSubTypes || !p_PlayStatusValues || !p_FeatBitMaskValues || !p_items) { if (!p_playerIds || !p_playerTypes || !p_playerSubTypes || !p_PlayStatusValues || !p_FeatBitMaskValues || !p_items) { if (p_playerIds) env->ReleaseIntArrayElements(playerIds, p_playerIds, 0); if (p_playerTypes) env->ReleaseByteArrayElements(playerTypes, p_playerTypes, 0); if (p_playerSubTypes) Loading @@ -997,7 +1000,7 @@ static jboolean mediaPlayerListRspNative( /* copy list of media players along with other parameters */ int itemIdx; for (itemIdx = 0; itemIdx < numItems; ++itemIdx) { p_items[itemIdx].player.player_id = (uint16_t)(itemIdx + 1); p_items[itemIdx].player.player_id = p_playerIds[itemIdx]; p_items[itemIdx].player.major_type = p_playerTypes[itemIdx]; p_items[itemIdx].player.sub_type = p_playerSubTypes[itemIdx]; p_items[itemIdx].player.play_status = p_PlayStatusValues[itemIdx]; Loading Loading @@ -1415,7 +1418,7 @@ static JNINativeMethod sMethods[] = { {"setBrowsedPlayerRspNative", "([BIBI[Ljava/lang/String;)Z", (void*)setBrowsedPlayerRspNative}, {"mediaPlayerListRspNative", "([BIIBI[B[I[B[S[Ljava/lang/String;)Z", {"mediaPlayerListRspNative", "([BIIBI[I[B[I[B[S[Ljava/lang/String;)Z", (void*)mediaPlayerListRspNative}, {"getFolderItemsRspNative", Loading
android/app/src/com/android/bluetooth/avrcp/Avrcp.java +252 −309 File changed.Preview size limit exceeded, changes collapsed. Show changes
android/app/src/com/android/bluetooth/avrcp/AvrcpHelperClasses.java +41 −40 Original line number Diff line number Diff line Loading @@ -88,22 +88,22 @@ class MediaPlayerListRsp { byte mStatus; short mUIDCounter; byte itemType; int[] mPlayerIds; byte[] mPlayerTypes; int[] mPlayerSubTypes; byte[] mPlayStatusValues; short[] mFeatureBitMaskValues; String[] mPlayerNameList, mPackageNameList; List<MediaController> mControllersList; String[] mPlayerNameList; int mNumItems; public MediaPlayerListRsp(byte status, short UIDCounter, int numItems, byte itemType, byte[] playerTypes, int[] playerSubTypes, byte[] playStatusValues, short[] featureBitMaskValues, String[] playerNameList, String packageNameList[], List<MediaController> mediaControllerList) { int[] playerIds, byte[] playerTypes, int[] playerSubTypes, byte[] playStatusValues, short[] featureBitMaskValues, String[] playerNameList) { this.mStatus = status; this.mUIDCounter = UIDCounter; this.mNumItems = numItems; this.itemType = itemType; this.mPlayerIds = playerIds; this.mPlayerTypes = playerTypes; this.mPlayerSubTypes = new int[numItems]; this.mPlayerSubTypes = playerSubTypes; Loading @@ -115,8 +115,6 @@ class MediaPlayerListRsp { this.mFeatureBitMaskValues[bitMaskIndex] = featureBitMaskValues[bitMaskIndex]; } this.mPlayerNameList = playerNameList; this.mPackageNameList = packageNameList; this.mControllersList = mediaControllerList; } } Loading Loading @@ -182,7 +180,6 @@ class NowPlayingListManager { /* stores information of Media Players in the system */ class MediaPlayerInfo { private String packageName; private byte majorType; private int subType; private byte playStatus; Loading @@ -190,21 +187,15 @@ class MediaPlayerInfo { private String displayableName; private MediaController mediaController; MediaPlayerInfo(String packageName, byte majorType, int subType, byte playStatus, short[] featureBitMask, String displayableName, MediaController mediaController) { this.setPackageName(packageName); MediaPlayerInfo(MediaController controller, byte majorType, int subType, byte playStatus, short[] featureBitMask, String displayableName) { this.setMajorType(majorType); this.setSubType(subType); this.playStatus = playStatus; // copying the FeatureBitMask array this.setFeatureBitMask(new short[featureBitMask.length]); for (int count = 0; count < featureBitMask.length; count++) { this.getFeatureBitMask()[count] = featureBitMask[count]; } // store a copy the FeatureBitMask array this.featureBitMask = Arrays.copyOf(featureBitMask, featureBitMask.length); this.setDisplayableName(displayableName); this.setMediaController(mediaController); this.setMediaController(controller); } /* getters and setters */ Loading @@ -225,11 +216,7 @@ class MediaPlayerInfo { } String getPackageName() { return packageName; } void setPackageName(String packageName) { this.packageName = packageName; return mediaController.getPackageName(); } byte getMajorType() { Loading Loading @@ -261,24 +248,38 @@ class MediaPlayerInfo { } void setFeatureBitMask(short[] featureBitMask) { this.featureBitMask = featureBitMask; synchronized (this) { this.featureBitMask = Arrays.copyOf(featureBitMask, featureBitMask.length); } } boolean isBrowseSupported() { synchronized (this) { if (this.featureBitMask == null) return false; for (short bit : this.featureBitMask) { if (bit == AvrcpConstants.AVRC_PF_BROWSE_BIT_NO) return true; } } return false; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n+++ MediaPlayerInfo: +++"); sb.append("\nPlayer Package Name = " + getPackageName()); sb.append("\nMajor Player Type = " + getMajorType()); sb.append("\nPlayer SubType = " + getSubType()); sb.append("\nPlay Status = " + playStatus); sb.append("\nFeatureBitMask:\n "); for (int count = 0; count < getFeatureBitMask().length; count++) { sb.append("\nFeature BitMask[" + count + "] = " + getFeatureBitMask()[count]); } sb.append("\nDisplayable Name = " + getDisplayableName()); sb.append("\nMedia Controller = " + getMediaController().toString()); sb.append("MediaPlayerInfo "); sb.append(getPackageName()); sb.append(" (as '" + getDisplayableName() + "')"); sb.append(" Type = " + getMajorType()); sb.append(", SubType = " + getSubType()); sb.append(", Status = " + playStatus); sb.append(" Feature Bits ["); short[] bits = getFeatureBitMask(); for (int i = 0; i < bits.length; i++) { if (i != 0) sb.append(" "); sb.append(bits[i]); } sb.append("] Controller: "); sb.append(getMediaController()); return sb.toString(); } } Loading @@ -298,10 +299,10 @@ class BrowsePlayerInfo { @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("\n+++ BrowsePlayerInfo: +++"); sb.append("\nPackage Name = " + packageName); sb.append("\nDisplayable Name = " + displayableName); sb.append("\nService Class = " + serviceClass); sb.append("BrowsePlayerInfo "); sb.append(packageName); sb.append(" ( as '" + displayableName + "')"); sb.append(" service " + serviceClass); return sb.toString(); } } Loading