1 // Copyright 2020 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 
5 #ifndef ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_ONBOARDING_VIEW_H_
6 #define ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_ONBOARDING_VIEW_H_
7 
8 #include <vector>
9 
10 #include "ash/assistant/model/assistant_suggestions_model_observer.h"
11 #include "ash/assistant/model/assistant_ui_model_observer.h"
12 #include "ash/public/cpp/assistant/controller/assistant_controller.h"
13 #include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
14 #include "base/component_export.h"
15 #include "base/scoped_observer.h"
16 #include "ui/views/view.h"
17 
18 namespace views {
19 class Label;
20 }  // namespace views
21 
22 namespace ash {
23 
24 class AssistantViewDelegate;
25 
COMPONENT_EXPORT(ASSISTANT_UI)26 class COMPONENT_EXPORT(ASSISTANT_UI) AssistantOnboardingView
27     : public views::View,
28       public AssistantControllerObserver,
29       public AssistantSuggestionsModelObserver,
30       public AssistantUiModelObserver {
31  public:
32   explicit AssistantOnboardingView(AssistantViewDelegate* delegate);
33   AssistantOnboardingView(const AssistantOnboardingView&) = delete;
34   AssistantOnboardingView& operator=(const AssistantOnboardingView&) = delete;
35   ~AssistantOnboardingView() override;
36 
37   // views::View:
38   const char* GetClassName() const override;
39   gfx::Size CalculatePreferredSize() const override;
40   void ChildPreferredSizeChanged(views::View* child) override;
41 
42   // AssistantController:
43   void OnAssistantControllerDestroying() override;
44 
45   // AssistantSuggestionsModelObserver:
46   void OnOnboardingSuggestionsChanged(
47       const std::vector<AssistantSuggestion>& onboarding_suggestions) override;
48 
49   // AssistantUiModelObserver:
50   void OnUiVisibilityChanged(
51       AssistantVisibility new_visibility,
52       AssistantVisibility old_visibility,
53       base::Optional<AssistantEntryPoint> entry_point,
54       base::Optional<AssistantExitPoint> exit_point) override;
55 
56  private:
57   void InitLayout();
58   void UpdateGreeting();
59   void UpdateSuggestions();
60 
61   AssistantViewDelegate* const delegate_;  // Owned by AssistantController.
62   views::Label* greeting_ = nullptr;       // Owned by view hierarchy.
63   views::View* grid_ = nullptr;            // Owned by view hierarchy.
64 
65   ScopedObserver<AssistantController, AssistantControllerObserver>
66       assistant_controller_observer_{this};
67 };
68 
69 }  // namespace ash
70 
71 #endif  // ASH_ASSISTANT_UI_MAIN_STAGE_ASSISTANT_ONBOARDING_VIEW_H_
72