| // Copyright 2024 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_QUICK_INSERT_QUICK_INSERT_CAPS_LOCK_BUBBLE_CONTROLLER_H_ | |
| #define ASH_QUICK_INSERT_QUICK_INSERT_CAPS_LOCK_BUBBLE_CONTROLLER_H_ | |
| #include <string> | |
| #include "ash/ash_export.h" | |
| #include "base/memory/raw_ptr.h" | |
| #include "base/memory/weak_ptr.h" | |
| #include "base/scoped_observation.h" | |
| #include "base/timer/timer.h" | |
| #include "ui/base/ime/ash/ime_keyboard.h" | |
| #include "ui/events/event_handler.h" | |
| namespace ui { | |
| class Event; | |
| } | |
| namespace ash { | |
| class QuickInsertCapsLockStateView; | |
| // TODO: b/358248370 - This class is not related to Quick Insert. We should move | |
| // this code to a different directory. | |
| class ASH_EXPORT QuickInsertCapsLockBubbleController | |
| : public input_method::ImeKeyboard::Observer, | |
| public ui::EventHandler { | |
| public: | |
| explicit QuickInsertCapsLockBubbleController( | |
| input_method::ImeKeyboard* keyboard); | |
| QuickInsertCapsLockBubbleController( | |
| const QuickInsertCapsLockBubbleController&) = delete; | |
| QuickInsertCapsLockBubbleController& operator=( | |
| const QuickInsertCapsLockBubbleController&) = delete; | |
| ~QuickInsertCapsLockBubbleController() override; | |
| void CloseBubble(); | |
| // input_method::ImeKeyboard::Observer: | |
| void OnCapsLockChanged(bool enabled) override; | |
| void OnLayoutChanging(const std::string& layout_name) override; | |
| // ui::EventHandler: | |
| void OnMouseEvent(ui::MouseEvent* event) override; | |
| void OnTouchEvent(ui::TouchEvent* event) override; | |
| void OnKeyEvent(ui::KeyEvent* event) override; | |
| QuickInsertCapsLockStateView* bubble_view_for_testing() { | |
| return bubble_view_.get(); | |
| } | |
| private: | |
| // Closes the bubble due to an input event. | |
| void MaybeCloseBubbleByEvent(ui::Event* event); | |
| raw_ptr<QuickInsertCapsLockStateView> bubble_view_ = nullptr; | |
| // Timer to close the bubble after a delay. | |
| base::OneShotTimer bubble_close_timer_; | |
| // Time that the bubble was last shown. | |
| base::TimeTicks last_shown_; | |
| base::ScopedObservation<input_method::ImeKeyboard, | |
| input_method::ImeKeyboard::Observer> | |
| ime_keyboard_observation_{this}; | |
| base::WeakPtrFactory<QuickInsertCapsLockBubbleController> weak_ptr_factory_{ | |
| this}; | |
| }; | |
| } // namespace ash | |
| #endif // ASH_QUICK_INSERT_QUICK_INSERT_CAPS_LOCK_BUBBLE_CONTROLLER_H_ |