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 #include <drm/DrmSupportInfo.h>
18 #include <strings.h>
19 
20 using namespace android;
21 
DrmSupportInfo()22 DrmSupportInfo::DrmSupportInfo() {
23 
24 }
25 
DrmSupportInfo(const DrmSupportInfo & drmSupportInfo)26 DrmSupportInfo::DrmSupportInfo(const DrmSupportInfo& drmSupportInfo):
27     mMimeTypeVector(drmSupportInfo.mMimeTypeVector),
28     mFileSuffixVector(drmSupportInfo.mFileSuffixVector),
29     mDescription(drmSupportInfo.mDescription) {
30 
31 }
32 
operator <(const DrmSupportInfo & drmSupportInfo) const33 bool DrmSupportInfo::operator<(const DrmSupportInfo& drmSupportInfo) const {
34     // Do we need to check mMimeTypeVector & mFileSuffixVector ?
35     // Note Vector doesn't overrides "<" operator
36     return mDescription < drmSupportInfo.mDescription;
37 }
38 
operator ==(const DrmSupportInfo & drmSupportInfo) const39 bool DrmSupportInfo::operator==(const DrmSupportInfo& drmSupportInfo) const {
40     // Do we need to check mMimeTypeVector & mFileSuffixVector ?
41     // Note Vector doesn't overrides "==" operator
42     return (mDescription == drmSupportInfo.mDescription);
43 }
44 
isSupportedMimeType(const String8 & mimeType) const45 bool DrmSupportInfo::isSupportedMimeType(const String8& mimeType) const {
46     if (String8("") == mimeType) {
47         return false;
48     }
49 
50     for (size_t i = 0; i < mMimeTypeVector.size(); i++) {
51         const String8 item = mMimeTypeVector.itemAt(i);
52 
53         if (!strcasecmp(item.string(), mimeType.string())) {
54             return true;
55         }
56     }
57     return false;
58 }
59 
isSupportedFileSuffix(const String8 & fileType) const60 bool DrmSupportInfo::isSupportedFileSuffix(const String8& fileType) const {
61     for (size_t i = 0; i < mFileSuffixVector.size(); i++) {
62         const String8 item = mFileSuffixVector.itemAt(i);
63 
64         if (!strcasecmp(item.string(), fileType.string())) {
65             return true;
66         }
67     }
68     return false;
69 }
70 
operator =(const DrmSupportInfo & drmSupportInfo)71 DrmSupportInfo& DrmSupportInfo::operator=(const DrmSupportInfo& drmSupportInfo) {
72     mMimeTypeVector = drmSupportInfo.mMimeTypeVector;
73     mFileSuffixVector = drmSupportInfo.mFileSuffixVector;
74     mDescription = drmSupportInfo.mDescription;
75     return *this;
76 }
77 
getMimeTypeCount(void) const78 int DrmSupportInfo::getMimeTypeCount(void) const {
79     return mMimeTypeVector.size();
80 }
81 
getFileSuffixCount(void) const82 int DrmSupportInfo::getFileSuffixCount(void) const {
83     return mFileSuffixVector.size();
84 }
85 
addMimeType(const String8 & mimeType)86 status_t DrmSupportInfo::addMimeType(const String8& mimeType) {
87     mMimeTypeVector.push(mimeType);
88     return DRM_NO_ERROR;
89 }
90 
addFileSuffix(const String8 & fileSuffix)91 status_t DrmSupportInfo::addFileSuffix(const String8& fileSuffix) {
92     mFileSuffixVector.push(fileSuffix);
93     return DRM_NO_ERROR;
94 }
95 
setDescription(const String8 & description)96 status_t DrmSupportInfo::setDescription(const String8& description) {
97     mDescription = description;
98     return DRM_NO_ERROR;
99 }
100 
getDescription() const101 String8 DrmSupportInfo::getDescription() const {
102     return mDescription;
103 }
104 
getFileSuffixIterator()105 DrmSupportInfo::FileSuffixIterator DrmSupportInfo::getFileSuffixIterator() {
106     return FileSuffixIterator(this);
107 }
108 
getMimeTypeIterator()109 DrmSupportInfo::MimeTypeIterator DrmSupportInfo::getMimeTypeIterator() {
110     return MimeTypeIterator(this);
111 }
112 
FileSuffixIterator(const DrmSupportInfo::FileSuffixIterator & iterator)113 DrmSupportInfo::FileSuffixIterator::FileSuffixIterator(
114     const DrmSupportInfo::FileSuffixIterator& iterator) :
115     mDrmSupportInfo(iterator.mDrmSupportInfo),
116     mIndex(iterator.mIndex) {
117 
118 }
119 
operator =(const DrmSupportInfo::FileSuffixIterator & iterator)120 DrmSupportInfo::FileSuffixIterator& DrmSupportInfo::FileSuffixIterator::operator=(
121     const DrmSupportInfo::FileSuffixIterator& iterator) {
122     mDrmSupportInfo = iterator.mDrmSupportInfo;
123     mIndex = iterator.mIndex;
124     return *this;
125 }
126 
hasNext()127 bool DrmSupportInfo::FileSuffixIterator::hasNext() {
128     return mIndex < mDrmSupportInfo->mFileSuffixVector.size();
129 }
130 
next()131 String8& DrmSupportInfo::FileSuffixIterator::next() {
132     String8& value = mDrmSupportInfo->mFileSuffixVector.editItemAt(mIndex);
133     mIndex++;
134     return value;
135 }
136 
MimeTypeIterator(const DrmSupportInfo::MimeTypeIterator & iterator)137 DrmSupportInfo::MimeTypeIterator::MimeTypeIterator(
138     const DrmSupportInfo::MimeTypeIterator& iterator) :
139     mDrmSupportInfo(iterator.mDrmSupportInfo),
140     mIndex(iterator.mIndex) {
141 
142 }
143 
operator =(const DrmSupportInfo::MimeTypeIterator & iterator)144 DrmSupportInfo::MimeTypeIterator& DrmSupportInfo::MimeTypeIterator::operator=(
145     const DrmSupportInfo::MimeTypeIterator& iterator) {
146     mDrmSupportInfo = iterator.mDrmSupportInfo;
147     mIndex = iterator.mIndex;
148     return *this;
149 }
150 
hasNext()151 bool DrmSupportInfo::MimeTypeIterator::hasNext() {
152     return mIndex < mDrmSupportInfo->mMimeTypeVector.size();
153 }
154 
next()155 String8& DrmSupportInfo::MimeTypeIterator::next() {
156     String8& value = mDrmSupportInfo->mMimeTypeVector.editItemAt(mIndex);
157     mIndex++;
158     return value;
159 }
160