assistant_ui_model.cc 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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. #include "ash/assistant/model/assistant_ui_model.h"
  5. #include "ash/assistant/model/assistant_ui_model_observer.h"
  6. namespace ash {
  7. std::ostream& operator<<(std::ostream& os, AssistantVisibility visibility) {
  8. switch (visibility) {
  9. case AssistantVisibility::kClosed:
  10. return os << "Closed";
  11. case AssistantVisibility::kClosing:
  12. return os << "Closing";
  13. case AssistantVisibility::kVisible:
  14. return os << "Visible";
  15. }
  16. }
  17. AssistantUiModel::AssistantUiModel() = default;
  18. AssistantUiModel::~AssistantUiModel() = default;
  19. void AssistantUiModel::AddObserver(AssistantUiModelObserver* observer) const {
  20. observers_.AddObserver(observer);
  21. }
  22. void AssistantUiModel::RemoveObserver(
  23. AssistantUiModelObserver* observer) const {
  24. observers_.RemoveObserver(observer);
  25. }
  26. void AssistantUiModel::SetVisible(AssistantEntryPoint entry_point) {
  27. SetVisibility(AssistantVisibility::kVisible, entry_point,
  28. /*exit_point=*/absl::nullopt);
  29. }
  30. void AssistantUiModel::SetClosing(AssistantExitPoint exit_point) {
  31. SetVisibility(AssistantVisibility::kClosing,
  32. /*entry_point=*/absl::nullopt, exit_point);
  33. }
  34. void AssistantUiModel::SetClosed(AssistantExitPoint exit_point) {
  35. SetVisibility(AssistantVisibility::kClosed,
  36. /*entry_point=*/absl::nullopt, exit_point);
  37. }
  38. void AssistantUiModel::SetUsableWorkArea(const gfx::Rect& usable_work_area) {
  39. if (usable_work_area == usable_work_area_)
  40. return;
  41. usable_work_area_ = usable_work_area;
  42. NotifyUsableWorkAreaChanged();
  43. }
  44. void AssistantUiModel::SetKeyboardTraversalMode(bool keyboard_traversal_mode) {
  45. if (keyboard_traversal_mode == keyboard_traversal_mode_)
  46. return;
  47. keyboard_traversal_mode_ = keyboard_traversal_mode;
  48. NotifyKeyboardTraversalModeChanged();
  49. }
  50. void AssistantUiModel::SetAppListBubbleWidth(int width) {
  51. app_list_bubble_width_ = width;
  52. }
  53. void AssistantUiModel::SetVisibility(
  54. AssistantVisibility visibility,
  55. absl::optional<AssistantEntryPoint> entry_point,
  56. absl::optional<AssistantExitPoint> exit_point) {
  57. if (visibility == visibility_)
  58. return;
  59. const AssistantVisibility old_visibility = visibility_;
  60. visibility_ = visibility;
  61. if (visibility == AssistantVisibility::kVisible) {
  62. // Cache the Assistant entry point used for query count UMA metric.
  63. DCHECK(entry_point.has_value());
  64. DCHECK(!exit_point.has_value());
  65. entry_point_ = entry_point.value();
  66. } else {
  67. DCHECK(!entry_point.has_value());
  68. DCHECK(exit_point.has_value());
  69. }
  70. NotifyUiVisibilityChanged(old_visibility, entry_point, exit_point);
  71. }
  72. void AssistantUiModel::NotifyKeyboardTraversalModeChanged() {
  73. for (AssistantUiModelObserver& observer : observers_)
  74. observer.OnKeyboardTraversalModeChanged(keyboard_traversal_mode_);
  75. }
  76. void AssistantUiModel::NotifyUiVisibilityChanged(
  77. AssistantVisibility old_visibility,
  78. absl::optional<AssistantEntryPoint> entry_point,
  79. absl::optional<AssistantExitPoint> exit_point) {
  80. for (AssistantUiModelObserver& observer : observers_)
  81. observer.OnUiVisibilityChanged(visibility_, old_visibility, entry_point,
  82. exit_point);
  83. }
  84. void AssistantUiModel::NotifyUsableWorkAreaChanged() {
  85. for (AssistantUiModelObserver& observer : observers_)
  86. observer.OnUsableWorkAreaChanged(usable_work_area_);
  87. }
  88. } // namespace ash