chromium/chromeos/ash/services/libassistant/system_provider_impl.h

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_ASH_SERVICES_LIBASSISTANT_SYSTEM_PROVIDER_IMPL_H_
#define CHROMEOS_ASH_SERVICES_LIBASSISTANT_SYSTEM_PROVIDER_IMPL_H_

#include <memory>
#include <string>

#include "base/component_export.h"
#include "chromeos/ash/services/libassistant/public/mojom/platform_delegate.mojom.h"
#include "chromeos/assistant/internal/libassistant/shared_headers.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/device/public/mojom/battery_monitor.mojom.h"
#include "services/device/public/mojom/battery_status.mojom.h"

namespace ash::libassistant {

class PowerManagerProviderImpl;

class SystemProviderImpl : public assistant_client::SystemProvider {
 public:
  // Acceptable to pass in |nullptr| for |power_manager_provider| when no
  // platform power manager provider is available.
  explicit SystemProviderImpl(
      std::unique_ptr<PowerManagerProviderImpl> power_manager_provider);

  SystemProviderImpl(const SystemProviderImpl&) = delete;
  SystemProviderImpl& operator=(const SystemProviderImpl&) = delete;

  ~SystemProviderImpl() override;

  void Initialize(mojom::PlatformDelegate* platform_delegate);

  // assistant_client::SystemProvider implementation:
  assistant_client::MicMuteState GetMicMuteState() override;
  void RegisterMicMuteChangeCallback(ConfigChangeCallback callback) override;
  assistant_client::PowerManagerProvider* GetPowerManagerProvider() override;
  bool GetBatteryState(BatteryState* state) override;
  void UpdateTimezoneAndLocale(const std::string& timezone,
                               const std::string& locale) override;

 private:
  friend class AssistantSystemProviderImplTest;
  void OnBatteryStatus(device::mojom::BatteryStatusPtr battery_status);

  void FlushForTesting();

  std::unique_ptr<PowerManagerProviderImpl> power_manager_provider_;

  mojo::Remote<device::mojom::BatteryMonitor> battery_monitor_;
  device::mojom::BatteryStatusPtr current_battery_status_;
};

}  // namespace ash::libassistant

#endif  // CHROMEOS_ASH_SERVICES_LIBASSISTANT_SYSTEM_PROVIDER_IMPL_H_