127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/*
227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Copyright (C) 2010 The Android Open Source Project
327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Licensed under the Apache License, Version 2.0 (the "License");
527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * you may not use this file except in compliance with the License.
627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * You may obtain a copy of the License at
727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *      http://www.apache.org/licenses/LICENSE-2.0
927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
1027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Unless required by applicable law or agreed to in writing, software
1127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * distributed under the License is distributed on an "AS IS" BASIS,
1227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * See the License for the specific language governing permissions and
1427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * limitations under the License.
1527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
1627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#ifndef __DRM_SUPPORT_INFO_H__
1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#define __DRM_SUPPORT_INFO_H__
1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#include "drm_framework_common.h"
2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshinamespace android {
2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi/**
2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * This is an utility class which wraps the capability of each plug-in,
2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * such as mimetype's and file suffixes it could handle.
2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * Plug-in developer could return the capability of the plugin by passing
2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi * DrmSupportInfo instance.
3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi *
3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi */
3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiclass DrmSupportInfo {
3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Iterator for mMimeTypeVector
3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    class MimeTypeIterator {
3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        friend class DrmSupportInfo;
3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        MimeTypeIterator(DrmSupportInfo* drmSupportInfo)
4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi           : mDrmSupportInfo(drmSupportInfo), mIndex(0) {}
4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        MimeTypeIterator(const MimeTypeIterator& iterator);
4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        MimeTypeIterator& operator=(const MimeTypeIterator& iterator);
4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        virtual ~MimeTypeIterator() {}
4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        bool hasNext();
4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        String8& next();
5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DrmSupportInfo* mDrmSupportInfo;
5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        unsigned int mIndex;
5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Iterator for mFileSuffixVector
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    class FileSuffixIterator {
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi       friend class DrmSupportInfo;
6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        FileSuffixIterator(DrmSupportInfo* drmSupportInfo)
6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            : mDrmSupportInfo(drmSupportInfo), mIndex(0) {}
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        FileSuffixIterator(const FileSuffixIterator& iterator);
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        FileSuffixIterator& operator=(const FileSuffixIterator& iterator);
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        virtual ~FileSuffixIterator() {}
6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    public:
7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        bool hasNext();
7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        String8& next();
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    private:
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        DrmSupportInfo* mDrmSupportInfo;
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        unsigned int mIndex;
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    };
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Constructor for DrmSupportInfo
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DrmSupportInfo();
8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Copy constructor for DrmSupportInfo
8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DrmSupportInfo(const DrmSupportInfo& drmSupportInfo);
8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Destructor for DrmSupportInfo
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    virtual ~DrmSupportInfo() {}
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    DrmSupportInfo& operator=(const DrmSupportInfo& drmSupportInfo);
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    bool operator<(const DrmSupportInfo& drmSupportInfo) const;
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    bool operator==(const DrmSupportInfo& drmSupportInfo) const;
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns FileSuffixIterator object to walk through file suffix values
10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * associated with this instance
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return FileSuffixIterator object
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    FileSuffixIterator getFileSuffixIterator();
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns MimeTypeIterator object to walk through mimetype values
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * associated with this instance
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return MimeTypeIterator object
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    MimeTypeIterator getMimeTypeIterator();
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshipublic:
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns the number of mimetypes supported.
11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Number of mimetypes supported
12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int getMimeTypeCount(void) const;
12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns the number of file types supported.
12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Number of file types supported
12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    int getFileSuffixCount(void) const;
12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Adds the mimetype to the list of supported mimetypes
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] mimeType mimetype to be added
13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    status_t addMimeType(const String8& mimeType);
13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Adds the filesuffix to the list of supported file types
14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
14127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] filesuffix file suffix to be added
14227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
14327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    status_t addFileSuffix(const String8& fileSuffix);
14527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
14627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Set the unique description about the plugin
14827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] description Unique description
15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Returns DRM_NO_ERROR for success, DRM_ERROR_UNKNOWN for failure
15127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    status_t setDescription(const String8& description);
15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns the unique description associated with the plugin
15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return Unique description
15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8 getDescription() const;
16027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
16127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
16227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns whether given mimetype is supported or not
16327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
16427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] mimeType MIME type
16527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return
16627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *        true - if mime-type is supported
16727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *        false - if mime-type is not supported
16827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
16927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    bool isSupportedMimeType(const String8& mimeType) const;
17027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
17127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    /**
17227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * Returns whether given file type is supported or not
17327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *
17427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @param[in] fileType File type
17527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     * @return
17627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *     true if file type is supported
17727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     *     false if file type is not supported
17827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi     */
17927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    bool isSupportedFileSuffix(const String8& fileType) const;
18027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiprivate:
18227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    Vector<String8> mMimeTypeVector;
18327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    Vector<String8> mFileSuffixVector;
18427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8 mDescription;
18627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
18727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
18827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi};
18927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
19027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi#endif /* __DRM_SUPPORT_INFO_H__ */
19127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
192