blob: 960c25e50eb497d1af884cfa1afce9a9b47b0bde [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/assistant/model/assistant_ui_model.h"
#include "ash/assistant/model/assistant_ui_model_observer.h"
#include "ash/public/cpp/app_list/app_list_features.h"
namespace ash {
AssistantUiModel::AssistantUiModel()
: ui_mode_(app_list_features::IsEmbeddedAssistantUIEnabled()
? AssistantUiMode::kLauncherEmbeddedUi
: AssistantUiMode::kMainUi) {}
AssistantUiModel::~AssistantUiModel() = default;
void AssistantUiModel::AddObserver(AssistantUiModelObserver* observer) {
observers_.AddObserver(observer);
}
void AssistantUiModel::RemoveObserver(AssistantUiModelObserver* observer) {
observers_.RemoveObserver(observer);
}
void AssistantUiModel::SetUiMode(AssistantUiMode ui_mode) {
if (ui_mode == ui_mode_)
return;
ui_mode_ = ui_mode;
NotifyUiModeChanged();
}
void AssistantUiModel::SetVisible(AssistantEntryPoint entry_point) {
SetVisibility(AssistantVisibility::kVisible, entry_point,
/*exit_point=*/base::nullopt);
}
void AssistantUiModel::SetHidden(AssistantExitPoint exit_point) {
SetVisibility(AssistantVisibility::kHidden,
/*entry_point=*/base::nullopt, exit_point);
}
void AssistantUiModel::SetClosed(AssistantExitPoint exit_point) {
SetVisibility(AssistantVisibility::kClosed,
/*entry_point=*/base::nullopt, exit_point);
}
void AssistantUiModel::SetUsableWorkArea(const gfx::Rect& usable_work_area) {
if (usable_work_area == usable_work_area_)
return;
usable_work_area_ = usable_work_area;
NotifyUsableWorkAreaChanged();
}
void AssistantUiModel::SetVisibility(
AssistantVisibility visibility,
base::Optional<AssistantEntryPoint> entry_point,
base::Optional<AssistantExitPoint> exit_point) {
if (visibility == visibility_)
return;
const AssistantVisibility old_visibility = visibility_;
visibility_ = visibility;
if (visibility == AssistantVisibility::kVisible) {
// Cache the Assistant entry point used for query count UMA metric.
DCHECK(entry_point.has_value());
DCHECK(!exit_point.has_value());
entry_point_ = entry_point.value();
} else {
DCHECK(!entry_point.has_value());
DCHECK(exit_point.has_value());
}
NotifyUiVisibilityChanged(old_visibility, entry_point, exit_point);
}
void AssistantUiModel::NotifyUiModeChanged() {
for (AssistantUiModelObserver& observer : observers_)
observer.OnUiModeChanged(ui_mode_);
}
void AssistantUiModel::NotifyUiVisibilityChanged(
AssistantVisibility old_visibility,
base::Optional<AssistantEntryPoint> entry_point,
base::Optional<AssistantExitPoint> exit_point) {
for (AssistantUiModelObserver& observer : observers_)
observer.OnUiVisibilityChanged(visibility_, old_visibility, entry_point,
exit_point);
}
void AssistantUiModel::NotifyUsableWorkAreaChanged() {
for (AssistantUiModelObserver& observer : observers_)
observer.OnUsableWorkAreaChanged(usable_work_area_);
}
} // namespace ash