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