blob: 0589be5371077789c3d21c8b79482c5fdcd6dd56 [file] [log] [blame]
// Copyright 2019 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 "fuchsia_accessibility.h"
#include <src/lib/fxl/logging.h>
#include <zircon/status.h>
#include "fuchsia/accessibility/semantics/cpp/fidl.h"
namespace flutter_runner {
namespace {
class FuchsiaAccessibilityImpl
: public FuchsiaAccessibility,
public fuchsia::accessibility::semantics::SemanticActionListener {
public:
FuchsiaAccessibilityImpl(std::shared_ptr<sys::ServiceDirectory> services,
fuchsia::ui::views::ViewRef view_ref)
: binding_(this), view_ref_(std::move(view_ref)) {
services->Connect(
fuchsia::accessibility::semantics::SemanticsManager::Name_,
manager_.NewRequest().TakeChannel());
manager_.set_error_handler([this](zx_status_t status) {
FXL_LOG(ERROR)
<< "Flutter cannot connect to SemanticsManager with status: "
<< zx_status_get_string(status) << ".";
});
fidl::InterfaceHandle<
fuchsia::accessibility::semantics::SemanticActionListener>
listener_handle;
binding_.Bind(listener_handle.NewRequest());
manager_->RegisterView(std::move(view_ref_), std::move(listener_handle),
tree_ptr_.NewRequest());
}
~FuchsiaAccessibilityImpl() override = default;
void UpdateSemanticNodes(
std::vector<fuchsia::accessibility::semantics::Node> nodes) override {}
void DeleteSemanticNodes(std::vector<uint32_t> node_ids) override {}
void Commit() override {}
private:
// |fuchsia::accessibility::semantics::SemanticActionListener|
void OnAccessibilityActionRequested(
uint32_t node_id, fuchsia::accessibility::semantics::Action action,
fuchsia::accessibility::semantics::SemanticActionListener::
OnAccessibilityActionRequestedCallback callback) override {}
fuchsia::accessibility::semantics::SemanticsManagerPtr manager_;
fuchsia::accessibility::semantics::SemanticTreePtr tree_ptr_;
fidl::Binding<fuchsia::accessibility::semantics::SemanticActionListener>
binding_;
fuchsia::ui::views::ViewRef view_ref_;
FXL_DISALLOW_COPY_AND_ASSIGN(FuchsiaAccessibilityImpl);
};
} // namespace
// static
std::unique_ptr<FuchsiaAccessibility> FuchsiaAccessibility::Create(
std::shared_ptr<sys::ServiceDirectory> services,
fuchsia::ui::views::ViewRef view_ref) {
return std::make_unique<FuchsiaAccessibilityImpl>(std::move(services),
std::move(view_ref));
}
} // namespace flutter_runner