1d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/* 2d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copyright (C) 2010 The Android Open Source Project 3d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 4d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License"); 5d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * you may not use this file except in compliance with the License. 6d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * You may obtain a copy of the License at 7d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 8d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * http://www.apache.org/licenses/LICENSE-2.0 9d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 10d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Unless required by applicable law or agreed to in writing, software 11d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS, 12d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * See the License for the specific language governing permissions and 14d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * limitations under the License. 15d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 16d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 17d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#ifndef __DRM_SUPPORT_INFO_H__ 18d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#define __DRM_SUPPORT_INFO_H__ 19d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 20d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#include "drm_framework_common.h" 21d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 22d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshinamespace android { 23d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 24d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi/** 25d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * This is an utility class which wraps the capability of each plug-in, 26d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * such as mimetype's and file suffixes it could handle. 27d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 28d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Plug-in developer could return the capability of the plugin by passing 29d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * DrmSupportInfo instance. 30d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 31d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 32d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiclass DrmSupportInfo { 33d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 34d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 35d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Iterator for mMimeTypeVector 36d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 37d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi class MimeTypeIterator { 38d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi friend class DrmSupportInfo; 39d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 40d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi MimeTypeIterator(DrmSupportInfo* drmSupportInfo) 41d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi : mDrmSupportInfo(drmSupportInfo), mIndex(0) {} 42d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 43d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi MimeTypeIterator(const MimeTypeIterator& iterator); 44d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi MimeTypeIterator& operator=(const MimeTypeIterator& iterator); 45d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~MimeTypeIterator() {} 46d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 47d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 48d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool hasNext(); 49d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8& next(); 50d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 51d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 52d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmSupportInfo* mDrmSupportInfo; 53d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi unsigned int mIndex; 54d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi }; 55d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 56d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 57d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Iterator for mFileSuffixVector 58d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 59d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi class FileSuffixIterator { 60d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi friend class DrmSupportInfo; 61d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 62d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 63d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi FileSuffixIterator(DrmSupportInfo* drmSupportInfo) 64d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi : mDrmSupportInfo(drmSupportInfo), mIndex(0) {} 65d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 66d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi FileSuffixIterator(const FileSuffixIterator& iterator); 67d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi FileSuffixIterator& operator=(const FileSuffixIterator& iterator); 68d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~FileSuffixIterator() {} 69d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 70d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi public: 71d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool hasNext(); 72d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8& next(); 73d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 74d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi private: 75d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmSupportInfo* mDrmSupportInfo; 76d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi unsigned int mIndex; 77d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi }; 78d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 79d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 80d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 81d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Constructor for DrmSupportInfo 82d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 83d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmSupportInfo(); 84d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 85d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 86d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Copy constructor for DrmSupportInfo 87d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 88d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmSupportInfo(const DrmSupportInfo& drmSupportInfo); 89d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 90d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 91d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Destructor for DrmSupportInfo 92d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 93d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi virtual ~DrmSupportInfo() {} 94d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 95d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi DrmSupportInfo& operator=(const DrmSupportInfo& drmSupportInfo); 96d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool operator<(const DrmSupportInfo& drmSupportInfo) const; 97d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool operator==(const DrmSupportInfo& drmSupportInfo) const; 98d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 99d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 100d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns FileSuffixIterator object to walk through file suffix values 101d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * associated with this instance 102d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 103d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return FileSuffixIterator object 104d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 105d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi FileSuffixIterator getFileSuffixIterator(); 106d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 107d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 108d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns MimeTypeIterator object to walk through mimetype values 109d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * associated with this instance 110d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 111d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return MimeTypeIterator object 112d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 113d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi MimeTypeIterator getMimeTypeIterator(); 114d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 115d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshipublic: 116d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 117d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns the number of mimetypes supported. 118d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 119d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Number of mimetypes supported 120d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 121d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int getMimeTypeCount(void) const; 122d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 123d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 124d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns the number of file types supported. 125d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 126d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Number of file types supported 127d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 128d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi int getFileSuffixCount(void) const; 129d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 130d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 131d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Adds the mimetype to the list of supported mimetypes 132d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 133d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] mimeType mimetype to be added 134d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 135d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 136d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t addMimeType(const String8& mimeType); 137d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 138d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 139d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Adds the filesuffix to the list of supported file types 140d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 141d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] filesuffix file suffix to be added 142d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 143d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 144d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t addFileSuffix(const String8& fileSuffix); 145d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 146d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 147d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Set the unique description about the plugin 148d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 149d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] description Unique description 150d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure 151d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 152d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi status_t setDescription(const String8& description); 153d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 154d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 155d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns the unique description associated with the plugin 156d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 157d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return Unique description 158d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 159d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8 getDescription() const; 160d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 161d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 162d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns whether given mimetype is supported or not 163d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 164d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] mimeType MIME type 165d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return 166d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * true - if mime-type is supported 167d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * false - if mime-type is not supported 168d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 169d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool isSupportedMimeType(const String8& mimeType) const; 170d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 171d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi /** 172d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * Returns whether given file type is supported or not 173d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * 174d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @param[in] fileType File type 175d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * @return 176d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * true if file type is supported 177d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi * false if file type is not supported 178d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi */ 179d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi bool isSupportedFileSuffix(const String8& fileType) const; 180d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 181d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshiprivate: 182d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Vector<String8> mMimeTypeVector; 183d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi Vector<String8> mFileSuffixVector; 184d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 185d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi String8 mDescription; 186d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}; 187d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 188d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi}; 189d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 190d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi#endif /* __DRM_SUPPORT_INFO_H__ */ 191d074e30ce44b9e33da43b67a4515b8986ca72b26aimitakeshi 192