Index: chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc |
diff --git a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc |
index 054757368936d673d539e69136e5751ccc2bd19b..f3d9d4b7bf6516ec1cfd3f0422c3e26d0a1c8309 100644 |
--- a/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc |
+++ b/chrome/browser/chromeos/arc/voice_interaction/arc_voice_interaction_framework_service.cc |
@@ -24,6 +24,7 @@ |
#include "chrome/browser/chromeos/login/helper.h" |
#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_list.h" |
#include "chrome/browser/ui/browser_window.h" |
@@ -190,6 +191,15 @@ class ArcVoiceInteractionFrameworkServiceFactory |
} |
}; |
+void SetVoiceInteractionPrefs(mojom::VoiceInteractionStatusPtr status) { |
+ PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); |
+ prefs->SetBoolean(prefs::kVoiceInteractionPrefSynced, status->configured); |
+ prefs->SetBoolean(prefs::kVoiceInteractionEnabled, |
+ status->configured && status->voice_interaction_enabled); |
+ prefs->SetBoolean(prefs::kVoiceInteractionContextEnabled, |
+ status->configured && status->context_enabled); |
+} |
+ |
} // namespace |
// static |
@@ -209,6 +219,7 @@ ArcVoiceInteractionFrameworkService::ArcVoiceInteractionFrameworkService( |
ArcBridgeService* bridge_service) |
: context_(context), arc_bridge_service_(bridge_service), binding_(this) { |
arc_bridge_service_->voice_interaction_framework()->AddObserver(this); |
+ ArcSessionManager::Get()->AddObserver(this); |
} |
ArcVoiceInteractionFrameworkService::~ArcVoiceInteractionFrameworkService() { |
@@ -218,6 +229,8 @@ ArcVoiceInteractionFrameworkService::~ArcVoiceInteractionFrameworkService() { |
// so do not touch it. |
if (ArcServiceManager::Get()) |
arc_bridge_service_->voice_interaction_framework()->RemoveObserver(this); |
+ ArcSessionManager::Get()->RemoveObserver(this); |
+ ArcSessionManager::Get()->AddObserver(this); |
} |
void ArcVoiceInteractionFrameworkService::OnInstanceReady() { |
@@ -365,6 +378,18 @@ void ArcVoiceInteractionFrameworkService::HideMetalayer() { |
SetMetalayerVisibility(false); |
} |
+void ArcVoiceInteractionFrameworkService::OnArcPlayStoreEnabledChanged( |
+ bool enabled) { |
+ if (enabled) |
+ return; |
+ mojom::VoiceInteractionStatusPtr status = |
+ mojom::VoiceInteractionStatus::New(); |
+ status->configured = false; |
+ status->voice_interaction_enabled = false; |
+ status->context_enabled = false; |
+ SetVoiceInteractionPrefs(std::move(status)); |
+} |
+ |
void ArcVoiceInteractionFrameworkService::StartVoiceInteractionSetupWizard() { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
arc::mojom::VoiceInteractionFrameworkInstance* framework_instance = |
@@ -423,6 +448,21 @@ void ArcVoiceInteractionFrameworkService::SetVoiceInteractionContextEnabled( |
framework_instance->SetVoiceInteractionContextEnabled(enable); |
} |
+void ArcVoiceInteractionFrameworkService::UpdateVoiceInteractionPrefs() { |
+ if (ProfileManager::GetActiveUserProfile()->GetPrefs()->GetBoolean( |
+ prefs::kVoiceInteractionPrefSynced)) { |
+ return; |
+ } |
+ mojom::VoiceInteractionFrameworkInstance* framework_instance = |
+ ARC_GET_INSTANCE_FOR_METHOD( |
+ arc_bridge_service_->voice_interaction_framework(), |
+ GetVoiceInteractionSettings); |
+ if (!framework_instance) |
+ return; |
+ framework_instance->GetVoiceInteractionSettings( |
+ base::Bind(&SetVoiceInteractionPrefs)); |
+} |
+ |
void ArcVoiceInteractionFrameworkService::StartSessionFromUserInteraction( |
const gfx::Rect& rect) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |