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

Commit 8b11391b authored by David Zhao's avatar David Zhao
Browse files

Update TV Input JNI for TVMessage back compat

Bug: 302208143
Test: mmm
Change-Id: I5d3f9f8a838ccf1d52b0652a09efe7b31d24ea6c
parent e33451a3
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
@@ -369,12 +369,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;
}
@@ -450,15 +458,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)
@@ -522,4 +545,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);