From b698c00b5db7fc1bf8e15c24ae5a640251952084 Mon Sep 17 00:00:00 2001 From: Anay Wadhera Date: Fri, 12 May 2023 19:36:35 -0700 Subject: [PATCH] DeviceProvider: refactor getdevice interface once again PiperOrigin-RevId: 531659446 --- connections/core.h | 7 ++---- connections/v3/connections_device_provider.h | 5 ++-- .../v3/connections_device_provider_test.cc | 23 ++++++++++--------- internal/interop/device_provider.h | 4 +--- presence/presence_client.cc | 4 +++- presence/presence_client.h | 4 +--- presence/presence_client_test.cc | 4 ++-- presence/presence_device_provider.h | 4 ++-- presence/presence_device_provider_test.cc | 12 ++++++---- 9 files changed, 32 insertions(+), 35 deletions(-) diff --git a/connections/core.h b/connections/core.h index 7142b6e4..53d32ae4 100644 --- a/connections/core.h +++ b/connections/core.h @@ -15,9 +15,8 @@ #ifndef CORE_CORE_H_ #define CORE_CORE_H_ -#include +#include #include -#include #include "absl/strings/string_view.h" #include "absl/types/span.h" @@ -508,9 +507,7 @@ class Core { // Registers a DeviceProvider to provide functionality for Nearby Connections // to interact with the DeviceProvider for retrieving the local device. - template ::value>::type* = nullptr> - void RegisterDeviceProvider(NearbyDeviceProvider* provider); + void RegisterDeviceProvider(std::unique_ptr provider); private: ClientProxy client_; diff --git a/connections/v3/connections_device_provider.h b/connections/v3/connections_device_provider.h index 13b2c14d..e0f4d221 100644 --- a/connections/v3/connections_device_provider.h +++ b/connections/v3/connections_device_provider.h @@ -24,8 +24,7 @@ namespace nearby { namespace connections { namespace v3 { -class ConnectionsDeviceProvider - : public NearbyDeviceProvider { +class ConnectionsDeviceProvider : public NearbyDeviceProvider { public: ConnectionsDeviceProvider( absl::string_view endpoint_info, @@ -36,7 +35,7 @@ class ConnectionsDeviceProvider const std::vector connection_infos) : device_{endpoint_id, endpoint_info, connection_infos} {} - const ConnectionsDevice& GetLocalDevice() override { return device_; } + const NearbyDevice* GetLocalDevice() override { return &device_; } private: ConnectionsDevice device_; diff --git a/connections/v3/connections_device_provider_test.cc b/connections/v3/connections_device_provider_test.cc index 382b2aa0..5915674c 100644 --- a/connections/v3/connections_device_provider_test.cc +++ b/connections/v3/connections_device_provider_test.cc @@ -28,21 +28,22 @@ constexpr absl::string_view kEndpointInfo = "NC endpoint"; TEST(ConnectionsDeviceProviderTest, TestProviderWorksTwoArgs) { ConnectionsDeviceProvider provider(kEndpointInfo, {}); - EXPECT_EQ(provider.GetLocalDevice().GetEndpointInfo(), kEndpointInfo); - EXPECT_EQ(provider.GetLocalDevice().GetType(), - NearbyDevice::Type::kConnectionsDevice); - EXPECT_EQ(provider.GetLocalDevice().GetConnectionInfos().size(), 0); - EXPECT_EQ(provider.GetLocalDevice().GetEndpointId().size(), - kEndpointIdLength); + auto device = provider.GetLocalDevice(); + ASSERT_EQ(device->GetType(), NearbyDevice::Type::kConnectionsDevice); + auto connections_device = static_cast(device); + EXPECT_EQ(connections_device->GetEndpointInfo(), kEndpointInfo); + EXPECT_EQ(connections_device->GetConnectionInfos().size(), 0); + EXPECT_EQ(connections_device->GetEndpointId().size(), kEndpointIdLength); } TEST(ConnectionsDeviceProviderTest, TestProviderWorksThreeArgs) { ConnectionsDeviceProvider provider(kEndpointId, kEndpointInfo, {}); - EXPECT_EQ(provider.GetLocalDevice().GetEndpointInfo(), kEndpointInfo); - EXPECT_EQ(provider.GetLocalDevice().GetType(), - NearbyDevice::Type::kConnectionsDevice); - EXPECT_EQ(provider.GetLocalDevice().GetConnectionInfos().size(), 0); - EXPECT_EQ(provider.GetLocalDevice().GetEndpointId(), kEndpointId); + auto device = provider.GetLocalDevice(); + ASSERT_EQ(device->GetType(), NearbyDevice::Type::kConnectionsDevice); + auto connections_device = static_cast(device); + EXPECT_EQ(connections_device->GetEndpointInfo(), kEndpointInfo); + EXPECT_EQ(connections_device->GetConnectionInfos().size(), 0); + EXPECT_EQ(connections_device->GetEndpointId(), kEndpointId); } } // namespace diff --git a/internal/interop/device_provider.h b/internal/interop/device_provider.h index 828b2613..f68eb517 100644 --- a/internal/interop/device_provider.h +++ b/internal/interop/device_provider.h @@ -22,13 +22,11 @@ namespace nearby { // The base device provider class for use with the Nearby Connections V3 APIs. // This class currently provides a function to get the local device for whatever // client implements it. -template ::value>::type* = nullptr> class NearbyDeviceProvider { public: virtual ~NearbyDeviceProvider() = default; - const virtual T& GetLocalDevice() = 0; + const virtual NearbyDevice* GetLocalDevice() = 0; }; } // namespace nearby diff --git a/presence/presence_client.cc b/presence/presence_client.cc index b011590e..d96249e0 100644 --- a/presence/presence_client.cc +++ b/presence/presence_client.cc @@ -65,7 +65,9 @@ void PresenceClient::StopBroadcast(BroadcastSessionId session_id) { std::optional PresenceClient::GetLocalDevice() { ::nearby::Borrowed borrowed = service_.Borrow(); if (borrowed) { - return (*borrowed)->GetLocalDeviceProvider()->GetLocalDevice(); + const PresenceDevice* device = static_cast( + (*borrowed)->GetLocalDeviceProvider()->GetLocalDevice()); + return PresenceDevice(*device); } return std::nullopt; } diff --git a/presence/presence_client.h b/presence/presence_client.h index 16845b47..f27c3932 100644 --- a/presence/presence_client.h +++ b/presence/presence_client.h @@ -15,9 +15,7 @@ #ifndef THIRD_PARTY_NEARBY_PRESENCE_PRESENCE_CLIENT_H_ #define THIRD_PARTY_NEARBY_PRESENCE_PRESENCE_CLIENT_H_ -#include -#include -#include +#include #include "absl/status/statusor.h" #include "internal/platform/borrowable.h" diff --git a/presence/presence_client_test.cc b/presence/presence_client_test.cc index 9a4585cd..0d9ba146 100644 --- a/presence/presence_client_test.cc +++ b/presence/presence_client_test.cc @@ -126,8 +126,8 @@ TEST_F(PresenceClientTest, GettingDeviceWorks) { {}, 0, 0, {}); auto device = presence_client.GetLocalDevice(); ASSERT_NE(device, std::nullopt); - EXPECT_EQ(device->GetEndpointId().length(), kEndpointIdLength); - EXPECT_EQ(device->GetMetadata().SerializeAsString(), + EXPECT_EQ((*device).GetEndpointId().length(), kEndpointIdLength); + EXPECT_EQ((*device).GetMetadata().SerializeAsString(), CreateTestMetadata().SerializeAsString()); } diff --git a/presence/presence_device_provider.h b/presence/presence_device_provider.h index 31d65e4e..e61a46e7 100644 --- a/presence/presence_device_provider.h +++ b/presence/presence_device_provider.h @@ -22,12 +22,12 @@ namespace nearby { namespace presence { -class PresenceDeviceProvider : public NearbyDeviceProvider { +class PresenceDeviceProvider : public NearbyDeviceProvider { public: explicit PresenceDeviceProvider(::nearby::internal::Metadata metadata) : device_{metadata} {} - const PresenceDevice& GetLocalDevice() override { return device_; } + const NearbyDevice* GetLocalDevice() override { return &device_; } void UpdateMetadata(const ::nearby::internal::Metadata& metadata) { device_.SetMetadata(metadata); diff --git a/presence/presence_device_provider_test.cc b/presence/presence_device_provider_test.cc index cf7b3e22..57323d8c 100644 --- a/presence/presence_device_provider_test.cc +++ b/presence/presence_device_provider_test.cc @@ -49,21 +49,23 @@ TEST(PresenceDeviceProviderTest, ProviderIsNotTriviallyConstructible) { TEST(PresenceDeviceProviderTest, DeviceProviderWorks) { PresenceDeviceProvider provider(CreateTestMetadata()); auto device = provider.GetLocalDevice(); - EXPECT_EQ(device.GetMetadata().SerializeAsString(), + ASSERT_EQ(device->GetType(), NearbyDevice::Type::kPresenceDevice); + auto presence_device = static_cast(device); + EXPECT_EQ(presence_device->GetMetadata().SerializeAsString(), CreateTestMetadata().SerializeAsString()); } TEST(PresenceDeviceProviderTest, DeviceProviderCanUpdateDevice) { PresenceDeviceProvider provider(CreateTestMetadata()); auto device = provider.GetLocalDevice(); - EXPECT_EQ(device.GetMetadata().SerializeAsString(), + ASSERT_EQ(device->GetType(), NearbyDevice::Type::kPresenceDevice); + auto presence_device = static_cast(device); + EXPECT_EQ(presence_device->GetMetadata().SerializeAsString(), CreateTestMetadata().SerializeAsString()); Metadata new_metadata = CreateTestMetadata(); new_metadata.set_device_name("NP interop device"); provider.UpdateMetadata(new_metadata); - EXPECT_NE(device.GetMetadata().SerializeAsString(), - new_metadata.SerializeAsString()); - EXPECT_EQ(provider.GetLocalDevice().GetMetadata().SerializeAsString(), + EXPECT_EQ(presence_device->GetMetadata().SerializeAsString(), new_metadata.SerializeAsString()); }