From f81ee02981919ca23de82cc92a4b4db96106aa08 Mon Sep 17 00:00:00 2001 From: Francis Tsui Date: Fri, 27 Feb 2026 10:59:42 -0800 Subject: [PATCH] Add SyncConfig and BindingConfigs to preferences. PiperOrigin-RevId: 876332995 --- sharing/common/nearby_share_prefs.cc | 3 ++ sharing/internal/api/BUILD | 2 +- sharing/internal/api/preference_manager.h | 15 +++++++ sharing/internal/public/pref_names.h | 14 +++++++ sharing/internal/test/BUILD | 3 +- .../internal/test/fake_preference_manager.cc | 42 ++++++++++++++++++- .../internal/test/fake_preference_manager.h | 8 ++++ 7 files changed, 82 insertions(+), 5 deletions(-) diff --git a/sharing/common/nearby_share_prefs.cc b/sharing/common/nearby_share_prefs.cc index 9e9200e5..279b352b 100644 --- a/sharing/common/nearby_share_prefs.cc +++ b/sharing/common/nearby_share_prefs.cc @@ -66,6 +66,9 @@ void RegisterNearbySharingPrefs(PreferenceManager& preference_manager, preference_manager.Remove(PrefNames::kSchedulerUploadLocalDeviceCertificates); preference_manager.Remove(PrefNames::kUsers); preference_manager.SetBoolean(PrefNames::kAdvancedProtectionEnabled, false); + + preference_manager.RemoveAllSyncConfigs(); + preference_manager.RemoveAllBindingConfigs(); } void ResetSchedulers(PreferenceManager& preference_manager) { diff --git a/sharing/internal/api/BUILD b/sharing/internal/api/BUILD index 502e9934..e940ba7d 100644 --- a/sharing/internal/api/BUILD +++ b/sharing/internal/api/BUILD @@ -45,8 +45,8 @@ cc_library( "//internal/platform/implementation:account_manager", "//sharing/analytics", "//sharing/proto:share_cc_proto", + "//sharing/proto:wire_format_cc_proto", "@com_google_absl//absl/functional:any_invocable", - "@com_google_absl//absl/status", "@com_google_absl//absl/status:statusor", "@com_google_absl//absl/strings:string_view", "@com_google_absl//absl/time", diff --git a/sharing/internal/api/preference_manager.h b/sharing/internal/api/preference_manager.h index c15d57bb..83a9faa9 100644 --- a/sharing/internal/api/preference_manager.h +++ b/sharing/internal/api/preference_manager.h @@ -26,6 +26,7 @@ #include "absl/time/time.h" #include "absl/types/span.h" #include "sharing/internal/api/private_certificate_data.h" +#include "sharing/proto/wire_format.pb.h" namespace nearby::sharing::api { @@ -78,6 +79,11 @@ class PreferenceManager { std::string value) = 0; virtual void RemoveDictionaryItem(absl::string_view key, absl::string_view dictionary_item) = 0; + + virtual void SetSyncConfigValue( + absl::string_view binding_id, + const nearby::sharing::service::proto::SyncConfig& value) = 0; + // Gets values virtual bool GetBoolean(absl::string_view key, bool default_value) const = 0; virtual int GetInteger(absl::string_view key, int default_value) const = 0; @@ -117,8 +123,17 @@ class PreferenceManager { virtual std::optional GetDictionaryStringValue( absl::string_view key, absl::string_view dictionary_item) const = 0; + virtual std::optional + GetSyncConfigValue(absl::string_view binding_id) const = 0; + // Removes preferences virtual void Remove(absl::string_view key) = 0; + // Removes all sync configs. + // Observers are not notified for each removed config. + virtual void RemoveAllSyncConfigs() = 0; + // Removes all binding configs. + // Observers are not notified for each removed config. + virtual void RemoveAllBindingConfigs() = 0; // Adds preference observer virtual void AddObserver( diff --git a/sharing/internal/public/pref_names.h b/sharing/internal/public/pref_names.h index 0114690b..83ced43c 100644 --- a/sharing/internal/public/pref_names.h +++ b/sharing/internal/public/pref_names.h @@ -54,6 +54,20 @@ class PrefNames { "nearby_sharing.advanced_protection_enabled"; static constexpr absl::string_view kSchedulerGetAccountInfo = "nearby_sharing.scheduler.get_account_info"; + + // Binding configs preferences are stored in pref keys: + // kBindingConfigPrefix + + // Example: "nearby_sharing.binding_config.FileSync" + // TODO: b/485304482 - define data format for binding configs. + static constexpr absl::string_view kBindingConfigPrefix = + "nearby_sharing.binding_config."; + + // Sync configs preferences are stored in pref keys: + // kSyncConfigPrefix + + // Example: "nearby_sharing.sync_config.01243347-2343-4324-3423-432432432432" + // Data stored in sync config prefs is a SyncConfig proto. + static constexpr absl::string_view kSyncConfigPrefix = + "nearby_sharing.sync_config."; }; } // namespace nearby::sharing diff --git a/sharing/internal/test/BUILD b/sharing/internal/test/BUILD index cbee4bf8..b377f056 100644 --- a/sharing/internal/test/BUILD +++ b/sharing/internal/test/BUILD @@ -37,17 +37,16 @@ cc_library( visibility = ["//visibility:public"], deps = [ "//internal/base", - "//internal/base:bluetooth_address", "//internal/platform:mac_address", "//internal/platform:types", "//internal/test", "//sharing/internal/api:platform", + "//sharing/internal/public:pref_names", "//sharing/internal/public:types", "//sharing/proto:share_cc_proto", "@com_google_absl//absl/base:core_headers", "@com_google_absl//absl/container:flat_hash_map", "@com_google_absl//absl/functional:any_invocable", - "@com_google_absl//absl/status", "@com_google_absl//absl/strings", "@com_google_absl//absl/synchronization", "@com_google_absl//absl/time", diff --git a/sharing/internal/test/fake_preference_manager.cc b/sharing/internal/test/fake_preference_manager.cc index b605ca56..cc1f637d 100644 --- a/sharing/internal/test/fake_preference_manager.cc +++ b/sharing/internal/test/fake_preference_manager.cc @@ -13,6 +13,7 @@ // limitations under the License. #include "sharing/internal/test/fake_preference_manager.h" + #include #include #include @@ -22,13 +23,16 @@ #include #include "absl/container/flat_hash_map.h" +#include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" #include "absl/synchronization/mutex.h" #include "absl/time/time.h" #include "absl/types/span.h" #include "sharing/internal/api/private_certificate_data.h" +#include "sharing/internal/public/pref_names.h" namespace nearby { +using ::nearby::sharing::PrefNames; using ::nearby::sharing::api::PrivateCertificateData; template @@ -180,8 +184,7 @@ void FakePreferenceManager::SetStringArray( } void FakePreferenceManager::SetPrivateCertificateArray( - absl::string_view key, - absl::Span value) { + absl::string_view key, absl::Span value) { absl::MutexLock lock(mutex_); if (certs_.contains(key)) { certs_.erase(key); @@ -235,6 +238,12 @@ void FakePreferenceManager::RemoveDictionaryItem( NotifyPreferenceChanged(key); } +void FakePreferenceManager::SetSyncConfigValue( + absl::string_view binding_id, + const nearby::sharing::service::proto::SyncConfig& value) { + SetValue(absl::StrCat(PrefNames::kSyncConfigPrefix, binding_id), + value.SerializeAsString()); +} bool FakePreferenceManager::GetBoolean(absl::string_view key, bool default_value) const { @@ -320,6 +329,21 @@ std::optional FakePreferenceManager::GetDictionaryStringValue( return GetDictionaryValue(key, dictionary_item); } +std::optional +FakePreferenceManager::GetSyncConfigValue(absl::string_view binding_id) const { + std::string serialized_sync_config; + serialized_sync_config = + GetString(absl::StrCat(PrefNames::kSyncConfigPrefix, binding_id), ""); + if (serialized_sync_config.empty()) { + return std::nullopt; + } + nearby::sharing::service::proto::SyncConfig sync_config; + if (!sync_config.ParseFromString(serialized_sync_config)) { + return std::nullopt; + } + return sync_config; +} + void FakePreferenceManager::Remove(absl::string_view key) { { absl::MutexLock lock(mutex_); @@ -330,6 +354,20 @@ void FakePreferenceManager::Remove(absl::string_view key) { NotifyPreferenceChanged(key); } +void FakePreferenceManager::RemoveAllSyncConfigs() { + absl::MutexLock lock(mutex_); + absl::erase_if(values_, [](const auto& item) { + return item.first.starts_with(PrefNames::kSyncConfigPrefix); + }); +} + +void FakePreferenceManager::RemoveAllBindingConfigs() { + absl::MutexLock lock(mutex_); + absl::erase_if(values_, [](const auto& item) { + return item.first.starts_with(PrefNames::kBindingConfigPrefix); + }); +} + void FakePreferenceManager::NotifyPreferenceChanged(absl::string_view key) { absl::flat_hash_map> observers; diff --git a/sharing/internal/test/fake_preference_manager.h b/sharing/internal/test/fake_preference_manager.h index c1a3fc0f..acff903d 100644 --- a/sharing/internal/test/fake_preference_manager.h +++ b/sharing/internal/test/fake_preference_manager.h @@ -74,6 +74,10 @@ class FakePreferenceManager : public nearby::sharing::api::PreferenceManager { void RemoveDictionaryItem(absl::string_view key, absl::string_view dictionary_item) override; + void SetSyncConfigValue( + absl::string_view binding_id, + const nearby::sharing::service::proto::SyncConfig& value) override; + bool GetBoolean(absl::string_view key, bool default_value) const override; int GetInteger(absl::string_view key, int default_value) const override; int64_t GetInt64(absl::string_view key, int64_t default_value) const override; @@ -107,8 +111,12 @@ class FakePreferenceManager : public nearby::sharing::api::PreferenceManager { absl::string_view key, absl::string_view dictionary_item) const override; std::optional GetDictionaryStringValue( absl::string_view key, absl::string_view dictionary_item) const override; + std::optional + GetSyncConfigValue(absl::string_view binding_id) const override; void Remove(absl::string_view key) override; + void RemoveAllSyncConfigs() override; + void RemoveAllBindingConfigs() override; void AddObserver( absl::string_view name,