/* * Copyright 2011, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // #define LOG_NDEBUG 0 #define LOG_TAG "AndroidMediaUtils" #include #include "android_media_Utils.h" namespace android { bool ConvertKeyValueArraysToKeyedVector( JNIEnv *env, jobjectArray keys, jobjectArray values, KeyedVector* keyedVector) { int nKeyValuePairs = 0; bool failed = false; if (keys != NULL && values != NULL) { nKeyValuePairs = env->GetArrayLength(keys); failed = (nKeyValuePairs != env->GetArrayLength(values)); } if (!failed) { failed = ((keys != NULL && values == NULL) || (keys == NULL && values != NULL)); } if (failed) { LOGE("keys and values arrays have different length"); jniThrowException(env, "java/lang/IllegalArgumentException", NULL); return false; } for (int i = 0; i < nKeyValuePairs; ++i) { // No need to check on the ArrayIndexOutOfBoundsException, since // it won't happen here. jstring key = (jstring) env->GetObjectArrayElement(keys, i); jstring value = (jstring) env->GetObjectArrayElement(values, i); const char* keyStr = env->GetStringUTFChars(key, NULL); if (!keyStr) { // OutOfMemoryError return false; } const char* valueStr = env->GetStringUTFChars(value, NULL); if (!valueStr) { // OutOfMemoryError env->ReleaseStringUTFChars(key, keyStr); return false; } keyedVector->add(String8(keyStr), String8(valueStr)); env->ReleaseStringUTFChars(key, keyStr); env->ReleaseStringUTFChars(value, valueStr); env->DeleteLocalRef(key); env->DeleteLocalRef(value); } return true; } } // namespace android