diff --git a/fastpair/repository/fast_pair_metadata_repository.h b/fastpair/repository/fast_pair_metadata_repository.h index d402972e..b5cee2a7 100644 --- a/fastpair/repository/fast_pair_metadata_repository.h +++ b/fastpair/repository/fast_pair_metadata_repository.h @@ -16,6 +16,7 @@ #define THIRD_PARTY_NEARBY_FASTPAIR_REPOSITORY_FAST_PAIR_METADATA_REPOSITORY_H_ #include +#include #include "absl/strings/string_view.h" #include "fastpair/common/fast_pair_http_result.h" @@ -43,6 +44,16 @@ class FastPairMetadataRepository { ErrorCallback error_callback) = 0; }; +// Interface for creating FastPairMetadataRepository instances to increase the +// flexibility +class FastPairMetadataRepositoryFactory { + public: + FastPairMetadataRepositoryFactory() = default; + virtual ~FastPairMetadataRepositoryFactory() = default; + + virtual std::unique_ptr CreateInstance() = 0; +}; + } // namespace fastpair } // namespace nearby diff --git a/fastpair/repository/fast_pair_metadata_repository_impl.cc b/fastpair/repository/fast_pair_metadata_repository_impl.cc index 933f8bf1..6424d675 100644 --- a/fastpair/repository/fast_pair_metadata_repository_impl.cc +++ b/fastpair/repository/fast_pair_metadata_repository_impl.cc @@ -23,11 +23,15 @@ #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" #include "fastpair/common/fast_pair_http_result.h" +#include "fastpair/internal/api/device_info.h" #include "fastpair/proto/fastpair_rpcs.proto.h" #include "fastpair/repository/fast_pair_metadata_fetcher.h" #include "fastpair/repository/fast_pair_metadata_repository.h" +#include "fastpair/repository/fast_pair_metadata_fetcher_impl.h" +#include "internal/network/http_client_factory.h" #include "internal/network/url.h" #include "internal/platform/logging.h" +#include "internal/network/http_client.h" namespace nearby { namespace fastpair { @@ -116,5 +120,20 @@ void FastPairMetadataRepositoryImpl::OnFetcherFailed(FastPairHttpError error) { error_callback_(error); } +FastPairMetadataRepositoryFactoryImpl::FastPairMetadataRepositoryFactoryImpl( + network::HttpClientFactory* http_client_factory) + : http_client_factory_(http_client_factory) {} + +FastPairMetadataRepositoryFactoryImpl:: + ~FastPairMetadataRepositoryFactoryImpl() = default; + +std::unique_ptr +FastPairMetadataRepositoryFactoryImpl::CreateInstance() { + return std::make_unique( + std::make_unique( + api::DeviceInfo::OsType::kWindows), + http_client_factory_->CreateInstance()); +} + } // namespace fastpair } // namespace nearby diff --git a/fastpair/repository/fast_pair_metadata_repository_impl.h b/fastpair/repository/fast_pair_metadata_repository_impl.h index c4ca4a04..502fc8aa 100644 --- a/fastpair/repository/fast_pair_metadata_repository_impl.h +++ b/fastpair/repository/fast_pair_metadata_repository_impl.h @@ -25,6 +25,7 @@ #include "fastpair/repository/fast_pair_metadata_fetcher.h" #include "fastpair/repository/fast_pair_metadata_repository.h" #include "internal/network/http_client.h" +#include "internal/network/http_client_factory.h" namespace nearby { namespace fastpair { @@ -64,6 +65,24 @@ class FastPairMetadataRepositoryImpl : public FastPairMetadataRepository { ErrorCallback error_callback_; }; +class FastPairMetadataRepositoryFactoryImpl + : public FastPairMetadataRepositoryFactory { + public: + explicit FastPairMetadataRepositoryFactoryImpl( + network::HttpClientFactory* http_client_factory); + ~FastPairMetadataRepositoryFactoryImpl() override; + + FastPairMetadataRepositoryFactoryImpl( + FastPairMetadataRepositoryFactoryImpl&) = delete; + FastPairMetadataRepositoryFactoryImpl& operator=( + FastPairMetadataRepositoryFactoryImpl&) = delete; + + std::unique_ptr CreateInstance() override; + + private: + network::HttpClientFactory* http_client_factory_; +}; + } // namespace fastpair } // namespace nearby