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#include <drm/DrmSupportInfo.h>
1821e7c33eaf8772819bf57fe9557885e4ebc43e1bCarl Shapiro#include <strings.h>
1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiusing namespace android;
2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::DrmSupportInfo() {
2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::DrmSupportInfo(const DrmSupportInfo& drmSupportInfo):
2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mMimeTypeVector(drmSupportInfo.mMimeTypeVector),
2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mFileSuffixVector(drmSupportInfo.mFileSuffixVector),
2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDescription(drmSupportInfo.mDescription) {
3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmSupportInfo::operator<(const DrmSupportInfo& drmSupportInfo) const {
3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    // Do we need to check mMimeTypeVector & mFileSuffixVector ?
3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    // Note Vector doesn't overrides "<" operator
3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mDescription < drmSupportInfo.mDescription;
3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmSupportInfo::operator==(const DrmSupportInfo& drmSupportInfo) const {
4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    // Do we need to check mMimeTypeVector & mFileSuffixVector ?
4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    // Note Vector doesn't overrides "==" operator
4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return (mDescription == drmSupportInfo.mDescription);
4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmSupportInfo::isSupportedMimeType(const String8& mimeType) const {
46ab00df4d8585b181e9058eb1b9c7996aa3bbaeabGloria Wang    if (String8("") == mimeType) {
47ab00df4d8585b181e9058eb1b9c7996aa3bbaeabGloria Wang        return false;
48ab00df4d8585b181e9058eb1b9c7996aa3bbaeabGloria Wang    }
49ab00df4d8585b181e9058eb1b9c7996aa3bbaeabGloria Wang
503ab368e0810d894dcbc0971350c095049478a055Mark Salyzyn    for (size_t i = 0; i < mMimeTypeVector.size(); i++) {
5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        const String8 item = mMimeTypeVector.itemAt(i);
5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5341b3d3be18b54e72a44813cbdd180aae7e77b444Glenn Kasten        if (!strcasecmp(item.string(), mimeType.string())) {
5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            return true;
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        }
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    }
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return false;
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmSupportInfo::isSupportedFileSuffix(const String8& fileType) const {
613ab368e0810d894dcbc0971350c095049478a055Mark Salyzyn    for (size_t i = 0; i < mFileSuffixVector.size(); i++) {
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        const String8 item = mFileSuffixVector.itemAt(i);
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6441b3d3be18b54e72a44813cbdd180aae7e77b444Glenn Kasten        if (!strcasecmp(item.string(), fileType.string())) {
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi            return true;
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        }
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    }
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return false;
6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo& DrmSupportInfo::operator=(const DrmSupportInfo& drmSupportInfo) {
7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mMimeTypeVector = drmSupportInfo.mMimeTypeVector;
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mFileSuffixVector = drmSupportInfo.mFileSuffixVector;
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDescription = drmSupportInfo.mDescription;
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return *this;
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmSupportInfo::getMimeTypeCount(void) const {
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mMimeTypeVector.size();
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmSupportInfo::getFileSuffixCount(void) const {
8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mFileSuffixVector.size();
8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmSupportInfo::addMimeType(const String8& mimeType) {
8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mMimeTypeVector.push(mimeType);
8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return DRM_NO_ERROR;
8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmSupportInfo::addFileSuffix(const String8& fileSuffix) {
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mFileSuffixVector.push(fileSuffix);
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return DRM_NO_ERROR;
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmSupportInfo::setDescription(const String8& description) {
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDescription = description;
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return DRM_NO_ERROR;
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8 DrmSupportInfo::getDescription() const {
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mDescription;
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::FileSuffixIterator DrmSupportInfo::getFileSuffixIterator() {
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return FileSuffixIterator(this);
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::MimeTypeIterator DrmSupportInfo::getMimeTypeIterator() {
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return MimeTypeIterator(this);
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
11227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::FileSuffixIterator::FileSuffixIterator(
11427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    const DrmSupportInfo::FileSuffixIterator& iterator) :
11527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmSupportInfo(iterator.mDrmSupportInfo),
11627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex(iterator.mIndex) {
11727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
11827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
11927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::FileSuffixIterator& DrmSupportInfo::FileSuffixIterator::operator=(
12127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    const DrmSupportInfo::FileSuffixIterator& iterator) {
12227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmSupportInfo = iterator.mDrmSupportInfo;
12327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex = iterator.mIndex;
12427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return *this;
12527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
12627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
12727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmSupportInfo::FileSuffixIterator::hasNext() {
12827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mIndex < mDrmSupportInfo->mFileSuffixVector.size();
12927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
13027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8& DrmSupportInfo::FileSuffixIterator::next() {
13227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8& value = mDrmSupportInfo->mFileSuffixVector.editItemAt(mIndex);
13327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex++;
13427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return value;
13527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
13627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
13727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::MimeTypeIterator::MimeTypeIterator(
13827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    const DrmSupportInfo::MimeTypeIterator& iterator) :
13927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmSupportInfo(iterator.mDrmSupportInfo),
14027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex(iterator.mIndex) {
14127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
14227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
14327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
14427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmSupportInfo::MimeTypeIterator& DrmSupportInfo::MimeTypeIterator::operator=(
14527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    const DrmSupportInfo::MimeTypeIterator& iterator) {
14627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmSupportInfo = iterator.mDrmSupportInfo;
14727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex = iterator.mIndex;
14827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return *this;
14927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
15027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmSupportInfo::MimeTypeIterator::hasNext() {
15227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mIndex < mDrmSupportInfo->mMimeTypeVector.size();
15327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
15427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
15527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8& DrmSupportInfo::MimeTypeIterator::next() {
15627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8& value = mDrmSupportInfo->mMimeTypeVector.editItemAt(mIndex);
15727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex++;
15827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return value;
15927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
160