assistant_ui_controller_impl.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // 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. #ifndef ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_IMPL_H_
  5. #define ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_IMPL_H_
  6. #include "ash/ash_export.h"
  7. #include "ash/assistant/model/assistant_interaction_model_observer.h"
  8. #include "ash/assistant/model/assistant_ui_model.h"
  9. #include "ash/assistant/model/assistant_ui_model_observer.h"
  10. #include "ash/assistant/ui/assistant_view_delegate.h"
  11. #include "ash/highlighter/highlighter_controller.h"
  12. #include "ash/public/cpp/assistant/controller/assistant_controller.h"
  13. #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
  14. #include "ash/public/cpp/assistant/controller/assistant_ui_controller.h"
  15. #include "ash/wm/overview/overview_controller.h"
  16. #include "ash/wm/overview/overview_observer.h"
  17. #include "base/scoped_observation.h"
  18. #include "third_party/abseil-cpp/absl/types/optional.h"
  19. class PrefRegistrySimple;
  20. namespace chromeos {
  21. namespace assistant {
  22. namespace mojom {
  23. class Assistant;
  24. } // namespace mojom
  25. } // namespace assistant
  26. } // namespace chromeos
  27. namespace ash {
  28. class AssistantControllerImpl;
  29. class ASH_EXPORT AssistantUiControllerImpl
  30. : public AssistantUiController,
  31. public AssistantControllerObserver,
  32. public AssistantInteractionModelObserver,
  33. public AssistantUiModelObserver,
  34. public AssistantViewDelegateObserver,
  35. public HighlighterController::Observer,
  36. public OverviewObserver {
  37. public:
  38. explicit AssistantUiControllerImpl(
  39. AssistantControllerImpl* assistant_controller);
  40. AssistantUiControllerImpl(const AssistantUiControllerImpl&) = delete;
  41. AssistantUiControllerImpl& operator=(const AssistantUiControllerImpl&) =
  42. delete;
  43. ~AssistantUiControllerImpl() override;
  44. static void RegisterProfilePrefs(PrefRegistrySimple* registry);
  45. // Provides a pointer to the |assistant| owned by AssistantService.
  46. void SetAssistant(assistant::Assistant* assistant);
  47. // AssistantUiController:
  48. const AssistantUiModel* GetModel() const override;
  49. int GetNumberOfSessionsWhereOnboardingShown() const override;
  50. bool HasShownOnboarding() const override;
  51. void SetKeyboardTraversalMode(bool keyboard_traversal_mode) override;
  52. void ShowUi(AssistantEntryPoint entry_point) override;
  53. void ToggleUi(absl::optional<AssistantEntryPoint> entry_point,
  54. absl::optional<AssistantExitPoint> exit_point) override;
  55. absl::optional<base::ScopedClosureRunner> CloseUi(
  56. AssistantExitPoint exit_point) override;
  57. void SetAppListBubbleWidth(int width) override;
  58. // AssistantInteractionModelObserver:
  59. void OnInteractionStateChanged(InteractionState interaction_state) override;
  60. // AssistantControllerObserver:
  61. void OnAssistantControllerConstructed() override;
  62. void OnAssistantControllerDestroying() override;
  63. void OnOpeningUrl(const GURL& url,
  64. bool in_background,
  65. bool from_server) override;
  66. // AssistantUiModelObserver:
  67. void OnUiVisibilityChanged(
  68. AssistantVisibility new_visibility,
  69. AssistantVisibility old_visibility,
  70. absl::optional<AssistantEntryPoint> entry_point,
  71. absl::optional<AssistantExitPoint> exit_point) override;
  72. // AssistantViewDelegateObserver:
  73. void OnOnboardingShown() override;
  74. // HighlighterController::Observer:
  75. void OnHighlighterEnabledChanged(HighlighterEnabledState state) override;
  76. // OverviewObserver:
  77. void OnOverviewModeWillStart() override;
  78. void ShowUnboundErrorToast();
  79. private:
  80. AssistantControllerImpl* const assistant_controller_; // Owned by Shell.
  81. AssistantUiModel model_;
  82. bool has_shown_onboarding_ = false;
  83. // Owned by AssistantService.
  84. assistant::Assistant* assistant_ = nullptr;
  85. base::ScopedObservation<AssistantController, AssistantControllerObserver>
  86. assistant_controller_observation_{this};
  87. base::ScopedObservation<HighlighterController,
  88. HighlighterController::Observer>
  89. highlighter_controller_observation_{this};
  90. base::ScopedObservation<OverviewController, OverviewObserver>
  91. overview_controller_observation_{this};
  92. base::WeakPtrFactory<AssistantUiControllerImpl>
  93. weak_factory_for_delayed_visibility_changes_{this};
  94. };
  95. } // namespace ash
  96. #endif // ASH_ASSISTANT_ASSISTANT_UI_CONTROLLER_IMPL_H_