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_SUPPORT_INFO_H__ 18 #define __DRM_SUPPORT_INFO_H__ 19 20 #include "drm_framework_common.h" 21 22 namespace android { 23 24 /** 25 * This is an utility class which wraps the capability of each plug-in, 26 * such as mimetype's and file suffixes it could handle. 27 * 28 * Plug-in developer could return the capability of the plugin by passing 29 * DrmSupportInfo instance. 30 * 31 */ 32 class DrmSupportInfo { 33 public: 34 /** 35 * Iterator for mMimeTypeVector 36 */ 37 class MimeTypeIterator { 38 friend class DrmSupportInfo; 39 private: MimeTypeIterator(DrmSupportInfo * drmSupportInfo)40 explicit MimeTypeIterator(DrmSupportInfo* drmSupportInfo) 41 : mDrmSupportInfo(drmSupportInfo), mIndex(0) {} 42 public: 43 MimeTypeIterator(const MimeTypeIterator& iterator); 44 MimeTypeIterator& operator=(const MimeTypeIterator& iterator); ~MimeTypeIterator()45 virtual ~MimeTypeIterator() {} 46 47 public: 48 bool hasNext(); 49 String8& next(); 50 51 private: 52 DrmSupportInfo* mDrmSupportInfo; 53 unsigned int mIndex; 54 }; 55 56 /** 57 * Iterator for mFileSuffixVector 58 */ 59 class FileSuffixIterator { 60 friend class DrmSupportInfo; 61 62 private: FileSuffixIterator(DrmSupportInfo * drmSupportInfo)63 explicit FileSuffixIterator(DrmSupportInfo* drmSupportInfo) 64 : mDrmSupportInfo(drmSupportInfo), mIndex(0) {} 65 public: 66 FileSuffixIterator(const FileSuffixIterator& iterator); 67 FileSuffixIterator& operator=(const FileSuffixIterator& iterator); ~FileSuffixIterator()68 virtual ~FileSuffixIterator() {} 69 70 public: 71 bool hasNext(); 72 String8& next(); 73 74 private: 75 DrmSupportInfo* mDrmSupportInfo; 76 unsigned int mIndex; 77 }; 78 79 public: 80 /** 81 * Constructor for DrmSupportInfo 82 */ 83 DrmSupportInfo(); 84 85 /** 86 * Copy constructor for DrmSupportInfo 87 */ 88 DrmSupportInfo(const DrmSupportInfo& drmSupportInfo); 89 90 /** 91 * Destructor for DrmSupportInfo 92 */ ~DrmSupportInfo()93 virtual ~DrmSupportInfo() {} 94 95 DrmSupportInfo& operator=(const DrmSupportInfo& drmSupportInfo); 96 bool operator<(const DrmSupportInfo& drmSupportInfo) const; 97 bool operator==(const DrmSupportInfo& drmSupportInfo) const; 98 99 /** 100 * Returns FileSuffixIterator object to walk through file suffix values 101 * associated with this instance 102 * 103 * @return FileSuffixIterator object 104 */ 105 FileSuffixIterator getFileSuffixIterator(); 106 107 /** 108 * Returns MimeTypeIterator object to walk through mimetype values 109 * associated with this instance 110 * 111 * @return MimeTypeIterator object 112 */ 113 MimeTypeIterator getMimeTypeIterator(); 114 115 public: 116 /** 117 * Returns the number of mimetypes supported. 118 * 119 * @return Number of mimetypes supported 120 */ 121 int getMimeTypeCount(void) const; 122 123 /** 124 * Returns the number of file types supported. 125 * 126 * @return Number of file types supported 127 */ 128 int getFileSuffixCount(void) const; 129 130 /** 131 * Adds the mimetype to the list of supported mimetypes 132 * 133 * @param[in] mimeType mimetype to be added 134 * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 135 */ 136 status_t addMimeType(const String8& mimeType); 137 138 /** 139 * Adds the filesuffix to the list of supported file types 140 * 141 * @param[in] filesuffix file suffix to be added 142 * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 143 */ 144 status_t addFileSuffix(const String8& fileSuffix); 145 146 /** 147 * Set the unique description about the plugin 148 * 149 * @param[in] description Unique description 150 * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 151 */ 152 status_t setDescription(const String8& description); 153 154 /** 155 * Returns the unique description associated with the plugin 156 * 157 * @return Unique description 158 */ 159 String8 getDescription() const; 160 161 /** 162 * Returns whether given mimetype is supported or not 163 * 164 * @param[in] mimeType MIME type 165 * @return 166 * true - if mime-type is supported 167 * false - if mime-type is not supported 168 */ 169 bool isSupportedMimeType(const String8& mimeType) const; 170 171 /** 172 * Returns whether given file type is supported or not 173 * 174 * @param[in] fileType File type 175 * @return 176 * true if file type is supported 177 * false if file type is not supported 178 */ 179 bool isSupportedFileSuffix(const String8& fileType) const; 180 181 private: 182 Vector<String8> mMimeTypeVector; 183 Vector<String8> mFileSuffixVector; 184 185 String8 mDescription; 186 }; 187 188 }; 189 190 #endif /* __DRM_SUPPORT_INFO_H__ */ 191 192