1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_SETTINGS_IMPL_H_
6 #define CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_SETTINGS_IMPL_H_
7 
8 #include <memory>
9 #include <string>
10 
11 #include "chromeos/services/assistant/public/cpp/assistant_settings.h"
12 #include "mojo/public/cpp/bindings/pending_receiver.h"
13 #include "mojo/public/cpp/bindings/pending_remote.h"
14 #include "mojo/public/cpp/bindings/receiver_set.h"
15 #include "mojo/public/cpp/bindings/remote.h"
16 
17 namespace ash {
18 class AssistantController;
19 class AssistantStateBase;
20 }  // namespace ash
21 
22 namespace assistant_client {
23 struct SpeakerIdEnrollmentStatus;
24 struct SpeakerIdEnrollmentUpdate;
25 struct VoicelessResponse;
26 }  // namespace assistant_client
27 
28 namespace chromeos {
29 namespace assistant {
30 
31 class AssistantManagerServiceImpl;
32 class ServiceContext;
33 
34 class AssistantSettingsImpl : public AssistantSettings {
35  public:
36   AssistantSettingsImpl(ServiceContext* context,
37                         AssistantManagerServiceImpl* assistant_manager_service);
38   ~AssistantSettingsImpl() override;
39 
speaker_id_enrollment_done()40   bool speaker_id_enrollment_done() { return speaker_id_enrollment_done_; }
41 
42   // AssistantSettings overrides:
43   void GetSettings(const std::string& selector,
44                    GetSettingsCallback callback) override;
45   void UpdateSettings(const std::string& update,
46                       UpdateSettingsCallback callback) override;
47   void StartSpeakerIdEnrollment(
48       bool skip_cloud_enrollment,
49       base::WeakPtr<SpeakerIdEnrollmentClient> client) override;
50   void StopSpeakerIdEnrollment() override;
51   void SyncSpeakerIdEnrollmentStatus() override;
52 
53   void SyncDeviceAppsStatus(base::OnceCallback<void(bool)> callback);
54 
55   void UpdateServerDeviceSettings();
56 
57  private:
58   void HandleSpeakerIdEnrollmentUpdate(
59       const assistant_client::SpeakerIdEnrollmentUpdate& update);
60   void HandleStopSpeakerIdEnrollment();
61   void HandleSpeakerIdEnrollmentStatusSync(
62       const assistant_client::SpeakerIdEnrollmentStatus& status);
63   void HandleDeviceAppsStatusSync(base::OnceCallback<void(bool)> callback,
64                                   const std::string& settings);
65 
66   bool ShouldIgnoreResponse(const assistant_client::VoicelessResponse&) const;
67 
68   ash::AssistantStateBase* assistant_state();
69   ash::AssistantController* assistant_controller();
70   scoped_refptr<base::SequencedTaskRunner> main_task_runner();
71 
72   ServiceContext* const context_;
73   AssistantManagerServiceImpl* const assistant_manager_service_;
74   base::WeakPtr<SpeakerIdEnrollmentClient> speaker_id_enrollment_client_;
75 
76   // Whether the speaker id enrollment has complete for the user.
77   bool speaker_id_enrollment_done_ = false;
78 
79   base::WeakPtrFactory<AssistantSettingsImpl> weak_factory_{this};
80 
81   DISALLOW_COPY_AND_ASSIGN(AssistantSettingsImpl);
82 };
83 
84 }  // namespace assistant
85 }  // namespace chromeos
86 
87 #endif  // CHROMEOS_SERVICES_ASSISTANT_ASSISTANT_SETTINGS_IMPL_H_
88