Home | History | Annotate | Download | only in drm
      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:
     40         explicit MimeTypeIterator(DrmSupportInfo* drmSupportInfo)
     41            : mDrmSupportInfo(drmSupportInfo), mIndex(0) {}
     42     public:
     43         MimeTypeIterator(const MimeTypeIterator& iterator);
     44         MimeTypeIterator& operator=(const MimeTypeIterator& iterator);
     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:
     63         explicit FileSuffixIterator(DrmSupportInfo* drmSupportInfo)
     64             : mDrmSupportInfo(drmSupportInfo), mIndex(0) {}
     65     public:
     66         FileSuffixIterator(const FileSuffixIterator& iterator);
     67         FileSuffixIterator& operator=(const FileSuffixIterator& iterator);
     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      */
     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