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