fast_pair_enabled_provider.cc 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2021 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. #include "ash/quick_pair/feature_status_tracker/fast_pair_enabled_provider.h"
  5. #include "ash/constants/ash_features.h"
  6. #include "ash/quick_pair/common/logging.h"
  7. #include "ash/quick_pair/feature_status_tracker/base_enabled_provider.h"
  8. #include "ash/quick_pair/feature_status_tracker/bluetooth_enabled_provider.h"
  9. #include "base/bind.h"
  10. #include "base/feature_list.h"
  11. namespace ash {
  12. namespace quick_pair {
  13. FastPairEnabledProvider::FastPairEnabledProvider(
  14. std::unique_ptr<BluetoothEnabledProvider> bluetooth_enabled_provider,
  15. std::unique_ptr<FastPairPrefEnabledProvider>
  16. fast_pair_pref_enabled_provider,
  17. std::unique_ptr<LoggedInUserEnabledProvider>
  18. logged_in_user_enabled_provider,
  19. std::unique_ptr<ScreenStateEnabledProvider> screen_state_enabled_provider,
  20. std::unique_ptr<GoogleApiKeyAvailabilityProvider>
  21. google_api_key_availability_provider)
  22. : bluetooth_enabled_provider_(std::move(bluetooth_enabled_provider)),
  23. fast_pair_pref_enabled_provider_(
  24. std::move(fast_pair_pref_enabled_provider)),
  25. logged_in_user_enabled_provider_(
  26. std::move(logged_in_user_enabled_provider)),
  27. screen_state_enabled_provider_(std::move(screen_state_enabled_provider)),
  28. google_api_key_availability_provider_(
  29. std::move(google_api_key_availability_provider)) {
  30. // If the flag isn't enabled or if the API keys aren't available,
  31. // Fast Pair will never be enabled so don't hook up any callbacks.
  32. if (features::IsFastPairEnabled() &&
  33. google_api_key_availability_provider_->is_enabled()) {
  34. bluetooth_enabled_provider_->SetCallback(base::BindRepeating(
  35. &FastPairEnabledProvider::OnSubProviderEnabledChanged,
  36. weak_factory_.GetWeakPtr()));
  37. fast_pair_pref_enabled_provider_->SetCallback(base::BindRepeating(
  38. &FastPairEnabledProvider::OnSubProviderEnabledChanged,
  39. weak_factory_.GetWeakPtr()));
  40. logged_in_user_enabled_provider_->SetCallback(base::BindRepeating(
  41. &FastPairEnabledProvider::OnSubProviderEnabledChanged,
  42. weak_factory_.GetWeakPtr()));
  43. screen_state_enabled_provider_->SetCallback(base::BindRepeating(
  44. &FastPairEnabledProvider::OnSubProviderEnabledChanged,
  45. weak_factory_.GetWeakPtr()));
  46. SetEnabledAndInvokeCallback(AreSubProvidersEnabled());
  47. }
  48. }
  49. FastPairEnabledProvider::~FastPairEnabledProvider() = default;
  50. bool FastPairEnabledProvider::AreSubProvidersEnabled() {
  51. QP_LOG(INFO)
  52. << __func__
  53. << ": Flag:" << base::FeatureList::IsEnabled(features::kFastPair)
  54. << " Policy Pref:" << fast_pair_pref_enabled_provider_->is_enabled()
  55. << " Google API Key:"
  56. << google_api_key_availability_provider_->is_enabled()
  57. << " Logged in User:" << logged_in_user_enabled_provider_->is_enabled()
  58. << " Screen State:" << screen_state_enabled_provider_->is_enabled()
  59. << " Bluetooth:" << bluetooth_enabled_provider_->is_enabled();
  60. return base::FeatureList::IsEnabled(features::kFastPair) &&
  61. fast_pair_pref_enabled_provider_->is_enabled() &&
  62. google_api_key_availability_provider_->is_enabled() &&
  63. logged_in_user_enabled_provider_->is_enabled() &&
  64. bluetooth_enabled_provider_->is_enabled() &&
  65. screen_state_enabled_provider_->is_enabled();
  66. }
  67. void FastPairEnabledProvider::OnSubProviderEnabledChanged(bool) {
  68. SetEnabledAndInvokeCallback(AreSubProvidersEnabled());
  69. }
  70. } // namespace quick_pair
  71. } // namespace ash