| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_INPUT_METHOD_ASSISTIVE_WINDOW_CONTROLLER_H_ |
| #define CHROME_BROWSER_ASH_INPUT_METHOD_ASSISTIVE_WINDOW_CONTROLLER_H_ |
| |
| #include <memory> |
| #include <optional> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/timer/timer.h" |
| #include "chrome/browser/ash/input_method/assistive_window_properties.h" |
| #include "chrome/browser/ui/ash/input_method/announcement_view.h" |
| #include "chrome/browser/ui/ash/input_method/assistive_delegate.h" |
| #include "chrome/browser/ui/ash/input_method/grammar_suggestion_window.h" |
| #include "chrome/browser/ui/ash/input_method/suggestion_window_view.h" |
| #include "chrome/browser/ui/ash/input_method/undo_window.h" |
| #include "chromeos/ash/services/ime/public/cpp/assistive_suggestions.h" |
| #include "ui/base/ime/ash/ime_assistive_window_handler_interface.h" |
| |
| class Profile; |
| |
| namespace views { |
| class Widget; |
| } // namespace views |
| |
| namespace ash { |
| namespace input_method { |
| |
| class AssistiveWindowControllerDelegate; |
| |
| // AssistiveWindowController controls different assistive windows. |
| class AssistiveWindowController : public views::WidgetObserver, |
| public IMEAssistiveWindowHandlerInterface, |
| public ui::ime::AssistiveDelegate { |
| public: |
| explicit AssistiveWindowController( |
| AssistiveWindowControllerDelegate* delegate, |
| Profile* profile, |
| ui::ime::AnnouncementView* announcement_view = nullptr); |
| |
| AssistiveWindowController(const AssistiveWindowController&) = delete; |
| AssistiveWindowController& operator=(const AssistiveWindowController&) = |
| delete; |
| |
| ~AssistiveWindowController() override; |
| |
| ui::ime::SuggestionWindowView* GetSuggestionWindowViewForTesting(); |
| ui::ime::UndoWindow* GetUndoWindowForTesting() const; |
| |
| // IMEAssistiveWindowHandlerInterface implementation. |
| void SetBounds(const Bounds& bounds) override; |
| void SetAssistiveWindowProperties( |
| const AssistiveWindowProperties& window) override; |
| void ShowSuggestion(const ui::ime::SuggestionDetails& details) override; |
| void SetButtonHighlighted(const ui::ime::AssistiveWindowButton& button, |
| bool highlighted) override; |
| void AcceptSuggestion(const std::u16string& suggestion) override; |
| void HideSuggestion() override; |
| std::u16string GetSuggestionText() const override; |
| size_t GetConfirmedLength() const override; |
| void FocusStateChanged() override; |
| void OnWidgetDestroying(views::Widget* widget) override; |
| void Announce(const std::u16string& message) override; |
| |
| // ui::ime::AssistiveDelegate implementation. |
| void AssistiveWindowButtonClicked( |
| const ui::ime::AssistiveWindowButton& button) const override; |
| void AssistiveWindowChanged( |
| const ash::ime::AssistiveWindow& window) const override; |
| |
| private: |
| ui::ime::SuggestionWindowView::Orientation WindowOrientationFor( |
| ash::ime::AssistiveWindowType window_type); |
| void InitSuggestionWindow( |
| ui::ime::SuggestionWindowView::Orientation orientation); |
| void InitUndoWindow(); |
| void InitGrammarSuggestionWindow(); |
| void InitAnnouncementView(); |
| void DisplayCompletionSuggestion(const ui::ime::SuggestionDetails& details); |
| void ClearPendingSuggestionTimer(); |
| |
| raw_ptr<const AssistiveWindowControllerDelegate> delegate_; |
| AssistiveWindowProperties window_; |
| raw_ptr<ui::ime::SuggestionWindowView> suggestion_window_view_ = nullptr; |
| raw_ptr<ui::ime::UndoWindow> undo_window_ = nullptr; |
| raw_ptr<ui::ime::GrammarSuggestionWindow> grammar_suggestion_window_ = |
| nullptr; |
| raw_ptr<ui::ime::AnnouncementView> announcement_view_ = nullptr; |
| std::u16string suggestion_text_; |
| size_t confirmed_length_ = 0; |
| Bounds bounds_; |
| std::unique_ptr<base::OneShotTimer> pending_suggestion_timer_; |
| |
| base::WeakPtrFactory<AssistiveWindowController> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace input_method |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_INPUT_METHOD_ASSISTIVE_WINDOW_CONTROLLER_H_ |