blob: a7dd89a9eb019dd5999bb036a31b3e6f9fb732ed [file] [log] [blame]
David Blackf7f8d2012018-04-25 19:48:021// Copyright 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
David Black1d1b1b672018-06-20 21:41:575#ifndef ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_H_
6#define ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_H_
David Blackf7f8d2012018-04-25 19:48:027
Xiaohui Chen6c60ed32018-09-05 17:55:358#include <map>
Meilin Wang88c15d02018-11-29 21:31:369#include <memory>
Xiaohui Chen6c60ed32018-09-05 17:55:3510#include <string>
11
Qiang Xu89e5fa52018-05-25 18:26:0812#include "ash/ash_export.h"
David Blacke802d4062018-06-29 01:59:0513#include "ash/assistant/assistant_controller_observer.h"
David Black5318ec12018-05-02 01:54:3214#include "ash/assistant/model/assistant_interaction_model_observer.h"
David Black1d1b1b672018-06-20 21:41:5715#include "ash/assistant/model/assistant_ui_model.h"
David Blackad1f2f592018-07-09 23:28:1016#include "ash/assistant/model/assistant_ui_model_observer.h"
David Black4703d7b2018-06-22 00:16:3917#include "ash/highlighter/highlighter_controller.h"
wutao12d92042020-03-23 02:25:3218#include "ash/wm/overview/overview_observer.h"
David Blackf7f8d2012018-04-25 19:48:0219#include "base/macros.h"
Meilin Wang88c15d02018-11-29 21:31:3620#include "base/optional.h"
David Blackf7f8d2012018-04-25 19:48:0221
David Black4703d7b2018-06-22 00:16:3922namespace chromeos {
23namespace assistant {
24namespace mojom {
25class Assistant;
26} // namespace mojom
27} // namespace assistant
28} // namespace chromeos
29
David Blackf7f8d2012018-04-25 19:48:0230namespace ash {
31
David Blackec4cbcd2020-04-15 20:35:2532class AssistantControllerImpl;
David Blacke0ac6ee2019-09-06 00:58:0133
David Black1d1b1b672018-06-20 21:41:5734class ASH_EXPORT AssistantUiController
David Black08e64c802020-02-01 03:23:5935 : public AssistantControllerObserver,
David Blacke4b8cc1b2018-06-06 17:45:2636 public AssistantInteractionModelObserver,
David Blackad1f2f592018-07-09 23:28:1037 public AssistantUiModelObserver,
wutao12d92042020-03-23 02:25:3238 public HighlighterController::Observer,
39 public OverviewObserver {
David Blackf7f8d2012018-04-25 19:48:0240 public:
David Blackec4cbcd2020-04-15 20:35:2541 explicit AssistantUiController(AssistantControllerImpl* assistant_controller);
David Black1d1b1b672018-06-20 21:41:5742 ~AssistantUiController() override;
David Blackf7f8d2012018-04-25 19:48:0243
David Black4703d7b2018-06-22 00:16:3944 // Provides a pointer to the |assistant| owned by AssistantController.
45 void SetAssistant(chromeos::assistant::mojom::Assistant* assistant);
46
David Black9531544b2018-06-05 22:44:2447 // Returns the underlying model.
David Blackcdc2b972018-09-14 01:18:2748 const AssistantUiModel* model() const { return &model_; }
David Black9531544b2018-06-05 22:44:2449
50 // Adds/removes the specified model |observer|.
David Black1d1b1b672018-06-20 21:41:5751 void AddModelObserver(AssistantUiModelObserver* observer);
52 void RemoveModelObserver(AssistantUiModelObserver* observer);
David Black9531544b2018-06-05 22:44:2453
David Black5318ec12018-05-02 01:54:3254 // AssistantInteractionModelObserver:
David Black9531544b2018-06-05 22:44:2455 void OnInputModalityChanged(InputModality input_modality) override;
David Black5318ec12018-05-02 01:54:3256 void OnInteractionStateChanged(InteractionState interaction_state) override;
David Blacke4b8cc1b2018-06-06 17:45:2657 void OnMicStateChanged(MicState mic_state) override;
58
David Black4703d7b2018-06-22 00:16:3959 // HighlighterController::Observer:
60 void OnHighlighterEnabledChanged(HighlighterEnabledState state) override;
61
David Blacke802d4062018-06-29 01:59:0562 // AssistantControllerObserver:
David Black1f58bcc2018-07-12 17:59:4063 void OnAssistantControllerConstructed() override;
64 void OnAssistantControllerDestroying() override;
Xiao Yange7202fd42019-06-11 19:56:3365 void OnOpeningUrl(const GURL& url,
66 bool in_background,
67 bool from_server) override;
David Blacke802d4062018-06-29 01:59:0568
David Blackad1f2f592018-07-09 23:28:1069 // AssistantUiModelObserver:
Meilin Wang88c15d02018-11-29 21:31:3670 void OnUiVisibilityChanged(
71 AssistantVisibility new_visibility,
72 AssistantVisibility old_visibility,
73 base::Optional<AssistantEntryPoint> entry_point,
74 base::Optional<AssistantExitPoint> exit_point) override;
David Blackad1f2f592018-07-09 23:28:1075
wutao12d92042020-03-23 02:25:3276 // OverviewObserver:
77 void OnOverviewModeWillStart() override;
78
Meilin Wang88c15d02018-11-29 21:31:3679 void ShowUi(AssistantEntryPoint entry_point);
Meilin Wang88c15d02018-11-29 21:31:3680 void CloseUi(AssistantExitPoint exit_point);
81 void ToggleUi(base::Optional<AssistantEntryPoint> entry_point,
82 base::Optional<AssistantExitPoint> exit_point);
Qiang Xu89e5fa52018-05-25 18:26:0883
David Black5318ec12018-05-02 01:54:3284 private:
David Blacke4b8cc1b2018-06-06 17:45:2685 // Updates UI mode to |ui_mode| if specified. Otherwise UI mode is updated on
David Blacke90ce072019-04-19 23:17:2886 // the basis of interaction/widget visibility state. If |due_to_interaction|
87 // is true, the UI mode changed because of an Assistant interaction.
88 void UpdateUiMode(base::Optional<AssistantUiMode> ui_mode = base::nullopt,
89 bool due_to_interaction = false);
David Blacke4b8cc1b2018-06-06 17:45:2690
David Blackec4cbcd2020-04-15 20:35:2591 AssistantControllerImpl* const assistant_controller_; // Owned by Shell.
David Blackf7f8d2012018-04-25 19:48:0292
David Black4703d7b2018-06-22 00:16:3993 // Owned by AssistantController.
94 chromeos::assistant::mojom::Assistant* assistant_ = nullptr;
95
David Blackcdc2b972018-09-14 01:18:2796 AssistantUiModel model_;
David Black9766ecd2018-06-20 18:29:1197
David Black1d1b1b672018-06-20 21:41:5798 DISALLOW_COPY_AND_ASSIGN(AssistantUiController);
David Blackf7f8d2012018-04-25 19:48:0299};
100
101} // namespace ash
102
David Black1d1b1b672018-06-20 21:41:57103#endif // ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_H_