blob: 0cf7967fbc81672fc3cfc4b1c3200a92bf670c22 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/media_session/public/cpp/media_image.h"
#include <string>
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "jni/MediaImage_jni.h"
using base::android::ScopedJavaLocalRef;
namespace media_session {
// static
ScopedJavaLocalRef<jobjectArray> MediaImage::ToJavaArray(
JNIEnv* env,
const std::vector<MediaImage>& images) {
ScopedJavaLocalRef<jclass> string_clazz = base::android::GetClass(
env, "org/chromium/services/media_session/MediaImage");
jobjectArray joa =
env->NewObjectArray(images.size(), string_clazz.obj(), NULL);
base::android::CheckException(env);
for (size_t i = 0; i < images.size(); ++i) {
ScopedJavaLocalRef<jobject> item = images[i].CreateJavaObject(env);
env->SetObjectArrayElement(joa, i, item.obj());
}
return ScopedJavaLocalRef<jobjectArray>(env, joa);
}
ScopedJavaLocalRef<jobject> MediaImage::CreateJavaObject(JNIEnv* env) const {
std::string src_spec = src.spec();
ScopedJavaLocalRef<jstring> j_src(
base::android::ConvertUTF8ToJavaString(env, src_spec));
ScopedJavaLocalRef<jstring> j_type(
base::android::ConvertUTF16ToJavaString(env, type));
// Create a Java array to store the sizes in.
ScopedJavaLocalRef<jclass> string_clazz =
base::android::GetClass(env, "android/graphics/Rect");
jobjectArray joa =
env->NewObjectArray(sizes.size(), string_clazz.obj(), NULL);
base::android::CheckException(env);
// Create an Android Rect for each size and store it in the array.
for (size_t i = 0; i < sizes.size(); ++i) {
ScopedJavaLocalRef<jobject> item =
Java_MediaImage_createRect(env, sizes[i].width(), sizes[i].height());
env->SetObjectArrayElement(joa, i, item.obj());
}
return Java_MediaImage_create(env, j_src, j_type,
ScopedJavaLocalRef<jobjectArray>(env, joa));
}
} // namespace media_session