diff options
author | Dongwon Kang <dwkang@google.com> | 2018-09-11 14:40:23 -0700 |
---|---|---|
committer | Dongwon Kang <dwkang@google.com> | 2018-09-11 17:02:13 -0700 |
commit | bf98d54da94fe56f3670f371c66d420a6b6c4f17 (patch) | |
tree | 5f5ad51dc8ac313a5c1a6be99a78719273f5a09d /media/jni/android_media_MediaMetricsJNI.cpp | |
parent | 81ed05df1d8fe671cae3c219efcbbe8d2f99542c (diff) |
MediaPlayer2: remove libandroid_runtime + other static lib dependency.
MediaMetricsJNI.cpp is forked from libandroid_runtime instead of moving
since it was also used with in the libandroid_runtime.so.
Test: MediaPlayer2Test
Bug: 112767225
Change-Id: Iebb0ce2736dbf4df9288a5c3aca447a52c4de533
Diffstat (limited to 'media/jni/android_media_MediaMetricsJNI.cpp')
-rw-r--r-- | media/jni/android_media_MediaMetricsJNI.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaMetricsJNI.cpp b/media/jni/android_media_MediaMetricsJNI.cpp new file mode 100644 index 000000000000..3ded8c260512 --- /dev/null +++ b/media/jni/android_media_MediaMetricsJNI.cpp @@ -0,0 +1,90 @@ +/* + * Copyright 2017, 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. + */ + +#include <jni.h> +#include <nativehelper/JNIHelp.h> + +#include "android_media_MediaMetricsJNI.h" +#include <media/MediaAnalyticsItem.h> + + +// Copeid from core/jni/ (libandroid_runtime.so) +namespace android { + +// place the attributes into a java PersistableBundle object +jobject MediaMetricsJNI::writeMetricsToBundle(JNIEnv* env, MediaAnalyticsItem *item, jobject mybundle) { + + jclass clazzBundle = env->FindClass("android/os/PersistableBundle"); + if (clazzBundle==NULL) { + ALOGD("can't find android/os/PersistableBundle"); + return NULL; + } + // sometimes the caller provides one for us to fill + if (mybundle == NULL) { + // create the bundle + jmethodID constructID = env->GetMethodID(clazzBundle, "<init>", "()V"); + mybundle = env->NewObject(clazzBundle, constructID); + if (mybundle == NULL) { + return NULL; + } + } + + // grab methods that we can invoke + jmethodID setIntID = env->GetMethodID(clazzBundle, "putInt", "(Ljava/lang/String;I)V"); + jmethodID setLongID = env->GetMethodID(clazzBundle, "putLong", "(Ljava/lang/String;J)V"); + jmethodID setDoubleID = env->GetMethodID(clazzBundle, "putDouble", "(Ljava/lang/String;D)V"); + jmethodID setStringID = env->GetMethodID(clazzBundle, "putString", "(Ljava/lang/String;Ljava/lang/String;)V"); + + // env, class, method, {parms} + //env->CallVoidMethod(env, mybundle, setIntID, jstr, jint); + + // iterate through my attributes + // -- get name, get type, get value + // -- insert appropriately into the bundle + for (size_t i = 0 ; i < item->mPropCount; i++ ) { + MediaAnalyticsItem::Prop *prop = &item->mProps[i]; + // build the key parameter from prop->mName + jstring keyName = env->NewStringUTF(prop->mName); + // invoke the appropriate method to insert + switch (prop->mType) { + case MediaAnalyticsItem::kTypeInt32: + env->CallVoidMethod(mybundle, setIntID, + keyName, (jint) prop->u.int32Value); + break; + case MediaAnalyticsItem::kTypeInt64: + env->CallVoidMethod(mybundle, setLongID, + keyName, (jlong) prop->u.int64Value); + break; + case MediaAnalyticsItem::kTypeDouble: + env->CallVoidMethod(mybundle, setDoubleID, + keyName, (jdouble) prop->u.doubleValue); + break; + case MediaAnalyticsItem::kTypeCString: + env->CallVoidMethod(mybundle, setStringID, keyName, + env->NewStringUTF(prop->u.CStringValue)); + break; + default: + ALOGE("to_String bad item type: %d for %s", + prop->mType, prop->mName); + break; + } + } + + return mybundle; +} + +}; // namespace android + |