blob: 7fe0ec6a8ec61cce73d1d21cc6a58f2dfd7deffa [file] [log] [blame]
// Copyright 2021 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.
#ifndef CHROMEOS_SERVICES_LIBASSISTANT_SETTINGS_CONTROLLER_H_
#define CHROMEOS_SERVICES_LIBASSISTANT_SETTINGS_CONTROLLER_H_
#include <string>
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "chromeos/services/libassistant/abortable_task_list.h"
#include "chromeos/services/libassistant/assistant_client_observer.h"
#include "chromeos/services/libassistant/public/mojom/settings_controller.mojom.h"
#include "mojo/public/cpp/bindings/receiver.h"
namespace assistant_client {
class AssistantManager;
class AssistantManagerInternal;
} // namespace assistant_client
namespace chromeos {
namespace libassistant {
class SettingsController : public AssistantClientObserver,
public mojom::SettingsController {
public:
SettingsController();
SettingsController(const SettingsController&) = delete;
SettingsController& operator=(const SettingsController&) = delete;
~SettingsController() override;
void Bind(mojo::PendingReceiver<mojom::SettingsController> receiver);
// mojom::SettingsController implementation:
void SetAuthenticationTokens(
std::vector<mojom::AuthenticationTokenPtr> tokens) override;
void SetListeningEnabled(bool value) override;
void SetLocale(const std::string& value) override;
void SetSpokenFeedbackEnabled(bool value) override;
void SetHotwordEnabled(bool value) override;
void GetSettings(const std::string& selector,
GetSettingsCallback callback) override;
void UpdateSettings(const std::string& settings,
UpdateSettingsCallback callback) override;
// AssistantClientObserver:
void OnAssistantClientCreated(AssistantClient* assistant_client) override;
void OnAssistantClientStarted(AssistantClient* assistant_client) override;
void OnDestroyingAssistantClient(AssistantClient* assistant_client) override;
private:
class DeviceSettingsUpdater;
// The settings are being passed in to clearly document when Libassistant
// must be updated.
void UpdateListeningEnabled(absl::optional<bool> listening_enabled);
void UpdateAuthenticationTokens(
const absl::optional<std::vector<mojom::AuthenticationTokenPtr>>& tokens);
void UpdateInternalOptions(const absl::optional<std::string>& locale,
absl::optional<bool> spoken_feedback_enabled);
void UpdateDeviceSettings(const absl::optional<std::string>& locale,
absl::optional<bool> hotword_enabled);
// Instantiated when Libassistant is started and destroyed when Libassistant
// is stopped.
// Used to update the device settings.
std::unique_ptr<DeviceSettingsUpdater> device_settings_updater_;
// Contains all pending callbacks for get/update setting requests.
AbortableTaskList pending_response_waiters_;
// Set in |OnAssistantClientCreated| and unset in
// |OnDestroyingAssistantClient|.
assistant_client::AssistantManagerInternal* assistant_manager_internal_ =
nullptr;
assistant_client::AssistantManager* assistant_manager_ = nullptr;
absl::optional<bool> hotword_enabled_;
absl::optional<bool> spoken_feedback_enabled_;
absl::optional<bool> listening_enabled_;
absl::optional<std::string> locale_;
absl::optional<std::vector<mojom::AuthenticationTokenPtr>>
authentication_tokens_;
mojo::Receiver<mojom::SettingsController> receiver_{this};
};
} // namespace libassistant
} // namespace chromeos
#endif // CHROMEOS_SERVICES_LIBASSISTANT_SETTINGS_CONTROLLER_H_