blob: 4b7ddbf2ae96ad94ef162e81c8c352f21bca289b [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().OnEvent(std::move(event_clone), [] {});
}
}
void FakeDeviceListenerRegistry::OnNewRequest(
fidl::InterfaceRequest<fuchsia::ui::policy::DeviceListenerRegistry> request) {
bindings_.AddBinding(this, std::move(request), dispatcher_);
}
void FakeDeviceListenerRegistry::RegisterListener(
fuchsia::ui::policy::MediaButtonsListenerHandle listener,
fuchsia::ui::policy::DeviceListenerRegistry::RegisterListenerCallback callback) {
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);
callback();
}
} // namespace camera