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)26class 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