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/DrmInfo.h>
1827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
1927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiusing namespace android;
2027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::DrmInfo(int infoType, const DrmBuffer& drmBuffer, const String8& mimeType) :
2227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mInfoType(infoType),
2327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mData(drmBuffer),
2427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mMimeType(mimeType) {
2527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
2727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
2827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmInfo::getInfoType(void) const {
2927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mInfoType;
3027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
3127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
3227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8 DrmInfo::getMimeType(void) const {
3327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mMimeType;
3427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
3527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
3627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst DrmBuffer& DrmInfo::getData(void) const {
3727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mData;
3827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
3927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmInfo::getCount(void) const {
4127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mAttributes.size();
4227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
4327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshistatus_t DrmInfo::put(const String8& key, const String8& value) {
4527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mAttributes.add(key, value);
4627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return DRM_NO_ERROR;
4727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
4827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
4927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8 DrmInfo::get(const String8& key) const {
5027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    if (NAME_NOT_FOUND != mAttributes.indexOfKey(key)) {
5127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi        return mAttributes.valueFor(key);
5227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    }
5327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return String8("");
5427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
5527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
5627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiint DrmInfo::indexOfKey(const String8& key) const {
5727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mAttributes.indexOfKey(key);
5827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
5927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::KeyIterator DrmInfo::keyIterator() const {
6127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return KeyIterator(this);
6227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
6327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::Iterator DrmInfo::iterator() const {
6527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return Iterator(this);
6627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
6727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
6827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// KeyIterator implementation
6927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::KeyIterator::KeyIterator(const DrmInfo::KeyIterator& keyIterator) :
7027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmInfo(keyIterator.mDrmInfo), mIndex(keyIterator.mIndex) {
7127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
7327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmInfo::KeyIterator::hasNext() {
7527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return (mIndex < mDrmInfo->mAttributes.size());
7627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
7727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
7827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiconst String8& DrmInfo::KeyIterator::next() {
7927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    const String8& key = mDrmInfo->mAttributes.keyAt(mIndex);
8027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex++;
8127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return key;
8227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
8327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
8427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::KeyIterator& DrmInfo::KeyIterator::operator=(const DrmInfo::KeyIterator& keyIterator) {
8527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmInfo = keyIterator.mDrmInfo;
8627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex = keyIterator.mIndex;
8727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return *this;
8827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
8927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi// Iterator implementation
9127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::Iterator::Iterator(const DrmInfo::Iterator& iterator)
9227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    : mDrmInfo(iterator.mDrmInfo), mIndex(iterator.mIndex) {
9327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
9527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
9627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiDrmInfo::Iterator& DrmInfo::Iterator::operator=(const DrmInfo::Iterator& iterator) {
9727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mDrmInfo = iterator.mDrmInfo;
9827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex = iterator.mIndex;
9927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return *this;
10027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10227ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshibool DrmInfo::Iterator::hasNext() {
10327ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return mIndex < mDrmInfo->mAttributes.size();
10427ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
10527ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
10627ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshiString8& DrmInfo::Iterator::next() {
10727ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    String8& value = mDrmInfo->mAttributes.editValueAt(mIndex);
10827ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    mIndex++;
10927ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi    return value;
11027ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi}
11127ed8ad2db653f6ac07dcf8bcc05e2409c8bb024aimitakeshi
112