blob: 1da1db20cb9ba9385a9e84116a7ae9881ff8bec1 [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.
#ifndef SRC_UI_A11Y_LIB_SCREEN_READER_SCREEN_READER_H_
#define SRC_UI_A11Y_LIB_SCREEN_READER_SCREEN_READER_H_
#include <memory>
#include <string>
#include <unordered_map>
#include "src/ui/a11y/lib/gesture_manager/gesture_handler.h"
#include "src/ui/a11y/lib/gesture_manager/gesture_listener_registry.h"
#include "src/ui/a11y/lib/screen_reader/i18n/messages.h"
#include "src/ui/a11y/lib/screen_reader/screen_reader_context.h"
#include "src/ui/a11y/lib/screen_reader/swipe_action.h"
#include "src/ui/a11y/lib/tts/tts_manager.h"
namespace a11y {
// The Fuchsia Screen Reader.
//
// This is the base class for the Fuchsia Screen Reader. It connects to all
// services necessary to make a funcional Screen Reader.
//
// A common loop would be something like:
// User performes some sort of input (via touch screen for example). The input
// triggers an Screen Reader action, which then calls the Fuchsia
// Accessibility APIs. Finally, some output is communicated (via speech, for
// example).
// TODO(MI4-2546): Rename this class once the final screen reader name exists.
class ScreenReader {
public:
// Pointers to Semantics Manager, TTS Manager, Gesture Listener Registry and Gesture Manager must
// outlive screen reader. A11y App is responsible for creating these pointers along with Screen
// Reader object.
ScreenReader(std::unique_ptr<ScreenReaderContext> context,
a11y::SemanticsSource* semantics_source, a11y::TtsManager* tts_manager,
a11y::GestureListenerRegistry* gesture_listener_registry);
~ScreenReader() = default;
void BindGestures(a11y::GestureHandler* gesture_handler);
private:
// Initializes services TTS Engine and binds actions to gesture manager.
void InitializeServicesAndAction();
// Helps finding the appropriate Action based on Action Name and calls Run()
// for the matched Action.
// Functions returns false, if no action matches the provided "action_name",
// returns true if Run() is called.
bool ExecuteAction(const std::string& action_name, ScreenReaderAction::ActionData action_data);
// Stores information about the Screen Reader state.
std::unique_ptr<ScreenReaderContext> context_;
// Maps action names to screen reader actions.
std::unordered_map<std::string, std::unique_ptr<ScreenReaderAction>> actions_;
// Stores Action context which is required to build an Action.
std::unique_ptr<ScreenReaderAction::ActionContext> action_context_;
// Pointer to TTS Manager.
a11y::TtsManager* tts_manager_;
// Pointer to Gesture Listener Registry.
GestureListenerRegistry* gesture_listener_registry_;
};
} // namespace a11y
#endif // SRC_UI_A11Y_LIB_SCREEN_READER_SCREEN_READER_H_