Merge "Fix type issues of TvMessage" into udc-dev

This commit is contained in:
Hongguang Chen
2023-05-16 03:53:07 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 14 deletions

View File

@@ -234,6 +234,7 @@ final class TvInputHal implements Handler.Callback {
int type = msg.arg2; int type = msg.arg2;
Bundle data = (Bundle) msg.obj; Bundle data = (Bundle) msg.obj;
mCallback.onTvMessage(deviceId, type, data); mCallback.onTvMessage(deviceId, type, data);
break;
} }
default: default:

View File

@@ -16,6 +16,8 @@
#include "JTvInputHal.h" #include "JTvInputHal.h"
#include <nativehelper/ScopedLocalRef.h>
namespace android { namespace android {
JTvInputHal::JTvInputHal(JNIEnv* env, jobject thiz, std::shared_ptr<ITvInputWrapper> tvInput, JTvInputHal::JTvInputHal(JNIEnv* env, jobject thiz, std::shared_ptr<ITvInputWrapper> tvInput,
@@ -278,21 +280,27 @@ void JTvInputHal::onStreamConfigurationsChanged(int deviceId, int cableConnectio
void JTvInputHal::onTvMessage(int deviceId, int streamId, AidlTvMessageEventType type, void JTvInputHal::onTvMessage(int deviceId, int streamId, AidlTvMessageEventType type,
AidlTvMessage& message, signed char data[], int dataLength) { AidlTvMessage& message, signed char data[], int dataLength) {
JNIEnv* env = AndroidRuntime::getJNIEnv(); JNIEnv* env = AndroidRuntime::getJNIEnv();
jobject bundle = env->NewObject(gBundleClassInfo.clazz, gBundleClassInfo.constructor); ScopedLocalRef<jobject> bundle(env,
const jsize len = static_cast<jsize>(dataLength); env->NewObject(gBundleClassInfo.clazz,
jbyteArray convertedData = env->NewByteArray(len); gBundleClassInfo.constructor));
env->SetByteArrayRegion(convertedData, 0, len, reinterpret_cast<const jbyte*>(data)); ScopedLocalRef<jbyteArray> convertedData(env, env->NewByteArray(dataLength));
env->CallObjectMethod(bundle, gBundleClassInfo.putString, env->SetByteArrayRegion(convertedData.get(), 0, dataLength, reinterpret_cast<jbyte*>(data));
"android.media.tv.TvInputManager.subtype", message.subType.c_str()); std::string key = "android.media.tv.TvInputManager.raw_data";
env->CallObjectMethod(bundle, gBundleClassInfo.putByteArray, ScopedLocalRef<jstring> jkey(env, env->NewStringUTF(key.c_str()));
"android.media.tv.TvInputManager.raw_data", convertedData); env->CallVoidMethod(bundle.get(), gBundleClassInfo.putByteArray, jkey.get(),
env->CallObjectMethod(bundle, gBundleClassInfo.putInt, convertedData.get());
"android.media.tv.TvInputManager.group_id", message.groupId); ScopedLocalRef<jstring> subtype(env, env->NewStringUTF(message.subType.c_str()));
env->CallObjectMethod(bundle, gBundleClassInfo.putInt, key = "android.media.tv.TvInputManager.subtype";
"android.media.tv.TvInputManager.stream_id", streamId); jkey = ScopedLocalRef<jstring>(env, env->NewStringUTF(key.c_str()));
env->CallVoidMethod(bundle.get(), gBundleClassInfo.putString, jkey.get(), subtype.get());
key = "android.media.tv.TvInputManager.group_id";
jkey = ScopedLocalRef<jstring>(env, env->NewStringUTF(key.c_str()));
env->CallVoidMethod(bundle.get(), gBundleClassInfo.putInt, jkey.get(), message.groupId);
key = "android.media.tv.TvInputManager.stream_id";
jkey = ScopedLocalRef<jstring>(env, env->NewStringUTF(key.c_str()));
env->CallVoidMethod(bundle.get(), gBundleClassInfo.putInt, jkey.get(), streamId);
env->CallVoidMethod(mThiz, gTvInputHalClassInfo.tvMessageReceived, deviceId, env->CallVoidMethod(mThiz, gTvInputHalClassInfo.tvMessageReceived, deviceId,
static_cast<int>(type), bundle); static_cast<jint>(type), bundle.get());
env->DeleteLocalRef(convertedData);
} }
void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) { void JTvInputHal::onCaptured(int deviceId, int streamId, uint32_t seq, bool succeeded) {