mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-16 15:36:12 -04:00
Implement RetroactivePairingDetector
PiperOrigin-RevId: 538319791
This commit is contained in:
committed by
Copybara-Service
parent
aabc521454
commit
ba740c9a5c
@@ -314,11 +314,12 @@ api::BluetoothDevice* BluetoothClassicMedium::GetRemoteDevice(
|
||||
|
||||
void BluetoothClassicMedium::AddObserver(
|
||||
api::BluetoothClassicMedium::Observer* observer) {
|
||||
// TODO(b/269521993): Implement observer callbacks.
|
||||
MediumEnvironment::Instance().AddObserver(observer);
|
||||
}
|
||||
|
||||
void BluetoothClassicMedium::RemoveObserver(
|
||||
api::BluetoothClassicMedium::Observer* observer) {
|
||||
// TODO(b/269521993): Implement observer callbacks.
|
||||
MediumEnvironment::Instance().RemoveObserver(observer);
|
||||
}
|
||||
|
||||
} // namespace g3
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <codecvt>
|
||||
#include <fstream>
|
||||
#include <functional>
|
||||
#include <ios>
|
||||
#include <locale>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
@@ -560,11 +561,6 @@ winrt::fire_and_forget BluetoothClassicMedium::DeviceWatcher_Added(
|
||||
return winrt::fire_and_forget();
|
||||
}
|
||||
|
||||
// Represents a Bluetooth device.
|
||||
// https://docs.microsoft.com/en-us/uwp/api/windows.devices.bluetooth.bluetoothdevice?view=winrt-20348
|
||||
std::unique_ptr<winrt::Windows::Devices::Bluetooth::BluetoothDevice>
|
||||
windowsBluetoothDevice;
|
||||
|
||||
// Create an iterator for the internal list
|
||||
std::map<winrt::hstring, std::unique_ptr<BluetoothDevice>>::const_iterator
|
||||
it = discovered_devices_by_id_.find(deviceInfo.Id());
|
||||
@@ -587,11 +583,14 @@ winrt::fire_and_forget BluetoothClassicMedium::DeviceWatcher_Added(
|
||||
|
||||
discovered_devices_by_id_[deviceInfo.Id()] = std::move(bluetoothDeviceP);
|
||||
|
||||
NEARBY_LOGS(INFO) << __func__ << ": Notifying bluetooth device added";
|
||||
if (discovery_callback_.device_discovered_cb != nullptr) {
|
||||
discovery_callback_.device_discovered_cb(
|
||||
*discovered_devices_by_id_[deviceInfo.Id()]);
|
||||
}
|
||||
|
||||
for (auto& observer : observers_.GetObservers()) {
|
||||
observer->DeviceAdded(*discovered_devices_by_id_[deviceInfo.Id()]);
|
||||
}
|
||||
return winrt::fire_and_forget();
|
||||
}
|
||||
|
||||
@@ -619,6 +618,7 @@ winrt::fire_and_forget BluetoothClassicMedium::DeviceWatcher_Updated(
|
||||
return winrt::fire_and_forget();
|
||||
}
|
||||
|
||||
// https://learn.microsoft.com/en-us/windows/uwp/devices-sensors/device-information-properties#associationendpoint-properties
|
||||
if (properties.HasKey(L"System.ItemNameDisplay")) {
|
||||
// we need to really change the name of the bluetooth device
|
||||
std::string new_device_name = InspectableReader::ReadString(
|
||||
@@ -627,17 +627,29 @@ winrt::fire_and_forget BluetoothClassicMedium::DeviceWatcher_Updated(
|
||||
if (it->second->GetName() == new_device_name) {
|
||||
NEARBY_LOGS(INFO)
|
||||
<< "Device name is same as old name, ignore the update.";
|
||||
return {};
|
||||
} else {
|
||||
it->second->SetName(new_device_name);
|
||||
|
||||
NEARBY_LOGS(INFO)
|
||||
<< "Updated device name:"
|
||||
<< discovered_devices_by_id_[deviceInfoUpdate.Id()]->GetName();
|
||||
|
||||
discovery_callback_.device_name_changed_cb(
|
||||
*discovered_devices_by_id_[deviceInfoUpdate.Id()]);
|
||||
}
|
||||
}
|
||||
|
||||
it->second->SetName(new_device_name);
|
||||
|
||||
NEARBY_LOGS(INFO)
|
||||
<< "Updated device name:"
|
||||
<< discovered_devices_by_id_[deviceInfoUpdate.Id()]->GetName();
|
||||
|
||||
discovery_callback_.device_name_changed_cb(
|
||||
*discovered_devices_by_id_[deviceInfoUpdate.Id()]);
|
||||
// Indicates if the device is currently paired.
|
||||
if (properties.HasKey(L"System.Devices.Aep.IsPaired")) {
|
||||
bool new_paired_status = InspectableReader::ReadBoolean(
|
||||
properties.Lookup(L"System.Devices.Aep.IsPaired"));
|
||||
NEARBY_LOGS(INFO) << __func__
|
||||
<< ": Notifying device paired changed: " << std::boolalpha
|
||||
<< new_paired_status;
|
||||
for (auto& observer : observers_.GetObservers()) {
|
||||
observer->DevicePairedChanged(
|
||||
*discovered_devices_by_id_[deviceInfoUpdate.Id()], new_paired_status);
|
||||
}
|
||||
}
|
||||
|
||||
return winrt::fire_and_forget();
|
||||
@@ -662,11 +674,16 @@ winrt::fire_and_forget BluetoothClassicMedium::DeviceWatcher_Removed(
|
||||
return winrt::fire_and_forget();
|
||||
}
|
||||
|
||||
NEARBY_LOGS(INFO) << __func__ << ": Notifying bluetooth device removed";
|
||||
if (discovery_callback_.device_lost_cb != nullptr) {
|
||||
discovery_callback_.device_lost_cb(
|
||||
*discovered_devices_by_id_[deviceInfo.Id()]);
|
||||
}
|
||||
|
||||
for (auto& observer : observers_.GetObservers()) {
|
||||
observer->DeviceRemoved(*discovered_devices_by_id_[deviceInfo.Id()]);
|
||||
}
|
||||
|
||||
discovered_devices_by_id_.erase(deviceInfo.Id());
|
||||
|
||||
return winrt::fire_and_forget();
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include "internal/base/observer_list.h"
|
||||
#include "internal/platform/implementation/bluetooth_classic.h"
|
||||
#include "internal/platform/implementation/windows/bluetooth_adapter.h"
|
||||
#include "internal/platform/implementation/windows/bluetooth_classic_device.h"
|
||||
@@ -152,12 +153,12 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium {
|
||||
api::BluetoothDevice& remote_device) override;
|
||||
|
||||
void AddObserver(Observer* observer) override {
|
||||
// TODO(b/269521993): Implement.
|
||||
observers_.AddObserver(observer);
|
||||
}
|
||||
|
||||
// Removes an observer. It's OK to remove an unregistered observer.
|
||||
void RemoveObserver(Observer* observer) override {
|
||||
// TODO(b/269521993): Implement.
|
||||
observers_.RemoveObserver(observer);
|
||||
}
|
||||
|
||||
private:
|
||||
@@ -218,6 +219,7 @@ class BluetoothClassicMedium : public api::BluetoothClassicMedium {
|
||||
std::unique_ptr<BluetoothServerSocket> server_socket_ = nullptr;
|
||||
BluetoothServerSocket* raw_server_socket_ = nullptr;
|
||||
bool is_radio_discoverable_ = false;
|
||||
ObserverList<Observer> observers_;
|
||||
};
|
||||
|
||||
} // namespace windows
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace windows {
|
||||
class ConditionVariable : public api::ConditionVariable {
|
||||
public:
|
||||
explicit ConditionVariable(api::Mutex* mutex)
|
||||
: mutex_(&(static_cast<windows::Mutex*>(mutex))->mutex_) {}
|
||||
: mutex_(&(static_cast<windows::Mutex*>(mutex))->GetMutex()) {}
|
||||
~ConditionVariable() override = default;
|
||||
|
||||
Exception Wait() override {
|
||||
|
||||
Reference in New Issue
Block a user