1 /* 2 * Copyright (C) 2010 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 17 #ifndef __DRM_CONSTRAINTS_H__ 18 #define __DRM_CONSTRAINTS_H__ 19 20 #include "drm_framework_common.h" 21 22 namespace android { 23 24 /** 25 * This is an utility class which contains the constraints information. 26 * 27 * As a result of DrmManagerClient::getConstraints(const String8*, const int) 28 * an instance of DrmConstraints would be returned. 29 * 30 */ 31 class DrmConstraints { 32 public: 33 /** 34 * The following variables are replica of android.drm.DrmStore.ConstraintsColumns 35 * Any changes should also be incorporated with Java Layer as well 36 */ 37 /** 38 * The max repeat count 39 */ 40 static const String8 MAX_REPEAT_COUNT; 41 /** 42 * The remaining repeat count 43 */ 44 static const String8 REMAINING_REPEAT_COUNT; 45 46 /** 47 * The time before which the protected file can not be played/viewed 48 */ 49 static const String8 LICENSE_START_TIME; 50 51 /** 52 * The time after which the protected file can not be played/viewed 53 */ 54 static const String8 LICENSE_EXPIRY_TIME; 55 56 /** 57 * The available time for license 58 */ 59 static const String8 LICENSE_AVAILABLE_TIME; 60 61 /** 62 * The data stream for extended metadata 63 */ 64 static const String8 EXTENDED_METADATA; 65 66 public: 67 /** 68 * Iterator for key 69 */ 70 class KeyIterator { 71 friend class DrmConstraints; 72 private: 73 KeyIterator(DrmConstraints* drmConstraints) 74 : mDrmConstraints(drmConstraints), mIndex(0) {} 75 76 public: 77 KeyIterator(const KeyIterator& keyIterator); 78 KeyIterator& operator=(const KeyIterator& keyIterator); 79 virtual ~KeyIterator() {} 80 81 public: 82 bool hasNext(); 83 const String8& next(); 84 85 private: 86 DrmConstraints* mDrmConstraints; 87 unsigned int mIndex; 88 }; 89 90 /** 91 * Iterator for constraints 92 */ 93 class Iterator { 94 friend class DrmConstraints; 95 private: 96 Iterator(DrmConstraints* drmConstraints) 97 : mDrmConstraints(drmConstraints), mIndex(0) {} 98 99 public: 100 Iterator(const Iterator& iterator); 101 Iterator& operator=(const Iterator& iterator); 102 virtual ~Iterator() {} 103 104 public: 105 bool hasNext(); 106 String8 next(); 107 108 private: 109 DrmConstraints* mDrmConstraints; 110 unsigned int mIndex; 111 }; 112 113 public: 114 DrmConstraints() {} 115 virtual ~DrmConstraints() { 116 DrmConstraints::KeyIterator keyIt = this->keyIterator(); 117 118 while (keyIt.hasNext()) { 119 String8 key = keyIt.next(); 120 const char* value = this->getAsByteArray(&key); 121 if (NULL != value) { 122 delete[] value; 123 value = NULL; 124 } 125 } 126 mConstraintMap.clear(); 127 } 128 public: 129 /** 130 * Returns the number of constraints contained in this instance 131 * 132 * @return Number of constraints 133 */ 134 int getCount(void) const; 135 136 /** 137 * Adds constraint information as <key, value> pair to this instance 138 * 139 * @param[in] key Key to add 140 * @param[in] value Value to add 141 * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 142 */ 143 status_t put(const String8* key, const char* value); 144 145 /** 146 * Retrieves the value of given key 147 * 148 * @param key Key whose value to be retrieved 149 * @return The value 150 */ 151 String8 get(const String8& key) const; 152 153 /** 154 * Retrieves the value as byte array of given key 155 * @param key Key whose value to be retrieved as byte array 156 * @return The byte array value 157 */ 158 const char* getAsByteArray(const String8* key) const; 159 160 /** 161 * Returns KeyIterator object to walk through the keys associated with this instance 162 * 163 * @return KeyIterator object 164 */ 165 KeyIterator keyIterator(); 166 167 /** 168 * Returns Iterator object to walk through the values associated with this instance 169 * 170 * @return Iterator object 171 */ 172 Iterator iterator(); 173 private: 174 const char* getValue(const String8* key) const; 175 private: 176 typedef KeyedVector<String8, const char*> DrmConstraintsMap; 177 DrmConstraintsMap mConstraintMap; 178 }; 179 180 }; 181 182 #endif /* __DRM_CONSTRAINTS_H__ */ 183 184