| Index: components/proximity_auth/proximity_monitor_impl.cc
|
| diff --git a/components/proximity_auth/proximity_monitor_impl.cc b/components/proximity_auth/proximity_monitor_impl.cc
|
| index 202be9defe0de6ae3fb285a3e81bcb71d66a61c9..c592acc26865839d28aca9415e124e87fbd36a66 100644
|
| --- a/components/proximity_auth/proximity_monitor_impl.cc
|
| +++ b/components/proximity_auth/proximity_monitor_impl.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/time/time.h"
|
| #include "components/proximity_auth/logging/logging.h"
|
| #include "components/proximity_auth/metrics.h"
|
| +#include "components/proximity_auth/proximity_auth_pref_manager.h"
|
| #include "components/proximity_auth/proximity_monitor_observer.h"
|
| #include "device/bluetooth/bluetooth_adapter.h"
|
| #include "device/bluetooth/bluetooth_adapter_factory.h"
|
| @@ -25,22 +26,22 @@ namespace proximity_auth {
|
| // The time to wait, in milliseconds, between proximity polling iterations.
|
| const int kPollingTimeoutMs = 250;
|
|
|
| -// The RSSI threshold below which we consider the remote device to not be in
|
| -// proximity.
|
| -// Note: Because this threshold is unconfigurable right now, it is set quite
|
| -// conservatively in order to avoid blocking users.
|
| -const int kRssiThreshold = -70;
|
| -
|
| // The weight of the most recent RSSI sample.
|
| const double kRssiSampleWeight = 0.3;
|
|
|
| +// The default RSSI threshold.
|
| +const int kDefaultRssiThreshold = -70;
|
| +
|
| ProximityMonitorImpl::ProximityMonitorImpl(
|
| cryptauth::Connection* connection,
|
| - std::unique_ptr<base::TickClock> clock)
|
| + std::unique_ptr<base::TickClock> clock,
|
| + ProximityAuthPrefManager* pref_manager)
|
| : connection_(connection),
|
| remote_device_is_in_proximity_(false),
|
| is_active_(false),
|
| + rssi_threshold_(kDefaultRssiThreshold),
|
| clock_(std::move(clock)),
|
| + pref_manager_(pref_manager),
|
| polling_weak_ptr_factory_(this),
|
| weak_ptr_factory_(this) {
|
| if (device::BluetoothAdapterFactory::IsBluetoothSupported()) {
|
| @@ -58,6 +59,7 @@ ProximityMonitorImpl::~ProximityMonitorImpl() {
|
|
|
| void ProximityMonitorImpl::Start() {
|
| is_active_ = true;
|
| + GetRssiThresholdFromPrefs();
|
| UpdatePollingState();
|
| }
|
|
|
| @@ -192,7 +194,7 @@ void ProximityMonitorImpl::AddSample(
|
|
|
| void ProximityMonitorImpl::CheckForProximityStateChange() {
|
| bool is_now_in_proximity =
|
| - rssi_rolling_average_ && *rssi_rolling_average_ > kRssiThreshold;
|
| + rssi_rolling_average_ && *rssi_rolling_average_ > rssi_threshold_;
|
|
|
| if (rssi_rolling_average_)
|
| PA_LOG(INFO) << " Rolling RSSI: " << *rssi_rolling_average_;
|
| @@ -206,4 +208,24 @@ void ProximityMonitorImpl::CheckForProximityStateChange() {
|
| }
|
| }
|
|
|
| +void ProximityMonitorImpl::GetRssiThresholdFromPrefs() {
|
| + ProximityAuthPrefManager::ProximityThreshold threshold =
|
| + pref_manager_->GetProximityThreshold();
|
| + switch (threshold) {
|
| + case ProximityAuthPrefManager::ProximityThreshold::kVeryClose:
|
| + rssi_threshold_ = -45;
|
| + return;
|
| + case ProximityAuthPrefManager::ProximityThreshold::kClose:
|
| + rssi_threshold_ = -60;
|
| + return;
|
| + case ProximityAuthPrefManager::ProximityThreshold::kFar:
|
| + rssi_threshold_ = -70;
|
| + return;
|
| + case ProximityAuthPrefManager::ProximityThreshold::kVeryFar:
|
| + rssi_threshold_ = -85;
|
| + return;
|
| + }
|
| + NOTREACHED();
|
| +}
|
| +
|
| } // namespace proximity_auth
|
|
|