forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
/
multidevice_setup_state_updater.cc
95 lines (77 loc) · 3.41 KB
/
multidevice_setup_state_updater.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright 2020 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 "chromeos/components/phonehub/multidevice_setup_state_updater.h"
#include "chromeos/components/multidevice/logging/logging.h"
#include "chromeos/components/phonehub/pref_names.h"
#include "components/prefs/pref_registry_simple.h"
#include "components/prefs/pref_service.h"
namespace chromeos {
namespace phonehub {
namespace {
using multidevice_setup::mojom::Feature;
using multidevice_setup::mojom::HostStatus;
} // namespace
// static
void MultideviceSetupStateUpdater::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterBooleanPref(prefs::kIsAwaitingVerifiedHost, false);
}
MultideviceSetupStateUpdater::MultideviceSetupStateUpdater(
PrefService* pref_service,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
NotificationAccessManager* notification_access_manager)
: pref_service_(pref_service),
multidevice_setup_client_(multidevice_setup_client),
notification_access_manager_(notification_access_manager) {
multidevice_setup_client_->AddObserver(this);
notification_access_manager_->AddObserver(this);
const HostStatus host_status =
multidevice_setup_client_->GetHostStatus().first;
UpdateIsAwaitingVerifiedHost(host_status);
}
MultideviceSetupStateUpdater::~MultideviceSetupStateUpdater() {
multidevice_setup_client_->RemoveObserver(this);
notification_access_manager_->RemoveObserver(this);
}
void MultideviceSetupStateUpdater::OnNotificationAccessChanged() {
if (notification_access_manager_->HasAccessBeenGranted())
return;
PA_LOG(INFO) << "Disabling PhoneHubNotifications feature.";
// Disable kPhoneHubNotifications if notification access has been revoked by
// the phone.
multidevice_setup_client_->SetFeatureEnabledState(
Feature::kPhoneHubNotifications, /*enabled=*/false,
/*auth_token=*/base::nullopt, base::DoNothing());
}
void MultideviceSetupStateUpdater::OnHostStatusChanged(
const multidevice_setup::MultiDeviceSetupClient::HostStatusWithDevice&
host_device_with_status) {
const HostStatus host_status = host_device_with_status.first;
bool is_awaiting_verified_host =
pref_service_->GetBoolean(prefs::kIsAwaitingVerifiedHost);
// Enable the PhoneHub feature if phone is verified and there was an
// intent to enable the feature.
if (is_awaiting_verified_host && host_status == HostStatus::kHostVerified) {
multidevice_setup_client_->SetFeatureEnabledState(
Feature::kPhoneHub, /*enabled=*/true, /*auth_token=*/base::nullopt,
base::DoNothing());
}
UpdateIsAwaitingVerifiedHost(host_status);
}
void MultideviceSetupStateUpdater::UpdateIsAwaitingVerifiedHost(
HostStatus host_status) {
// Keep |prefs::kIsAwaitingVerifiedHost| at the same state.
if (host_status == HostStatus::kHostSetButNotYetVerified)
return;
// Begin waiting for a verified host if the phone is
// |kHostSetLocallyButWaitingForBackendConfirmation|.
bool is_awaiting_verified_host =
host_status ==
HostStatus::kHostSetLocallyButWaitingForBackendConfirmation;
// Must be persisted in the event that this class is destroyed
// before the phone is verified.
pref_service_->SetBoolean(prefs::kIsAwaitingVerifiedHost,
is_awaiting_verified_host);
}
} // namespace phonehub
} // namespace chromeos