chromium/ash/quick_pair/feature_status_tracker/fast_pair_pref_enabled_provider.cc

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

#include "ash/quick_pair/feature_status_tracker/fast_pair_pref_enabled_provider.h"

#include "ash/constants/ash_pref_names.h"
#include "ash/shell.h"
#include "base/scoped_observation.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"

namespace ash {
namespace quick_pair {

FastPairPrefEnabledProvider::FastPairPrefEnabledProvider() {
  session_observation_.Observe(Shell::Get()->session_controller());
}

FastPairPrefEnabledProvider::~FastPairPrefEnabledProvider() = default;

// static
void FastPairPrefEnabledProvider::RegisterProfilePrefs(
    PrefRegistrySimple* registry) {
  registry->RegisterBooleanPref(prefs::kFastPairEnabled,
                                /*default_value=*/true);
}

// Only called when there exists a last active user prefs. Caller ensures
// that prefs is never null.
void FastPairPrefEnabledProvider::OnActiveUserPrefServiceChanged(
    PrefService* prefs) {
  pref_change_registrar_.reset();
  pref_change_registrar_ = std::make_unique<PrefChangeRegistrar>();
  pref_change_registrar_->Init(prefs);
  pref_change_registrar_->Add(
      prefs::kFastPairEnabled,
      base::BindRepeating(&FastPairPrefEnabledProvider::OnFastPairPrefChanged,
                          base::Unretained(this)));

  OnFastPairPrefChanged();
}

void FastPairPrefEnabledProvider::OnFastPairPrefChanged() {
  SetEnabledAndInvokeCallback(
      pref_change_registrar_->prefs()->GetBoolean(prefs::kFastPairEnabled));
}

}  // namespace quick_pair
}  // namespace ash