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