blob: fdbbdd759af93dbaac7c0f294e405b8bcaeb48ab [file] [log] [blame]
// Copyright 2021 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/ui/scenic/lib/input/a11y_registry.h"
#include <lib/syslog/cpp/macros.h>
namespace scenic_impl::input {
A11yPointerEventRegistry::A11yPointerEventRegistry(sys::ComponentContext* context,
fit::function<void()> on_register,
fit::function<void()> on_disconnect)
: on_register_(std::move(on_register)), on_disconnect_(std::move(on_disconnect)) {
FX_DCHECK(on_register_);
FX_DCHECK(on_disconnect_);
// Adding the service here is safe since the A11yPointerEventRegistry instance in InputSystem is
// created at construction time.
context->outgoing()->AddPublicService(accessibility_pointer_event_registry_.GetHandler(this));
}
void A11yPointerEventRegistry::Register(
fidl::InterfaceHandle<fuchsia::ui::input::accessibility::PointerEventListener>
pointer_event_listener,
RegisterCallback callback) {
if (!accessibility_pointer_event_listener()) {
accessibility_pointer_event_listener_.Bind(std::move(pointer_event_listener));
accessibility_pointer_event_listener_.set_error_handler(
[this](zx_status_t) { on_disconnect_(); });
on_register_();
callback(/*success=*/true);
} else {
// An accessibility listener is already registered.
callback(/*success=*/false);
}
}
} // namespace scenic_impl::input