blob: 967e392f943e5664bc78a827485e79626d3a5430 [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.
#ifndef SRC_UI_A11Y_LIB_SCREEN_READER_RECOVER_A11Y_FOCUS_ACTION_H_
#define SRC_UI_A11Y_LIB_SCREEN_READER_RECOVER_A11Y_FOCUS_ACTION_H_
#include <lib/fpromise/scope.h>
#include "src/ui/a11y/lib/screen_reader/focus/a11y_focus_manager.h"
#include "src/ui/a11y/lib/screen_reader/screen_reader_action.h"
#include "src/ui/a11y/lib/screen_reader/screen_reader_context.h"
namespace a11y {
// This action verifies that the A11Y Focus is still valid. If the node that the focus points to no
// longer exists, the focus is reset.
class RecoverA11YFocusAction : public ScreenReaderAction {
public:
explicit RecoverA11YFocusAction(ActionContext* action_context,
ScreenReaderContext* screen_reader_context);
~RecoverA11YFocusAction() override;
void Run(a11y::gesture_util_v2::GestureContext gesture_context) override;
private:
// Check whether the focus is valid (i.e., the a11y focus exists and the
// focused node is still present).
bool FocusIsValid();
fpromise::scope scope_;
};
} // namespace a11y
#endif // SRC_UI_A11Y_LIB_SCREEN_READER_RECOVER_A11Y_FOCUS_ACTION_H_