blob: 12cefecd9c3795297dc84f543fbba0d1b4e028e7 [file] [log] [blame]
// Copyright 2016 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.
#include "chrome/browser/chromeos/arc/optin/arc_optin_preference_handler.h"
#include "base/bind.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/arc/optin/arc_optin_preference_handler_observer.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/metrics/metrics_reporting_state.h"
#include "components/arc/arc_prefs.h"
#include "components/metrics/metrics_pref_names.h"
#include "components/prefs/pref_service.h"
namespace arc {
ArcOptInPreferenceHandler::ArcOptInPreferenceHandler(
ArcOptInPreferenceHandlerObserver* observer,
PrefService* pref_service)
: observer_(observer), pref_service_(pref_service) {
DCHECK(observer_);
DCHECK(pref_service_);
}
void ArcOptInPreferenceHandler::Start() {
if (g_browser_process->local_state()) {
pref_local_change_registrar_.Init(g_browser_process->local_state());
pref_local_change_registrar_.Add(
metrics::prefs::kMetricsReportingEnabled,
base::Bind(&ArcOptInPreferenceHandler::OnMetricsPreferenceChanged,
base::Unretained(this)));
}
pref_change_registrar_.Init(pref_service_);
pref_change_registrar_.Add(
prefs::kArcBackupRestoreEnabled,
base::Bind(
&ArcOptInPreferenceHandler::OnBackupAndRestorePreferenceChanged,
base::Unretained(this)));
pref_change_registrar_.Add(
prefs::kArcLocationServiceEnabled,
base::Bind(&ArcOptInPreferenceHandler::OnLocationServicePreferenceChanged,
base::Unretained(this)));
// Send current state.
SendMetricsMode();
SendBackupAndRestoreMode();
SendLocationServicesMode();
}
ArcOptInPreferenceHandler::~ArcOptInPreferenceHandler() {}
void ArcOptInPreferenceHandler::OnMetricsPreferenceChanged() {
SendMetricsMode();
}
void ArcOptInPreferenceHandler::OnBackupAndRestorePreferenceChanged() {
SendBackupAndRestoreMode();
}
void ArcOptInPreferenceHandler::OnLocationServicePreferenceChanged() {
SendLocationServicesMode();
}
void ArcOptInPreferenceHandler::SendMetricsMode() {
if (g_browser_process->local_state()) {
observer_->OnMetricsModeChanged(
ChromeMetricsServiceAccessor::IsMetricsAndCrashReportingEnabled(),
IsMetricsReportingPolicyManaged());
}
}
void ArcOptInPreferenceHandler::SendBackupAndRestoreMode() {
// Override the pref default to the true value, in order to encourage users to
// consent with it during OptIn flow.
const bool enabled =
pref_service_->HasPrefPath(prefs::kArcBackupRestoreEnabled)
? pref_service_->GetBoolean(prefs::kArcBackupRestoreEnabled)
: true;
observer_->OnBackupAndRestoreModeChanged(
enabled,
pref_service_->IsManagedPreference(prefs::kArcBackupRestoreEnabled));
}
void ArcOptInPreferenceHandler::SendLocationServicesMode() {
// Override the pref default to the true value, in order to encourage users to
// consent with it during OptIn flow.
const bool enabled =
pref_service_->HasPrefPath(prefs::kArcLocationServiceEnabled)
? pref_service_->GetBoolean(prefs::kArcLocationServiceEnabled)
: true;
observer_->OnLocationServicesModeChanged(
enabled,
pref_service_->IsManagedPreference(prefs::kArcLocationServiceEnabled));
}
void ArcOptInPreferenceHandler::EnableMetrics(bool is_enabled) {
if (g_browser_process->local_state())
ChangeMetricsReportingState(is_enabled);
}
void ArcOptInPreferenceHandler::EnableBackupRestore(bool is_enabled) {
pref_service_->SetBoolean(prefs::kArcBackupRestoreEnabled, is_enabled);
}
void ArcOptInPreferenceHandler::EnableLocationService(bool is_enabled) {
pref_service_->SetBoolean(prefs::kArcLocationServiceEnabled, is_enabled);
}
} // namespace arc