| Index: chrome/browser/chromeos/arc/arc_settings_service.cc
|
| diff --git a/chrome/browser/chromeos/arc/arc_settings_service.cc b/chrome/browser/chromeos/arc/arc_settings_service.cc
|
| index 8c314d696674b442b6a38018c6fe1944a39d1a91..f4ff00f1492cc16549954cb58bbc07897ab6aebb 100644
|
| --- a/chrome/browser/chromeos/arc/arc_settings_service.cc
|
| +++ b/chrome/browser/chromeos/arc/arc_settings_service.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/json/json_writer.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/values.h"
|
| +#include "chrome/browser/chromeos/arc/arc_auth_service.h"
|
| #include "chrome/browser/chromeos/settings/cros_settings.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| #include "chrome/common/pref_names.h"
|
| @@ -63,7 +64,8 @@ namespace arc {
|
| // about and sends the new values to Android to keep the state in sync.
|
| class ArcSettingsServiceImpl
|
| : public chromeos::system::TimezoneSettings::Observer,
|
| - public device::BluetoothAdapter::Observer {
|
| + public device::BluetoothAdapter::Observer,
|
| + public ArcAuthService::Observer {
|
| public:
|
| explicit ArcSettingsServiceImpl(ArcBridgeService* arc_bridge_service);
|
| ~ArcSettingsServiceImpl() override;
|
| @@ -72,13 +74,16 @@ class ArcSettingsServiceImpl
|
| // Obtains the new pref value and sends it to Android.
|
| void OnPrefChanged(const std::string& pref_name) const;
|
|
|
| - // TimezoneSettings::Observer
|
| + // TimezoneSettings::Observer:
|
| void TimezoneChanged(const icu::TimeZone& timezone) override;
|
|
|
| - // BluetoothAdapter::Observer
|
| + // BluetoothAdapter::Observer:
|
| void AdapterPoweredChanged(device::BluetoothAdapter* adapter,
|
| bool powered) override;
|
|
|
| + // ArcAuthService::Observer:
|
| + void OnInitialStart() override;
|
| +
|
| private:
|
| // Registers to observe changes for Chrome settings we care about.
|
| void StartObservingSettingsChanges();
|
| @@ -86,8 +91,12 @@ class ArcSettingsServiceImpl
|
| // Stops listening for Chrome settings changes.
|
| void StopObservingSettingsChanges();
|
|
|
| - // Retrives Chrome's state for the settings and send it to Android.
|
| - void SyncAllPrefs() const;
|
| + // Retrieves Chrome's state for the settings that need to be synced on each
|
| + // Android boot and send it to Android.
|
| + void SyncRuntimeSettings() const;
|
| + // Send settings that need to be synced only on Android first start to
|
| + // Android.
|
| + void SyncInitialSettings() const;
|
| void SyncFontSize() const;
|
| void SyncLocale() const;
|
| void SyncProxySettings() const;
|
| @@ -96,6 +105,7 @@ class ArcSettingsServiceImpl
|
| void SyncTimeZone() const;
|
| void SyncUse24HourClock() const;
|
| void SyncBackupEnabled() const;
|
| + void SyncLocationServiceEnabled() const;
|
|
|
| void OnBluetoothAdapterInitialized(
|
| scoped_refptr<device::BluetoothAdapter> adapter);
|
| @@ -106,6 +116,10 @@ class ArcSettingsServiceImpl
|
| // Returns the integer value of the pref. pref_name must exist.
|
| int GetIntegerPref(const std::string& pref_name) const;
|
|
|
| + // Sends boolean pref broadcast to the delegate.
|
| + void SendBoolPrefSettingsBroadcast(const std::string& pref_name,
|
| + const std::string& action) const;
|
| +
|
| // Sends a broadcast to the delegate.
|
| void SendSettingsBroadcast(const std::string& action,
|
| const base::DictionaryValue& extras) const;
|
| @@ -129,15 +143,20 @@ ArcSettingsServiceImpl::ArcSettingsServiceImpl(
|
| ArcBridgeService* arc_bridge_service)
|
| : arc_bridge_service_(arc_bridge_service), weak_factory_(this) {
|
| StartObservingSettingsChanges();
|
| - SyncAllPrefs();
|
| + SyncRuntimeSettings();
|
| + DCHECK(ArcAuthService::Get());
|
| + ArcAuthService::Get()->AddObserver(this);
|
| }
|
|
|
| ArcSettingsServiceImpl::~ArcSettingsServiceImpl() {
|
| StopObservingSettingsChanges();
|
|
|
| - if (bluetooth_adapter_) {
|
| + ArcAuthService* arc_auth_service = ArcAuthService::Get();
|
| + if (arc_auth_service)
|
| + arc_auth_service->RemoveObserver(this);
|
| +
|
| + if (bluetooth_adapter_)
|
| bluetooth_adapter_->RemoveObserver(this);
|
| - }
|
| }
|
|
|
| void ArcSettingsServiceImpl::StartObservingSettingsChanges() {
|
| @@ -175,7 +194,11 @@ void ArcSettingsServiceImpl::OnBluetoothAdapterInitialized(
|
| AdapterPoweredChanged(adapter.get(), adapter->IsPowered());
|
| }
|
|
|
| -void ArcSettingsServiceImpl::SyncAllPrefs() const {
|
| +void ArcSettingsServiceImpl::OnInitialStart() {
|
| + SyncInitialSettings();
|
| +}
|
| +
|
| +void ArcSettingsServiceImpl::SyncRuntimeSettings() const {
|
| SyncFontSize();
|
| SyncLocale();
|
| SyncProxySettings();
|
| @@ -185,6 +208,11 @@ void ArcSettingsServiceImpl::SyncAllPrefs() const {
|
| SyncUse24HourClock();
|
| }
|
|
|
| +void ArcSettingsServiceImpl::SyncInitialSettings() const {
|
| + SyncBackupEnabled();
|
| + SyncLocationServiceEnabled();
|
| +}
|
| +
|
| void ArcSettingsServiceImpl::StopObservingSettingsChanges() {
|
| registrar_.RemoveAll();
|
| reporting_consent_subscription_.reset();
|
| @@ -217,8 +245,6 @@ void ArcSettingsServiceImpl::OnPrefChanged(const std::string& pref_name) const {
|
| SyncUse24HourClock();
|
| } else if (pref_name == proxy_config::prefs::kProxy) {
|
| SyncProxySettings();
|
| - } else if (pref_name == prefs::kArcBackupRestoreEnabled) {
|
| - SyncBackupEnabled();
|
| } else {
|
| LOG(ERROR) << "Unknown pref changed.";
|
| }
|
| @@ -252,17 +278,25 @@ void ArcSettingsServiceImpl::SyncFontSize() const {
|
| extras);
|
| }
|
|
|
| -void ArcSettingsServiceImpl::SyncSpokenFeedbackEnabled() const {
|
| - const PrefService::Preference* pref = registrar_.prefs()->FindPreference(
|
| - prefs::kAccessibilitySpokenFeedbackEnabled);
|
| +void ArcSettingsServiceImpl::SendBoolPrefSettingsBroadcast(
|
| + const std::string& pref_name,
|
| + const std::string& action) const {
|
| + const PrefService::Preference* pref =
|
| + registrar_.prefs()->FindPreference(pref_name);
|
| DCHECK(pref);
|
| bool enabled = false;
|
| bool value_exists = pref->GetValue()->GetAsBoolean(&enabled);
|
| DCHECK(value_exists);
|
| base::DictionaryValue extras;
|
| extras.SetBoolean("enabled", enabled);
|
| - SendSettingsBroadcast(
|
| - "org.chromium.arc.intent_helper.SET_SPOKEN_FEEDBACK_ENABLED", extras);
|
| + extras.SetBoolean("managed", !pref->IsUserModifiable());
|
| + SendSettingsBroadcast(action, extras);
|
| +}
|
| +
|
| +void ArcSettingsServiceImpl::SyncSpokenFeedbackEnabled() const {
|
| + SendBoolPrefSettingsBroadcast(
|
| + prefs::kAccessibilitySpokenFeedbackEnabled,
|
| + "org.chromium.arc.intent_helper.SET_SPOKEN_FEEDBACK_ENABLED");
|
| }
|
|
|
| void ArcSettingsServiceImpl::SyncLocale() const {
|
| @@ -367,17 +401,15 @@ void ArcSettingsServiceImpl::SyncProxySettings() const {
|
| }
|
|
|
| void ArcSettingsServiceImpl::SyncBackupEnabled() const {
|
| - const PrefService::Preference* const pref =
|
| - registrar_.prefs()->FindPreference(prefs::kArcBackupRestoreEnabled);
|
| - DCHECK(pref);
|
| - bool enabled = false;
|
| - bool value_exists = pref->GetValue()->GetAsBoolean(&enabled);
|
| - DCHECK(value_exists);
|
| - base::DictionaryValue extras;
|
| - extras.SetBoolean("enabled", enabled);
|
| - extras.SetBoolean("managed", !pref->IsUserModifiable());
|
| - SendSettingsBroadcast("org.chromium.arc.intent_helper.SET_BACKUP_ENABLED",
|
| - extras);
|
| + SendBoolPrefSettingsBroadcast(
|
| + prefs::kArcBackupRestoreEnabled,
|
| + "org.chromium.arc.intent_helper.SET_BACKUP_ENABLED");
|
| +}
|
| +
|
| +void ArcSettingsServiceImpl::SyncLocationServiceEnabled() const {
|
| + SendBoolPrefSettingsBroadcast(
|
| + prefs::kArcLocationServiceEnabled,
|
| + "org.chromium.arc.intent_helper.SET_LOCATION_SERVICE_ENABLED");
|
| }
|
|
|
| void ArcSettingsServiceImpl::SendSettingsBroadcast(
|
|
|