blob: 492d1c40d856b053dbb97b44cb3873dc35db2521 [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 "chrome/browser/ui/ash/assistant/assistant_client.h"
#include <utility>
#include "ash/public/interfaces/voice_interaction_controller.mojom.h"
#include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/ash/assistant/assistant_context_util.h"
#include "chrome/browser/ui/ash/assistant/assistant_image_downloader.h"
#include "chrome/browser/ui/ash/assistant/assistant_setup.h"
#include "chromeos/services/assistant/public/mojom/constants.mojom.h"
#include "services/service_manager/public/cpp/connector.h"
namespace {
// Owned by ChromeBrowserMainChromeOS:
AssistantClient* g_instance = nullptr;
} // namespace
// static
AssistantClient* AssistantClient::Get() {
DCHECK(g_instance);
return g_instance;
}
AssistantClient::AssistantClient()
: client_binding_(this), device_actions_binding_(&device_actions_) {
DCHECK_EQ(nullptr, g_instance);
g_instance = this;
}
AssistantClient::~AssistantClient() {
DCHECK(g_instance);
g_instance = nullptr;
}
void AssistantClient::MaybeInit(Profile* profile) {
if (arc::IsAssistantAllowedForProfile(profile) !=
ash::mojom::AssistantAllowedState::ALLOWED) {
return;
}
if (initialized_)
return;
initialized_ = true;
auto* connector = content::BrowserContext::GetConnectorFor(profile);
connector->BindInterface(chromeos::assistant::mojom::kServiceName,
&assistant_connection_);
chromeos::assistant::mojom::ClientPtr client_ptr;
client_binding_.Bind(mojo::MakeRequest(&client_ptr));
chromeos::assistant::mojom::DeviceActionsPtr device_actions_ptr;
device_actions_binding_.Bind(mojo::MakeRequest(&device_actions_ptr));
assistant_connection_->Init(std::move(client_ptr),
std::move(device_actions_ptr));
assistant_image_downloader_ =
std::make_unique<AssistantImageDownloader>(connector);
assistant_setup_ = std::make_unique<AssistantSetup>(connector);
}
void AssistantClient::MaybeStartAssistantOptInFlow() {
assistant_setup_->MaybeStartAssistantOptInFlow();
}
void AssistantClient::OnAssistantStatusChanged(bool running) {
// |running| means assistent mojom service is running. This maps to
// |STOPPED| and |NOT_READY|. |RUNNING| maps to UI is shown and an assistant
// session is running.
arc::VoiceInteractionControllerClient::Get()->NotifyStatusChanged(
running ? ash::mojom::VoiceInteractionState::STOPPED
: ash::mojom::VoiceInteractionState::NOT_READY);
}
void AssistantClient::RequestAssistantStructure(
RequestAssistantStructureCallback callback) {
RequestAssistantStructureForActiveBrowserWindow(std::move(callback));
}