#ifndef ASH_ASSISTANT_ASSISTANT_SUGGESTIONS_CONTROLLER_IMPL_H_
#define ASH_ASSISTANT_ASSISTANT_SUGGESTIONS_CONTROLLER_IMPL_H_
#include "ash/assistant/model/assistant_suggestions_model.h"
#include "ash/assistant/model/assistant_ui_model_observer.h"
#include "ash/public/cpp/assistant/assistant_state.h"
#include "ash/public/cpp/assistant/controller/assistant_controller.h"
#include "ash/public/cpp/assistant/controller/assistant_controller_observer.h"
#include "ash/public/cpp/assistant/controller/assistant_suggestions_controller.h"
#include "base/scoped_observation.h"
namespace ash {
class AssistantSuggestionsControllerImpl
: public AssistantSuggestionsController,
public AssistantControllerObserver,
public AssistantUiModelObserver,
public AssistantStateObserver {
public:
AssistantSuggestionsControllerImpl();
AssistantSuggestionsControllerImpl(
const AssistantSuggestionsControllerImpl&) = delete;
AssistantSuggestionsControllerImpl& operator=(
const AssistantSuggestionsControllerImpl&) = delete;
~AssistantSuggestionsControllerImpl() override;
const AssistantSuggestionsModel* GetModel() const override;
void OnAssistantControllerConstructed() override;
void OnAssistantControllerDestroying() override;
void OnUiVisibilityChanged(
AssistantVisibility new_visibility,
AssistantVisibility old_visibility,
absl::optional<AssistantEntryPoint> entry_point,
absl::optional<AssistantExitPoint> exit_point) override;
private:
void OnAssistantContextEnabled(bool enabled) override;
void OnAssistantOnboardingModeChanged(
assistant::prefs::AssistantOnboardingMode onboarding_mode) override;
void UpdateConversationStarters();
void UpdateOnboardingSuggestions();
AssistantSuggestionsModel model_;
base::ScopedObservation<AssistantController, AssistantControllerObserver>
assistant_controller_observation_{this};
base::WeakPtrFactory<AssistantSuggestionsControllerImpl>
conversation_starters_weak_factory_{this};
};
}
#endif