AvrcpHelperClasses.java revision e90c830b72f97189935e99e9e4f5a0c4f216ba72
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.bluetooth.avrcp; 18 19import android.media.session.MediaController; 20import android.media.session.MediaSession; 21 22import java.util.List; 23import java.util.Arrays; 24 25/************************************************************************************************* 26 * Helper classes used for callback/response of browsing commands:- 27 * 1) To bundle parameters for native callbacks/response. 28 * 2) Stores information of Addressed and Browsed Media Players. 29 ************************************************************************************************/ 30 31class AvrcpCmd { 32 33 public AvrcpCmd() {} 34 35 /* Helper classes to pass parameters from callbacks to Avrcp handler */ 36 class FolderItemsCmd { 37 byte mScope; 38 int mStartItem; 39 int mEndItem; 40 byte mNumAttr; 41 int[] mAttrIDs; 42 public byte[] mAddress; 43 44 public FolderItemsCmd(byte[] address,byte scope, int startItem, int endItem, byte numAttr, 45 int[] attrIds) { 46 mAddress = address; 47 this.mScope = scope; 48 this.mStartItem = startItem; 49 this.mEndItem = endItem; 50 this.mNumAttr = numAttr; 51 this.mAttrIDs = attrIds; 52 } 53 } 54 55 class ItemAttrCmd { 56 byte mScope; 57 byte[] mUid; 58 int mUidCounter; 59 byte mNumAttr; 60 int[] mAttrIDs; 61 public byte[] mAddress; 62 63 public ItemAttrCmd(byte[] address, byte scope, byte[] uid, int uidCounter, byte numAttr, 64 int[] attrIDs) { 65 mAddress = address; 66 mScope = scope; 67 mUid = uid; 68 mUidCounter = uidCounter; 69 mNumAttr = numAttr; 70 mAttrIDs = attrIDs; 71 } 72 } 73 74 class ElementAttrCmd { 75 byte mNumAttr; 76 int[] mAttrIDs; 77 public byte[] mAddress; 78 79 public ElementAttrCmd(byte[] address, byte numAttr, int[] attrIDs) { 80 mAddress = address; 81 mNumAttr = numAttr; 82 mAttrIDs = attrIDs; 83 } 84 } 85} 86 87/* Helper classes to pass parameters to native response */ 88class MediaPlayerListRsp { 89 byte mStatus; 90 short mUIDCounter; 91 byte itemType; 92 byte[] mPlayerTypes; 93 int[] mPlayerSubTypes; 94 byte[] mPlayStatusValues; 95 short[] mFeatureBitMaskValues; 96 String[] mPlayerNameList, mPackageNameList; 97 List<MediaController> mControllersList; 98 int mNumItems; 99 100 public MediaPlayerListRsp(byte status, short UIDCounter, int numItems, byte itemType, 101 byte[] playerTypes, int[] playerSubTypes, byte[] playStatusValues, 102 short[] featureBitMaskValues, String[] playerNameList, String packageNameList[], 103 List<MediaController> mediaControllerList) { 104 this.mStatus = status; 105 this.mUIDCounter = UIDCounter; 106 this.mNumItems = numItems; 107 this.itemType = itemType; 108 this.mPlayerTypes = playerTypes; 109 this.mPlayerSubTypes = new int[numItems]; 110 this.mPlayerSubTypes = playerSubTypes; 111 this.mPlayStatusValues = new byte[numItems]; 112 this.mPlayStatusValues = playStatusValues; 113 int bitMaskSize = AvrcpConstants.AVRC_FEATURE_MASK_SIZE; 114 this.mFeatureBitMaskValues = new short[numItems * bitMaskSize]; 115 for (int bitMaskIndex = 0; bitMaskIndex < (numItems * bitMaskSize); bitMaskIndex++) { 116 this.mFeatureBitMaskValues[bitMaskIndex] = featureBitMaskValues[bitMaskIndex]; 117 } 118 this.mPlayerNameList = playerNameList; 119 this.mPackageNameList = packageNameList; 120 this.mControllersList = mediaControllerList; 121 } 122} 123 124class FolderItemsRsp { 125 byte mStatus; 126 short mUIDCounter; 127 byte mScope; 128 int mNumItems; 129 byte[] mFolderTypes; 130 byte[] mPlayable; 131 byte[] mItemTypes; 132 byte[] mItemUid; 133 String[] mDisplayNames; /* display name of the item. Eg: Folder name or song name */ 134 int[] mAttributesNum; 135 int[] mAttrIds; 136 String[] mAttrValues; 137 138 public FolderItemsRsp(byte Status, short UIDCounter, byte scope, int numItems, 139 byte[] folderTypes, byte[] playable, byte[] ItemTypes, byte[] ItemsUid, 140 String[] displayNameArray, int[] AttributesNum, int[] AttrIds, String[] attrValues) { 141 this.mStatus = Status; 142 this.mUIDCounter = UIDCounter; 143 this.mScope = scope; 144 this.mNumItems = numItems; 145 this.mFolderTypes = folderTypes; 146 this.mPlayable = playable; 147 this.mItemTypes = ItemTypes; 148 this.mItemUid = ItemsUid; 149 this.mDisplayNames = displayNameArray; 150 this.mAttributesNum = AttributesNum; 151 this.mAttrIds = AttrIds; 152 this.mAttrValues = attrValues; 153 } 154} 155 156class ItemAttrRsp { 157 byte mStatus; 158 byte mNumAttr; 159 int[] mAttributesIds; 160 String[] mAttributesArray; 161 162 public ItemAttrRsp(byte status, byte numAttr, int[] attributesIds, String[] attributesArray) { 163 this.mStatus = status; 164 this.mNumAttr = numAttr; 165 this.mAttributesIds = attributesIds; 166 this.mAttributesArray = attributesArray; 167 } 168} 169 170/* Helps managing the NowPlayingList */ 171class NowPlayingListManager { 172 private List<MediaSession.QueueItem> mNowPlayingItems = null; 173 174 synchronized void setNowPlayingList(List<MediaSession.QueueItem> queue) { 175 mNowPlayingItems = queue; 176 } 177 178 synchronized List<MediaSession.QueueItem> getNowPlayingList() { 179 return mNowPlayingItems; 180 } 181} 182 183/* stores information of Media Players in the system */ 184class MediaPlayerInfo { 185 186 private String packageName; 187 private byte majorType; 188 private int subType; 189 private byte playStatus; 190 private short[] featureBitMask; 191 private String displayableName; 192 private MediaController mediaController; 193 194 MediaPlayerInfo(String packageName, byte majorType, int subType, byte playStatus, 195 short[] featureBitMask, String displayableName, MediaController mediaController) { 196 this.setPackageName(packageName); 197 this.setMajorType(majorType); 198 this.setSubType(subType); 199 this.playStatus = playStatus; 200 201 // copying the FeatureBitMask array 202 this.setFeatureBitMask(new short[featureBitMask.length]); 203 for (int count = 0; count < featureBitMask.length; count++) { 204 this.getFeatureBitMask()[count] = featureBitMask[count]; 205 } 206 207 this.setDisplayableName(displayableName); 208 this.setMediaController(mediaController); 209 } 210 211 /* getters and setters */ 212 byte getPlayStatus() { 213 return playStatus; 214 } 215 216 void setPlayStatus(byte playStatus) { 217 this.playStatus = playStatus; 218 } 219 220 MediaController getMediaController() { 221 return mediaController; 222 } 223 224 void setMediaController(MediaController mediaController) { 225 this.mediaController = mediaController; 226 } 227 228 String getPackageName() { 229 return packageName; 230 } 231 232 void setPackageName(String packageName) { 233 this.packageName = packageName; 234 } 235 236 byte getMajorType() { 237 return majorType; 238 } 239 240 void setMajorType(byte majorType) { 241 this.majorType = majorType; 242 } 243 244 int getSubType() { 245 return subType; 246 } 247 248 void setSubType(int subType) { 249 this.subType = subType; 250 } 251 252 String getDisplayableName() { 253 return displayableName; 254 } 255 256 void setDisplayableName(String displayableName) { 257 this.displayableName = displayableName; 258 } 259 260 short[] getFeatureBitMask() { 261 return featureBitMask; 262 } 263 264 void setFeatureBitMask(short[] featureBitMask) { 265 this.featureBitMask = featureBitMask; 266 } 267 268 @Override 269 public String toString() { 270 StringBuilder sb = new StringBuilder(); 271 sb.append("\n+++ MediaPlayerInfo: +++"); 272 sb.append("\nPlayer Package Name = " + getPackageName()); 273 sb.append("\nMajor Player Type = " + getMajorType()); 274 sb.append("\nPlayer SubType = " + getSubType()); 275 sb.append("\nPlay Status = " + playStatus); 276 sb.append("\nFeatureBitMask:\n "); 277 for (int count = 0; count < getFeatureBitMask().length; count++) { 278 sb.append("\nFeature BitMask[" + count + "] = " + getFeatureBitMask()[count]); 279 } 280 sb.append("\nDisplayable Name = " + getDisplayableName()); 281 sb.append("\nMedia Controller = " + getMediaController().toString()); 282 283 return sb.toString(); 284 } 285} 286 287/* stores information for browsable Media Players available in the system */ 288class BrowsePlayerInfo { 289 String packageName; 290 String displayableName; 291 String serviceClass; 292 293 public BrowsePlayerInfo(String packageName, String displayableName, String serviceClass) { 294 this.packageName = packageName; 295 this.displayableName = displayableName; 296 this.serviceClass = serviceClass; 297 } 298 299 @Override 300 public String toString() { 301 StringBuilder sb = new StringBuilder(); 302 sb.append("\n+++ BrowsePlayerInfo: +++"); 303 sb.append("\nPackage Name = " + packageName); 304 sb.append("\nDisplayable Name = " + displayableName); 305 sb.append("\nService Class = " + serviceClass); 306 return sb.toString(); 307 } 308} 309 310class FolderItemsData { 311 312 /* initialize sizes for rsp parameters */ 313 int mNumItems; 314 int[] mAttributesNum; 315 byte[] mFolderTypes ; 316 byte[] mItemTypes; 317 byte[] mPlayable; 318 byte[] mItemUid; 319 String[] mDisplayNames; 320 int[] mAttrIds; 321 String[] mAttrValues; 322 int attrCounter; 323 324 public FolderItemsData(int size) { 325 mNumItems = size; 326 mAttributesNum = new int[size]; 327 328 mFolderTypes = new byte[size]; /* folderTypes */ 329 mItemTypes = new byte[size]; /* folder or media item */ 330 mPlayable = new byte[size]; 331 Arrays.fill(mFolderTypes, AvrcpConstants.FOLDER_TYPE_MIXED); 332 Arrays.fill(mItemTypes, AvrcpConstants.BTRC_ITEM_MEDIA); 333 Arrays.fill(mPlayable, AvrcpConstants.ITEM_PLAYABLE); 334 335 mItemUid = new byte[size * AvrcpConstants.UID_SIZE]; 336 mDisplayNames = new String[size]; 337 338 mAttrIds = null; /* array of attr ids */ 339 mAttrValues = null; /* array of attr values */ 340 } 341} 342