[go: nahoru, domu]

blob: 34fe4c5813aba58a4649306897be93a3aa749098 [file] [log] [blame]
// Copyright 2020 The Chromium 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 ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_CONTROLLER_H_
#define ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_CONTROLLER_H_
#include "ash/accessibility/accessibility_observer.h"
#include "ash/ash_export.h"
#include "ash/public/cpp/accessibility_controller_enums.h"
#include "ash/public/cpp/ash_constants.h"
#include "ash/system/accessibility/floating_accessibility_detailed_controller.h"
#include "ash/system/accessibility/floating_accessibility_view.h"
#include "ash/system/locale/locale_update_controller_impl.h"
namespace ash {
class AccessibilityControllerImpl;
class FloatingAccessibilityView;
// Controls the floating accessibility menu.
class ASH_EXPORT FloatingAccessibilityController
: public FloatingAccessibilityView::Delegate,
public FloatingAccessibilityDetailedController::Delegate,
public TrayBubbleView::Delegate,
public LocaleChangeObserver,
public AccessibilityObserver {
public:
explicit FloatingAccessibilityController(
AccessibilityControllerImpl* accessibility_controller);
FloatingAccessibilityController(const FloatingAccessibilityController&) =
delete;
FloatingAccessibilityController& operator=(
const FloatingAccessibilityController&) = delete;
~FloatingAccessibilityController() override;
// Starts showing the floating menu when called.
void Show(FloatingMenuPosition position);
void SetMenuPosition(FloatingMenuPosition new_position);
// AccessibilityObserver:
void OnAccessibilityStatusChanged() override;
// Focuses on the first element in the floating menu.
void FocusOnMenu();
private:
friend class FloatingAccessibilityControllerTest;
// FloatingAccessibilityView::Delegate:
void OnDetailedMenuEnabled(bool enabled) override;
void OnLayoutChanged() override;
// FloatingAccessibilityDetailedController::Delegate:
void OnDetailedMenuClosed() override;
views::Widget* GetBubbleWidget() override;
// TrayBubbleView::Delegate:
void BubbleViewDestroyed() override;
std::u16string GetAccessibleNameForBubble() override;
// LocaleChangeObserver:
void OnLocaleChanged() override;
FloatingAccessibilityView* menu_view_ = nullptr;
FloatingAccessibilityBubbleView* bubble_view_ = nullptr;
views::Widget* bubble_widget_ = nullptr;
bool detailed_view_shown_ = false;
// Controller for the detailed view, exists only when visible.
std::unique_ptr<FloatingAccessibilityDetailedController>
detailed_menu_controller_;
FloatingMenuPosition position_ = kDefaultFloatingMenuPosition;
// Used in tests to notify on the menu layout change events.
base::RepeatingClosure on_layout_change_;
AccessibilityControllerImpl* const accessibility_controller_; // Owns us.
};
} // namespace ash
#endif // ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_CONTROLLER_H_