13473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi/* 23473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Copyright (C) 2010 The Android Open Source Project 33473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 43473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Licensed under the Apache License, Version 2.0 (the "License"); 53473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * you may not use this file except in compliance with the License. 63473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * You may obtain a copy of the License at 73473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 83473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * http://www.apache.org/licenses/LICENSE-2.0 93473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * 103473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * Unless required by applicable law or agreed to in writing, software 113473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * distributed under the License is distributed on an "AS IS" BASIS, 123473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * See the License for the specific language governing permissions and 143473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi * limitations under the License. 153473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi */ 163473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 173473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi#include <drm/DrmMetadata.h> 183473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 193473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiusing namespace android; 203473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 213473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiint DrmMetadata::getCount(void) const { 223473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return mMetadataMap.size(); 233473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 243473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 253473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimistatus_t DrmMetadata::put(const String8* key, 263473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi const char* value) { 273473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi if((value != NULL) && (key != NULL)) { 283473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi int length = strlen(value); 293473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi char* charValue = new char[length + 1]; 303473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 313473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi memcpy(charValue, value, length); 323473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi charValue[length] = '\0'; 333473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mMetadataMap.add(*key, charValue); 343473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 353473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return NO_ERROR; 363473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 373473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 383473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiString8 DrmMetadata::get(const String8& key) const { 393473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi if (NULL != getValue(&key)) { 403473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return String8(getValue(&key)); 413473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 423473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi else { 433473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return String8(""); 443473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 453473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 463473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 473473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiconst char* DrmMetadata::getValue(const String8* key) const { 483473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi if(key != NULL) { 493473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi if (NAME_NOT_FOUND != mMetadataMap.indexOfKey(*key)) { 503473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return mMetadataMap.valueFor(*key); 513473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 523473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi else { 533473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return NULL; 543473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 553473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } else { 563473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return NULL; 573473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi } 583473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 593473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 603473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiconst char* DrmMetadata::getAsByteArray(const String8* key) const { 613473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return getValue(key); 623473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 633473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 643473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimibool DrmMetadata::KeyIterator::hasNext() { 653473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return mIndex < mDrmMetadata->mMetadataMap.size(); 663473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 673473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 683473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimiconst String8& DrmMetadata::KeyIterator::next() { 693473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi const String8& key = mDrmMetadata->mMetadataMap.keyAt(mIndex); 703473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mIndex++; 713473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return key; 723473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 733473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 743473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::KeyIterator DrmMetadata::keyIterator() { 753473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return KeyIterator(this); 763473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 773473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 783473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::KeyIterator::KeyIterator(const DrmMetadata::KeyIterator& keyIterator) : 793473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mDrmMetadata(keyIterator.mDrmMetadata), 803473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mIndex(keyIterator.mIndex) { 813856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("DrmMetadata::KeyIterator::KeyIterator"); 823473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 833473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 843473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::KeyIterator& DrmMetadata::KeyIterator::operator=(const DrmMetadata::KeyIterator& keyIterator) { 853856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("DrmMetadata::KeyIterator::operator="); 863473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mDrmMetadata = keyIterator.mDrmMetadata; 873473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mIndex = keyIterator.mIndex; 883473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return *this; 893473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 903473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 913473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 923473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::Iterator DrmMetadata::iterator() { 933473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return Iterator(this); 943473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 953473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 963473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::Iterator::Iterator(const DrmMetadata::Iterator& iterator) : 973473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mDrmMetadata(iterator.mDrmMetadata), 983473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mIndex(iterator.mIndex) { 993856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("DrmMetadata::Iterator::Iterator"); 1003473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 1013473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1023473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiDrmMetadata::Iterator& DrmMetadata::Iterator::operator=(const DrmMetadata::Iterator& iterator) { 1033856b090cd04ba5dd4a59a12430ed724d5995909Steve Block ALOGV("DrmMetadata::Iterator::operator="); 1043473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mDrmMetadata = iterator.mDrmMetadata; 1053473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mIndex = iterator.mIndex; 1063473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return *this; 1073473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 1083473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1093473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimibool DrmMetadata::Iterator::hasNext() { 1103473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return mIndex < mDrmMetadata->mMetadataMap.size(); 1113473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 1123473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi 1133473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi AimiString8 DrmMetadata::Iterator::next() { 1143473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi String8 value = String8(mDrmMetadata->mMetadataMap.editValueAt(mIndex)); 1153473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi mIndex++; 1163473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi return value; 1173473846f64f5b28e1cbeb70ef5867073fc93159eTakeshi Aimi} 118