| // 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 CHROME_BROWSER_ASH_INPUT_METHOD_EDITOR_CONTEXT_H_ |
| #define CHROME_BROWSER_ASH_INPUT_METHOD_EDITOR_CONTEXT_H_ |
| |
| #include <optional> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/browser/ash/input_method/editor_geolocation_provider.h" |
| #include "chrome/browser/ash/input_method/text_field_contextual_info_fetcher.h" |
| #include "chromeos/ui/base/app_types.h" |
| #include "services/metrics/public/cpp/ukm_source_id.h" |
| #include "ui/base/ime/ash/text_input_method.h" |
| #include "ui/base/ime/text_input_type.h" |
| #include "url/gurl.h" |
| |
| namespace ash::input_method { |
| |
| struct EditorTextSelection { |
| bool is_valid_selection = true; |
| size_t non_whitespace_selected_text_length = 0; |
| }; |
| |
| // Holds any "interesting" context for the Editor feature. This includes; the |
| // currently active input method, size of the currently selected text, among |
| // other tidbits. |
| class EditorContext { |
| public: |
| class Observer { |
| public: |
| virtual ~Observer() = default; |
| virtual void OnContextUpdated() = 0; |
| virtual void OnImeChange(std::string_view engine_id) = 0; |
| }; |
| |
| class System { |
| public: |
| virtual ~System() = default; |
| virtual std::optional<ukm::SourceId> GetUkmSourceId() = 0; |
| }; |
| |
| EditorContext(Observer* observer, |
| System* system, |
| EditorGeolocationProvider* geolocation_provider); |
| ~EditorContext(); |
| |
| bool InTabletMode(); |
| |
| std::optional<ukm::SourceId> GetUkmSourceId(); |
| |
| // Event listeners |
| void OnInputContextUpdated( |
| const TextInputMethod::InputContext& input_context, |
| const TextFieldContextualInfo& text_field_contextual_info); |
| void OnActivateIme(std::string_view engine_id); |
| void OnTextSelectionChanged(const EditorTextSelection& text_selection); |
| void OnTabletModeUpdated(bool tablet_mode_enabled); |
| |
| // Getters |
| std::string active_country_code(); |
| std::string_view active_engine_id(); |
| ui::TextInputType input_type(); |
| chromeos::AppType app_type(); |
| std::string_view app_id(); |
| GURL active_url(); |
| size_t selected_text_length(); |
| bool is_selection_valid(); |
| |
| private: |
| // Not owned by this class |
| raw_ptr<Observer> observer_; |
| raw_ptr<System> system_; |
| raw_ptr<EditorGeolocationProvider> geolocation_provider_; |
| |
| std::string active_country_code_; |
| std::string active_engine_id_; |
| ui::TextInputType input_type_ = ui::TEXT_INPUT_TYPE_NONE; |
| chromeos::AppType app_type_ = chromeos::AppType::NON_APP; |
| std::string app_id_; |
| GURL active_url_; |
| bool tablet_mode_enabled_ = false; |
| EditorTextSelection text_selection_; |
| }; |
| |
| } // namespace ash::input_method |
| |
| #endif // CHROME_BROWSER_ASH_INPUT_METHOD_EDITOR_CONTEXT_H_ |