[go: nahoru, domu]

blob: 34fe4c5813aba58a4649306897be93a3aa749098 [file] [log] [blame]
Anatoliy Potapchuk8a969632020-04-14 13:25:551// Copyright 2020 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_CONTROLLER_H_
6#define ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_CONTROLLER_H_
7
Anatoliy Potapchuk5addce72020-04-23 14:20:388#include "ash/accessibility/accessibility_observer.h"
9#include "ash/ash_export.h"
Anatoliy Potapchuk8a969632020-04-14 13:25:5510#include "ash/public/cpp/accessibility_controller_enums.h"
11#include "ash/public/cpp/ash_constants.h"
Anatoliy Potapchuk5addce72020-04-23 14:20:3812#include "ash/system/accessibility/floating_accessibility_detailed_controller.h"
Anatoliy Potapchuk8a969632020-04-14 13:25:5513#include "ash/system/accessibility/floating_accessibility_view.h"
14#include "ash/system/locale/locale_update_controller_impl.h"
15
16namespace ash {
17
Anatoliy Potapchuk5addce72020-04-23 14:20:3818class AccessibilityControllerImpl;
Anatoliy Potapchuk8a969632020-04-14 13:25:5519class FloatingAccessibilityView;
20
21// Controls the floating accessibility menu.
Anatoliy Potapchuk5addce72020-04-23 14:20:3822class ASH_EXPORT FloatingAccessibilityController
Anatoliy Potapchuk8a969632020-04-14 13:25:5523 : public FloatingAccessibilityView::Delegate,
Anatoliy Potapchuk5addce72020-04-23 14:20:3824 public FloatingAccessibilityDetailedController::Delegate,
Anatoliy Potapchuk8a969632020-04-14 13:25:5525 public TrayBubbleView::Delegate,
Anatoliy Potapchuk5addce72020-04-23 14:20:3826 public LocaleChangeObserver,
27 public AccessibilityObserver {
Anatoliy Potapchuk8a969632020-04-14 13:25:5528 public:
Anatoliy Potapchukcaa4ce42020-04-28 22:56:2329 explicit FloatingAccessibilityController(
30 AccessibilityControllerImpl* accessibility_controller);
Anatoliy Potapchuk8a969632020-04-14 13:25:5531 FloatingAccessibilityController(const FloatingAccessibilityController&) =
32 delete;
33 FloatingAccessibilityController& operator=(
34 const FloatingAccessibilityController&) = delete;
35 ~FloatingAccessibilityController() override;
36
37 // Starts showing the floating menu when called.
38 void Show(FloatingMenuPosition position);
39 void SetMenuPosition(FloatingMenuPosition new_position);
40
Anatoliy Potapchuk5addce72020-04-23 14:20:3841 // AccessibilityObserver:
42 void OnAccessibilityStatusChanged() override;
43
Anatoliy Potapchuk535fa6b2020-05-11 23:41:2844 // Focuses on the first element in the floating menu.
45 void FocusOnMenu();
46
Anatoliy Potapchuk8a969632020-04-14 13:25:5547 private:
48 friend class FloatingAccessibilityControllerTest;
49 // FloatingAccessibilityView::Delegate:
50 void OnDetailedMenuEnabled(bool enabled) override;
Anatoliy Potapchukcaa4ce42020-04-28 22:56:2351 void OnLayoutChanged() override;
Anatoliy Potapchuk5addce72020-04-23 14:20:3852 // FloatingAccessibilityDetailedController::Delegate:
53 void OnDetailedMenuClosed() override;
Anatoliy Potapchuk31128fa2020-05-08 20:00:1454 views::Widget* GetBubbleWidget() override;
Anatoliy Potapchuk8a969632020-04-14 13:25:5555 // TrayBubbleView::Delegate:
56 void BubbleViewDestroyed() override;
Jan Wilken Dörrie85285b02021-03-11 23:38:4757 std::u16string GetAccessibleNameForBubble() override;
Anatoliy Potapchuk8a969632020-04-14 13:25:5558 // LocaleChangeObserver:
59 void OnLocaleChanged() override;
60
61 FloatingAccessibilityView* menu_view_ = nullptr;
62 FloatingAccessibilityBubbleView* bubble_view_ = nullptr;
63 views::Widget* bubble_widget_ = nullptr;
64
65 bool detailed_view_shown_ = false;
66
Anatoliy Potapchuk5addce72020-04-23 14:20:3867 // Controller for the detailed view, exists only when visible.
68 std::unique_ptr<FloatingAccessibilityDetailedController>
69 detailed_menu_controller_;
70
Anatoliy Potapchuk8a969632020-04-14 13:25:5571 FloatingMenuPosition position_ = kDefaultFloatingMenuPosition;
Anatoliy Potapchuk5addce72020-04-23 14:20:3872
Anatoliy Potapchukcaa4ce42020-04-28 22:56:2373 // Used in tests to notify on the menu layout change events.
74 base::RepeatingClosure on_layout_change_;
75
76 AccessibilityControllerImpl* const accessibility_controller_; // Owns us.
Anatoliy Potapchuk8a969632020-04-14 13:25:5577};
78
79} // namespace ash
80
81#endif // ASH_SYSTEM_ACCESSIBILITY_FLOATING_ACCESSIBILITY_CONTROLLER_H_