1 // Copyright 2018 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
5 #include "chromeos/services/multidevice_setup/fake_feature_state_manager.h"
6
7 namespace chromeos {
8
9 namespace multidevice_setup {
10
11 namespace {
12
13 // Each feature's default value is kUnavailableNoVerifiedHost until proven
14 // otherwise.
GenerateInitialDefaultCachedStateMap()15 FeatureStateManager::FeatureStatesMap GenerateInitialDefaultCachedStateMap() {
16 return FeatureStateManager::FeatureStatesMap{
17 {mojom::Feature::kBetterTogetherSuite,
18 mojom::FeatureState::kUnavailableNoVerifiedHost},
19 {mojom::Feature::kInstantTethering,
20 mojom::FeatureState::kUnavailableNoVerifiedHost},
21 {mojom::Feature::kMessages,
22 mojom::FeatureState::kUnavailableNoVerifiedHost},
23 {mojom::Feature::kSmartLock,
24 mojom::FeatureState::kUnavailableNoVerifiedHost}};
25 }
26
27 } // namespace
28
FakeFeatureStateManager()29 FakeFeatureStateManager::FakeFeatureStateManager()
30 : feature_states_map_(GenerateInitialDefaultCachedStateMap()) {}
31
32 FakeFeatureStateManager::~FakeFeatureStateManager() = default;
33
GetFeatureState(mojom::Feature feature)34 mojom::FeatureState FakeFeatureStateManager::GetFeatureState(
35 mojom::Feature feature) {
36 return feature_states_map_[feature];
37 }
38
SetFeatureState(mojom::Feature feature,mojom::FeatureState state)39 void FakeFeatureStateManager::SetFeatureState(mojom::Feature feature,
40 mojom::FeatureState state) {
41 if (feature_states_map_[feature] == state)
42 return;
43
44 feature_states_map_[feature] = state;
45 NotifyFeatureStatesChange(feature_states_map_);
46 }
47
SetFeatureStates(const FeatureStatesMap & feature_states_map)48 void FakeFeatureStateManager::SetFeatureStates(
49 const FeatureStatesMap& feature_states_map) {
50 if (feature_states_map_ == feature_states_map)
51 return;
52
53 feature_states_map_ = feature_states_map;
54 NotifyFeatureStatesChange(feature_states_map_);
55 }
56
57 FeatureStateManager::FeatureStatesMap
GetFeatureStates()58 FakeFeatureStateManager::GetFeatureStates() {
59 return feature_states_map_;
60 }
61
PerformSetFeatureEnabledState(mojom::Feature feature,bool enabled)62 void FakeFeatureStateManager::PerformSetFeatureEnabledState(
63 mojom::Feature feature,
64 bool enabled) {
65 if (enabled)
66 SetFeatureState(feature, mojom::FeatureState::kEnabledByUser);
67 else
68 SetFeatureState(feature, mojom::FeatureState::kDisabledByUser);
69 }
70
71 FakeFeatureStateManagerObserver::FakeFeatureStateManagerObserver() = default;
72
73 FakeFeatureStateManagerObserver::~FakeFeatureStateManagerObserver() = default;
74
OnFeatureStatesChange(const FeatureStateManager::FeatureStatesMap & feature_states_map)75 void FakeFeatureStateManagerObserver::OnFeatureStatesChange(
76 const FeatureStateManager::FeatureStatesMap& feature_states_map) {
77 feature_state_updates_.emplace_back(feature_states_map);
78 }
79
80 } // namespace multidevice_setup
81
82 } // namespace chromeos
83