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