1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_ACCESSIBILITY_DICTATION_BUBBLE_CONTROLLER_H_
#define ASH_SYSTEM_ACCESSIBILITY_DICTATION_BUBBLE_CONTROLLER_H_
#include <optional>
#include <string>
#include "ash/ash_export.h"
#include "ash/public/cpp/style/color_mode_observer.h"
#include "ash/style/dark_light_mode_controller_impl.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
#include "base/scoped_observation.h"
#include "ui/base/ime/input_method.h"
#include "ui/base/ime/input_method_observer.h"
#include "ui/views/view_observer.h"
namespace ui {
class InputMethod;
class TextInputClient;
} // namespace ui
namespace views {
class View;
class Widget;
} // namespace views
namespace ash {
enum class DictationBubbleHintType;
enum class DictationBubbleIconType;
class DictationBubbleView;
// Manages the Dictation bubble view.
class ASH_EXPORT DictationBubbleController : public ui::InputMethodObserver,
public views::ViewObserver {
public:
class Observer : public base::CheckedObserver {
public:
// Called whenever the Dictation bubble UI is updated.
virtual void OnBubbleUpdated() = 0;
};
DictationBubbleController();
DictationBubbleController(const DictationBubbleController&) = delete;
DictationBubbleController& operator=(const DictationBubbleController&) =
delete;
~DictationBubbleController() override;
void AddObserver(Observer* observer);
void RemoveObserver(Observer* observer);
// Updates the bubble's visibility and text content.
void UpdateBubble(
bool visible,
DictationBubbleIconType icon,
const std::optional<std::u16string>& text,
const std::optional<std::vector<DictationBubbleHintType>>& hints);
// ui::InputMethodObserver:
void OnFocus() override {}
void OnBlur() override {}
void OnCaretBoundsChanged(const ui::TextInputClient* client) override;
void OnTextInputStateChanged(const ui::TextInputClient* client) override {}
void OnInputMethodDestroyed(const ui::InputMethod* input_method) override {}
// views::ViewObserver:
void OnViewIsDeleting(views::View* observed_view) override;
private:
friend class DictationBubbleControllerTest;
friend class DictationBubbleTestHelper;
// Performs initialization if necessary.
void MaybeInitialize();
// Updates the view and widget.
void Update(DictationBubbleIconType icon,
const std::optional<std::u16string>& text,
const std::optional<std::vector<DictationBubbleHintType>>& hints);
base::ObserverList<Observer> observers_;
// Owned by views hierarchy.
raw_ptr<DictationBubbleView> dictation_bubble_view_ = nullptr;
raw_ptr<views::Widget> widget_ = nullptr;
base::ScopedObservation<ui::InputMethod, ui::InputMethodObserver>
input_method_observer_{this};
};
} // namespace ash
#endif // ASH_SYSTEM_ACCESSIBILITY_DICTATION_BUBBLE_CONTROLLER_H_
|