127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/* 227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project 327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License. 627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at 727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software 1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and 1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License. 1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#ifndef __DRM_INFO_REQUEST_H__ 1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __DRM_INFO_REQUEST_H__ 1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "drm_framework_common.h" 2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android { 2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/** 2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is an utility class used to pass required parameters to get 2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * the necessary information to communicate with online DRM server 2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * An instance of this class is passed to 2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * DrmManagerClient::acquireDrmInfo(const DrmInfoRequest*) to get the 3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * instance of DrmInfo. 3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmInfoRequest { 3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi // Changes in following constants should be in sync with DrmInfoRequest.java 3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int TYPE_REGISTRATION_INFO = 1; 3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int TYPE_UNREGISTRATION_INFO = 2; 3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int TYPE_RIGHTS_ACQUISITION_INFO = 3; 3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const int TYPE_RIGHTS_ACQUISITION_PROGRESS_INFO = 4; 4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Key to pass the unique id for the account or the user 4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const String8 ACCOUNT_ID; 4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Key to pass the subscription id 4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi static const String8 SUBSCRIPTION_ID; 4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Constructor for DrmInfoRequest 5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @param[in] infoType Type of information 5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @param[in] mimeType MIME type 5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfoRequest(int infoType, const String8& mimeType); 5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Destructor for DrmInfoRequest 6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi virtual ~DrmInfoRequest() {} 6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Iterator for key 6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi class KeyIterator { 6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi friend class DrmInfoRequest; 7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi private: 7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi KeyIterator(const DrmInfoRequest* drmInfoRequest) 7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi : mDrmInfoRequest(const_cast <DrmInfoRequest*> (drmInfoRequest)), mIndex(0) {} 7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi public: 7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi KeyIterator(const KeyIterator& keyIterator); 7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi KeyIterator& operator=(const KeyIterator& keyIterator); 7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi virtual ~KeyIterator() {} 7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi public: 8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool hasNext(); 8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi const String8& next(); 8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi private: 8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfoRequest* mDrmInfoRequest; 8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi unsigned int mIndex; 8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi }; 8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Iterator 9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi class Iterator { 9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi friend class DrmInfoRequest; 9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi private: 9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Iterator(const DrmInfoRequest* drmInfoRequest) 9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi : mDrmInfoRequest(const_cast <DrmInfoRequest*> (drmInfoRequest)), mIndex(0) {} 9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi public: 10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Iterator(const Iterator& iterator); 10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Iterator& operator=(const Iterator& iterator); 10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi virtual ~Iterator() {} 10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi public: 10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi bool hasNext(); 10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi String8& next(); 10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi private: 10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmInfoRequest* mDrmInfoRequest; 11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi unsigned int mIndex; 11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi }; 11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic: 11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Returns information type associated with this instance 11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return Information type 11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int getInfoType(void) const; 12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Returns MIME type associated with this instance 12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return MIME type 12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi String8 getMimeType(void) const; 12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Returns the number of entries in DrmRequestInfoMap 13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return Number of entries 13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int getCount(void) const; 13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Adds optional information as <key, value> pair to this instance 13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @param[in] key Key to add 13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @param[in] value Value to add 14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return Returns the error code 14127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 14227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi status_t put(const String8& key, const String8& value); 14327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 14527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Retrieves the value of given key 14627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @param key Key whose value to be retrieved 14827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return The value 14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi String8 get(const String8& key) const; 15127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Returns KeyIterator object to walk through the keys associated with this instance 15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return KeyIterator object 15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi KeyIterator keyIterator() const; 15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi /** 16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Returns Iterator object to walk through the values associated with this instance 16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * 16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * @return Iterator object 16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */ 16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi Iterator iterator() const; 16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate: 16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi int mInfoType; 16827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi String8 mMimeType; 16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 17027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi typedef KeyedVector<String8, String8> DrmRequestInfoMap; 17127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi DrmRequestInfoMap mRequestInformationMap; 17227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 17327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 17427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}; 17527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 17627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __DRM_INFO_REQUEST_H__ */ 17727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi 178