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
|
// Copyright 2023 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_SWITCH_H_
#define CHROME_BROWSER_ASH_INPUT_METHOD_EDITOR_SWITCH_H_
#include "base/memory/raw_ptr.h"
#include "chrome/browser/ash/input_method/editor_consent_enums.h"
#include "chrome/browser/ash/input_method/editor_consent_store.h"
#include "chrome/browser/ash/input_method/editor_context.h"
#include "chrome/browser/profiles/profile.h"
#include "chromeos/ash/components/editor_menu/public/cpp/editor_mode.h"
#include "chromeos/ash/components/editor_menu/public/cpp/editor_text_selection_mode.h"
#include "ui/base/ime/ash/text_input_method.h"
namespace ash::input_method {
// EditorSwitch is the centralized switch that decides whether the feature is
// available for use, and if available, further decides whether the feature
// should be popped up given a particular input context.
class EditorSwitch {
public:
class Observer {
public:
virtual void OnEditorModeChanged(
chromeos::editor_menu::EditorMode mode) = 0;
};
EditorSwitch(Observer* observer, Profile* profile, EditorContext* context);
EditorSwitch(const EditorSwitch&) = delete;
EditorSwitch& operator=(const EditorSwitch&) = delete;
~EditorSwitch();
// Determines if the feature trace is ever allowed to be visible.
bool IsAllowedForUse() const;
bool IsFeedbackEnabled() const;
bool CanShowNoticeBanner() const;
chromeos::editor_menu::EditorMode GetEditorMode() const;
chromeos::editor_menu::EditorTextSelectionMode GetEditorTextSelectionMode()
const;
EditorOpportunityMode GetEditorOpportunityMode() const;
std::vector<EditorBlockedReason> GetBlockedReasons() const;
void OnContextUpdated();
private:
// Determines if the feature can be triggered from an input context. If it is
// not allowed for use, then returns false.
bool CanBeTriggered() const;
raw_ptr<Observer> observer_;
raw_ptr<Profile> profile_;
raw_ptr<EditorContext> context_;
const std::vector<std::string> ime_allowlist_;
// Used to determine when Observer::OnEditorModeChanged should be called.
chromeos::editor_menu::EditorMode last_known_editor_mode_;
};
} // namespace ash::input_method
#endif // CHROME_BROWSER_ASH_INPUT_METHOD_EDITOR_SWITCH_H_
|