blob: 4518f53ef19dedf0b699e76d05cd4e1f196ad8a6 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/camera/bin/device/testing/fake_device_listener_registry.h"
namespace camera {
FakeDeviceListenerRegistry::FakeDeviceListenerRegistry(async_dispatcher_t* dispatcher)
: dispatcher_(dispatcher) {}
fidl::InterfaceRequestHandler<fuchsia::ui::policy::DeviceListenerRegistry>
FakeDeviceListenerRegistry::GetHandler() {
return fit::bind_member(this, &FakeDeviceListenerRegistry::OnNewRequest);
}
void FakeDeviceListenerRegistry::SendMediaButtonsEvent(
fuchsia::ui::input::MediaButtonsEvent event) {
for (auto& [id, listener] : listeners_) {
fuchsia::ui::input::MediaButtonsEvent event_clone;
ZX_ASSERT(event.Clone(&event_clone) == ZX_OK);
listener.events().OnMediaButtonsEvent(std::move(event_clone));
}
}
void FakeDeviceListenerRegistry::OnNewRequest(
fidl::InterfaceRequest<fuchsia::ui::policy::DeviceListenerRegistry> request) {
bindings_.AddBinding(this, std::move(request), dispatcher_);
}
void FakeDeviceListenerRegistry::RegisterMediaButtonsListener(
fuchsia::ui::policy::MediaButtonsListenerHandle listener) {
fuchsia::ui::policy::MediaButtonsListenerPtr listener_ptr;
listener_ptr.set_error_handler(
[this, id = listener_id_next_](zx_status_t status) { listeners_.erase(id); });
ZX_ASSERT(listener_ptr.Bind(std::move(listener), dispatcher_) == ZX_OK);
listeners_[listener_id_next_++] = std::move(listener_ptr);
}
} // namespace camera