blob: c11ebcbca43208f15ed5eda9bcd8589a5176e55b [file] [log] [blame]
Haofan Wange02b8092024-10-28 21:47:27 +00001/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Haofan Wangb97b3f32024-10-31 15:33:17 -070016#define LOG_TAG "ambient_backlight_aidl_hal_test"
Haofan Wange02b8092024-10-28 21:47:27 +000017
18#include <aidl/Gtest.h>
19#include <aidl/Vintf.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070020#include <aidl/android/hardware/tv/mediaquality/AmbientBacklightEvent.h>
21#include <aidl/android/hardware/tv/mediaquality/AmbientBacklightSettings.h>
22#include <aidl/android/hardware/tv/mediaquality/BnMediaQualityCallback.h>
23#include <aidl/android/hardware/tv/mediaquality/IMediaQuality.h>
24#include <android/binder_auto_utils.h>
25#include <android/binder_manager.h>
Haofan Wange02b8092024-10-28 21:47:27 +000026#include <binder/IServiceManager.h>
27#include <binder/ProcessState.h>
Haofan Wangb97b3f32024-10-31 15:33:17 -070028#include <future>
Haofan Wange02b8092024-10-28 21:47:27 +000029
Haofan Wangb97b3f32024-10-31 15:33:17 -070030using aidl::android::hardware::graphics::common::PixelFormat;
31using aidl::android::hardware::tv::mediaquality::AmbientBacklightEvent;
32using aidl::android::hardware::tv::mediaquality::AmbientBacklightSettings;
33using aidl::android::hardware::tv::mediaquality::AmbientBacklightSource;
34using aidl::android::hardware::tv::mediaquality::BnMediaQualityCallback;
35using aidl::android::hardware::tv::mediaquality::IMediaQuality;
Haofan Wange02b8092024-10-28 21:47:27 +000036using android::ProcessState;
Haofan Wange02b8092024-10-28 21:47:27 +000037using android::String16;
Haofan Wangb97b3f32024-10-31 15:33:17 -070038using ndk::ScopedAStatus;
39using ndk::SpAIBinder;
Haofan Wange02b8092024-10-28 21:47:27 +000040
41#define ASSERT_OK(ret) ASSERT_TRUE(ret.isOk())
42#define EXPECT_OK(ret) EXPECT_TRUE(ret.isOk())
43
Haofan Wangb97b3f32024-10-31 15:33:17 -070044class MediaQualityCallback : public BnMediaQualityCallback {
Haofan Wange02b8092024-10-28 21:47:27 +000045 public:
Haofan Wangb97b3f32024-10-31 15:33:17 -070046 explicit MediaQualityCallback(
47 const std::function<void(const AmbientBacklightEvent& event)>& on_hal_event_cb)
48 : on_hal_event_cb_(on_hal_event_cb) {}
49 ScopedAStatus notifyAmbientBacklightEvent(const AmbientBacklightEvent& event) override {
50 on_hal_event_cb_(event);
51 return ScopedAStatus::ok();
Haofan Wange02b8092024-10-28 21:47:27 +000052 }
53
Haofan Wangb97b3f32024-10-31 15:33:17 -070054 private:
55 std::function<void(const AmbientBacklightEvent& event)> on_hal_event_cb_;
Haofan Wange02b8092024-10-28 21:47:27 +000056};
57
Haofan Wangb97b3f32024-10-31 15:33:17 -070058class MediaQualityAidl : public testing::TestWithParam<std::string> {
59 public:
60 virtual void SetUp() override {
61 mediaquality = IMediaQuality::fromBinder(
62 SpAIBinder(AServiceManager_waitForService(GetParam().c_str())));
63 ASSERT_NE(mediaquality, nullptr);
64 }
65 std::shared_ptr<IMediaQuality> mediaquality;
66};
67
68TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetectionEnabled) {
69 std::promise<void> open_cb_promise;
70 std::future<void> open_cb_future{open_cb_promise.get_future()};
71 std::shared_ptr<MediaQualityCallback> callback =
72 ndk::SharedRefBase::make<MediaQualityCallback>([&open_cb_promise](auto event) {
73 EXPECT_EQ(event.getTag(), AmbientBacklightEvent::Tag::enabled);
74 EXPECT_EQ(event.template get<AmbientBacklightEvent::Tag::enabled>(), true);
75 open_cb_promise.set_value();
76 return ScopedAStatus::ok();
77 });
78 ASSERT_OK(mediaquality->setCallback(callback));
79 ASSERT_OK(mediaquality->setAmbientBacklightDetectionEnabled(true));
80 std::chrono::milliseconds timeout{10000};
81 EXPECT_EQ(open_cb_future.wait_for(timeout), std::future_status::ready);
Haofan Wange02b8092024-10-28 21:47:27 +000082}
83
Haofan Wangb97b3f32024-10-31 15:33:17 -070084TEST_P(MediaQualityAidl, TestGetAmbientBacklightDetectionEnabled) {
Haofan Wange02b8092024-10-28 21:47:27 +000085 bool enabled;
Haofan Wangb97b3f32024-10-31 15:33:17 -070086 ASSERT_OK(mediaquality->getAmbientBacklightDetectionEnabled(&enabled));
87}
88
89TEST_P(MediaQualityAidl, TestSetMediaQualityCallback) {
90 std::shared_ptr<MediaQualityCallback> callback = ndk::SharedRefBase::make<MediaQualityCallback>(
91 [](auto /* event */) { return ScopedAStatus::ok(); });
92 ASSERT_OK(mediaquality->setCallback(callback));
93}
94
95TEST_P(MediaQualityAidl, TestSetAmbientBacklightDetector) {
96 AmbientBacklightSettings in_settings = {
97 .packageName = "com.android.mediaquality",
98 .source = AmbientBacklightSource::VIDEO,
99 .colorFormat = PixelFormat::RGB_888,
100 .hZonesNumber = 32,
101 .vZonesNumber = 20,
102 .hasLetterbox = true,
103 .threshold = 0,
104 };
105 ASSERT_OK(mediaquality->setAmbientBacklightDetector(in_settings));
Haofan Wange02b8092024-10-28 21:47:27 +0000106}
107
108GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(MediaQualityAidl);
109
110INSTANTIATE_TEST_SUITE_P(
111 PerInstance, MediaQualityAidl,
112 testing::ValuesIn(android::getAidlHalInstanceNames(IMediaQuality::descriptor)),
113 android::PrintInstanceNameToString);
114
115int main(int argc, char** argv) {
116 ::testing::InitGoogleTest(&argc, argv);
117 ProcessState::self()->setThreadPoolMaxThreadCount(1);
118 ProcessState::self()->startThreadPool();
119 return RUN_ALL_TESTS();
120}