blob: e363dda99e278dd7c1e6cbf8fd1738df10514a77 [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/assistant_view_delegate_impl.h"
#include "ash/assistant/assistant_cache_controller.h"
#include "ash/assistant/assistant_controller.h"
#include "ash/assistant/assistant_controller_observer.h"
#include "ash/assistant/assistant_interaction_controller.h"
#include "ash/assistant/assistant_notification_controller.h"
#include "ash/shell.h"
#include "ash/voice_interaction/voice_interaction_controller.h"
#include "ash/wm/tablet_mode/tablet_mode_controller.h"
namespace ash {
AssistantViewDelegateImpl::AssistantViewDelegateImpl(
AssistantController* assistant_controller)
: assistant_controller_(assistant_controller) {}
AssistantViewDelegateImpl::~AssistantViewDelegateImpl() = default;
const AssistantCacheModel* AssistantViewDelegateImpl::GetCacheModel() const {
return assistant_controller_->cache_controller()->model();
}
const AssistantInteractionModel*
AssistantViewDelegateImpl::GetInteractionModel() const {
return assistant_controller_->interaction_controller()->model();
}
const AssistantNotificationModel*
AssistantViewDelegateImpl::GetNotificationModel() const {
return assistant_controller_->notification_controller()->model();
}
const AssistantUiModel* AssistantViewDelegateImpl::GetUiModel() const {
return assistant_controller_->ui_controller()->model();
}
void AssistantViewDelegateImpl::AddObserver(
AssistantViewDelegateObserver* observer) {
view_delegate_observers_.AddObserver(observer);
}
void AssistantViewDelegateImpl::RemoveObserver(
AssistantViewDelegateObserver* observer) {
view_delegate_observers_.RemoveObserver(observer);
}
void AssistantViewDelegateImpl::AddCacheModelObserver(
AssistantCacheModelObserver* observer) {
assistant_controller_->cache_controller()->AddModelObserver(observer);
}
void AssistantViewDelegateImpl::RemoveCacheModelObserver(
AssistantCacheModelObserver* observer) {
assistant_controller_->cache_controller()->RemoveModelObserver(observer);
}
void AssistantViewDelegateImpl::AddInteractionModelObserver(
AssistantInteractionModelObserver* observer) {
assistant_controller_->interaction_controller()->AddModelObserver(observer);
}
void AssistantViewDelegateImpl::RemoveInteractionModelObserver(
AssistantInteractionModelObserver* observer) {
assistant_controller_->interaction_controller()->RemoveModelObserver(
observer);
}
void AssistantViewDelegateImpl::AddNotificationModelObserver(
AssistantNotificationModelObserver* observer) {
assistant_controller_->notification_controller()->AddModelObserver(observer);
}
void AssistantViewDelegateImpl::RemoveNotificationModelObserver(
AssistantNotificationModelObserver* observer) {
assistant_controller_->notification_controller()->RemoveModelObserver(
observer);
}
void AssistantViewDelegateImpl::AddUiModelObserver(
AssistantUiModelObserver* observer) {
assistant_controller_->ui_controller()->AddModelObserver(observer);
}
void AssistantViewDelegateImpl::RemoveUiModelObserver(
AssistantUiModelObserver* observer) {
assistant_controller_->ui_controller()->RemoveModelObserver(observer);
}
void AssistantViewDelegateImpl::AddVoiceInteractionControllerObserver(
DefaultVoiceInteractionObserver* observer) {
Shell::Get()->voice_interaction_controller()->AddLocalObserver(observer);
}
void AssistantViewDelegateImpl::RemoveVoiceInteractionControllerObserver(
DefaultVoiceInteractionObserver* observer) {
Shell::Get()->voice_interaction_controller()->RemoveLocalObserver(observer);
}
CaptionBarDelegate* AssistantViewDelegateImpl::GetCaptionBarDelegate() {
return assistant_controller_->ui_controller();
}
void AssistantViewDelegateImpl::DownloadImage(
const GURL& url,
mojom::AssistantImageDownloader::DownloadCallback callback) {
assistant_controller_->DownloadImage(url, std::move(callback));
}
mojom::ConsentStatus AssistantViewDelegateImpl::GetConsentStatus() const {
return Shell::Get()
->voice_interaction_controller()
->consent_status()
.value_or(mojom::ConsentStatus::kUnknown);
}
::wm::CursorManager* AssistantViewDelegateImpl::GetCursorManager() {
return Shell::Get()->cursor_manager();
}
void AssistantViewDelegateImpl::GetNavigableContentsFactoryForView(
mojo::PendingReceiver<content::mojom::NavigableContentsFactory> receiver) {
assistant_controller_->GetNavigableContentsFactory(std::move(receiver));
}
aura::Window* AssistantViewDelegateImpl::GetRootWindowForNewWindows() {
return Shell::Get()->GetRootWindowForNewWindows();
}
bool AssistantViewDelegateImpl::IsLaunchWithMicOpen() const {
return Shell::Get()->voice_interaction_controller()->launch_with_mic_open();
}
bool AssistantViewDelegateImpl::IsTabletMode() const {
return Shell::Get()
->tablet_mode_controller()
->IsTabletModeWindowManagerEnabled();
}
void AssistantViewDelegateImpl::OnDialogPlateButtonPressed(
AssistantButtonId id) {
for (auto& observer : view_delegate_observers_)
observer.OnDialogPlateButtonPressed(id);
}
void AssistantViewDelegateImpl::OnDialogPlateContentsCommitted(
const std::string& text) {
for (auto& observer : view_delegate_observers_)
observer.OnDialogPlateContentsCommitted(text);
}
void AssistantViewDelegateImpl::OnMiniViewPressed() {
for (auto& observer : view_delegate_observers_)
observer.OnMiniViewPressed();
}
void AssistantViewDelegateImpl::OnNotificationButtonPressed(
const std::string& notification_id,
int notification_button_index) {
assistant_controller_->notification_controller()->OnNotificationClicked(
notification_id, notification_button_index, /*reply=*/base::nullopt);
}
void AssistantViewDelegateImpl::OnOptInButtonPressed() {
for (auto& observer : view_delegate_observers_)
observer.OnOptInButtonPressed();
}
void AssistantViewDelegateImpl::OnSuggestionChipPressed(
const AssistantSuggestion* suggestion) {
for (AssistantViewDelegateObserver& observer : view_delegate_observers_)
observer.OnSuggestionChipPressed(suggestion);
}
void AssistantViewDelegateImpl::OpenUrlFromView(const GURL& url) {
assistant_controller_->OpenUrl(url);
}
void AssistantViewDelegateImpl::NotifyDeepLinkReceived(
assistant::util::DeepLinkType type,
const std::map<std::string, std::string>& params) {
for (AssistantViewDelegateObserver& observer : view_delegate_observers_)
observer.OnDeepLinkReceived(type, params);
}
} // namespace ash