Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1314dc08 authored by David Zhao's avatar David Zhao Committed by Android (Google) Code Review
Browse files

Merge "Update TV Input JNI for TVMessage back compat" into main

parents 22eee25d 8b11391b
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ cc_defaults {
        "android.hardware.thermal@1.0",
        "android.hardware.thermal-V1-ndk",
        "android.hardware.tv.input@1.0",
        "android.hardware.tv.input-V1-ndk",
        "android.hardware.tv.input-V2-ndk",
        "android.hardware.vibrator-V2-cpp",
        "android.hardware.vibrator@1.0",
        "android.hardware.vibrator@1.1",
@@ -244,5 +244,5 @@ filegroup {

filegroup {
    name: "lib_oomConnection_native",
    srcs: ["com_android_server_am_OomConnection.cpp",],
    srcs: ["com_android_server_am_OomConnection.cpp"],
}
+43 −12
Original line number Diff line number Diff line
@@ -368,12 +368,20 @@ JTvInputHal::TvInputEventWrapper JTvInputHal::TvInputEventWrapper::createEventWr
}

JTvInputHal::TvMessageEventWrapper JTvInputHal::TvMessageEventWrapper::createEventWrapper(
        const AidlTvMessageEvent& aidlTvMessageEvent) {
        const AidlTvMessageEvent& aidlTvMessageEvent, bool isLegacyMessage) {
    auto messageList = aidlTvMessageEvent.messages;
    TvMessageEventWrapper event;
    event.messages.insert(event.messages.begin(), std::begin(aidlTvMessageEvent.messages) + 1,
                          std::end(aidlTvMessageEvent.messages));
    // Handle backwards compatibility for V1
    if (isLegacyMessage) {
        event.deviceId = messageList[0].groupId;
        event.messages.insert(event.messages.begin(), std::begin(messageList) + 1,
                              std::end(messageList));
    } else {
        event.deviceId = aidlTvMessageEvent.deviceId;
        event.messages.insert(event.messages.begin(), std::begin(messageList),
                              std::end(messageList));
    }
    event.streamId = aidlTvMessageEvent.streamId;
    event.deviceId = aidlTvMessageEvent.messages[0].groupId;
    event.type = aidlTvMessageEvent.type;
    return event;
}
@@ -449,15 +457,30 @@ JTvInputHal::TvInputCallback::TvInputCallback(JTvInputHal* hal) {
::ndk::ScopedAStatus JTvInputHal::TvInputCallback::notifyTvMessageEvent(
        const AidlTvMessageEvent& event) {
    const std::string DEVICE_ID_SUBTYPE = "device_id";
    if (event.messages.size() > 1 && event.messages[0].subType == DEVICE_ID_SUBTYPE) {
        mHal->mLooper
                ->sendMessage(new NotifyTvMessageHandler(mHal,
                                                         TvMessageEventWrapper::createEventWrapper(
                                                                 event)),
    ::ndk::ScopedAStatus status = ::ndk::ScopedAStatus::ok();
    int32_t aidlVersion = 0;
    if (mHal->mTvInput->getAidlInterfaceVersion(&aidlVersion).isOk() && event.messages.size() > 0) {
        bool validLegacyMessage = aidlVersion == 1 &&
                event.messages[0].subType == DEVICE_ID_SUBTYPE && event.messages.size() > 1;
        bool validTvMessage = aidlVersion > 1 && event.messages.size() > 0;
        if (validLegacyMessage || validTvMessage) {
            mHal->mLooper->sendMessage(
                    new NotifyTvMessageHandler(mHal,
                                               TvMessageEventWrapper::
                                                       createEventWrapper(event,
                                                                          validLegacyMessage)),
                    static_cast<int>(event.type));
        } else {
            status = ::ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
            ALOGE("The TVMessage event was malformed for HAL version: %d", aidlVersion);
        }

    return ::ndk::ScopedAStatus::ok();
    } else {
        status = ::ndk::ScopedAStatus::fromExceptionCode(EX_ILLEGAL_ARGUMENT);
        ALOGE("The TVMessage event was empty or the HAL version (version: %d) could not "
              "be inferred.",
              aidlVersion);
    }
    return status;
}

JTvInputHal::ITvInputWrapper::ITvInputWrapper(std::shared_ptr<AidlITvInput>& aidlTvInput)
@@ -521,4 +544,12 @@ JTvInputHal::ITvInputWrapper::ITvInputWrapper(std::shared_ptr<AidlITvInput>& aid
    }
}

::ndk::ScopedAStatus JTvInputHal::ITvInputWrapper::getAidlInterfaceVersion(int32_t* _aidl_return) {
    if (mIsHidl) {
        return ::ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION);
    } else {
        return mAidlTvInput->getInterfaceVersion(_aidl_return);
    }
}

} // namespace android
+2 −1
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ private:
        TvMessageEventWrapper() {}

        static TvMessageEventWrapper createEventWrapper(
                const AidlTvMessageEvent& aidlTvMessageEvent);
                const AidlTvMessageEvent& aidlTvMessageEvent, bool isLegacyMessage);

        int streamId;
        int deviceId;
@@ -195,6 +195,7 @@ private:
        ::ndk::ScopedAStatus getTvMessageQueueDesc(
                MQDescriptor<int8_t, SynchronizedReadWrite>* out_queue, int32_t in_deviceId,
                int32_t in_streamId);
        ::ndk::ScopedAStatus getAidlInterfaceVersion(int32_t* _aidl_return);

    private:
        ::ndk::ScopedAStatus hidlSetCallback(const std::shared_ptr<TvInputCallback>& in_callback);