Add SetVisibility to NearbySharingService

PiperOrigin-RevId: 652933591
This commit is contained in:
Anay Wadhera
2024-07-16 12:15:34 -07:00
committed by Copybara-Service
parent 01e9a6e0e2
commit a0484fef80
4 changed files with 86 additions and 0 deletions
+7
View File
@@ -20,6 +20,7 @@
#include <memory>
#include <string>
#include "absl/functional/any_invocable.h"
#include "absl/strings/string_view.h"
#include "internal/network/url.h"
#include "sharing/advertisement.h"
@@ -261,6 +262,12 @@ class NearbySharingService {
virtual void JoinWifiNetwork(absl::string_view ssid,
absl::string_view password) = 0;
// Checks to make sure visibility setting is valid and updates the service's
// visibility if so.
virtual void SetVisibility(
proto::DeviceVisibility visibility, absl::Duration expiration,
absl::AnyInvocable<void(StatusCodes status_code) &&> callback) = 0;
virtual std::string Dump() const = 0;
virtual void UpdateFilePathsInProgress(bool update_file_paths) = 0;
+30
View File
@@ -1033,6 +1033,36 @@ void NearbySharingServiceImpl::JoinWifiNetwork(absl::string_view ssid,
});
}
void NearbySharingServiceImpl::SetVisibility(
proto::DeviceVisibility visibility, absl::Duration expiration,
absl::AnyInvocable<void(StatusCodes status_code) &&> callback) {
RunOnNearbySharingServiceThread(
"api_set_visibility",
[this, visibility, expiration, callback = std::move(callback)]() mutable {
NL_LOG(INFO) << __func__ << ": SetVisibility is called";
if (settings_->GetVisibility() == visibility) {
std::move(callback)(StatusCodes::kOk);
return;
}
if (account_manager_.GetCurrentAccount() == std::nullopt) {
switch (visibility) {
case proto::DeviceVisibility::DEVICE_VISIBILITY_EVERYONE:
case proto::DeviceVisibility::DEVICE_VISIBILITY_HIDDEN:
break;
default:
NL_LOG(WARNING)
<< __func__
<< ": SetVisibility failed for visibility: " << visibility
<< ". No account.";
std::move(callback)(StatusCodes::kInvalidArgument);
return;
}
}
settings_->SetVisibility(visibility, expiration);
std::move(callback)(StatusCodes::kOk);
});
}
NearbyShareSettings* NearbySharingServiceImpl::GetSettings() {
return settings_.get();
}
+3
View File
@@ -178,6 +178,9 @@ class NearbySharingServiceImpl
void CopyText(absl::string_view text) override;
void JoinWifiNetwork(absl::string_view ssid,
absl::string_view password) override;
void SetVisibility(
proto::DeviceVisibility visibility, absl::Duration expiration,
absl::AnyInvocable<void(StatusCodes status_code) &&> callback) override;
NearbyShareSettings* GetSettings() override;
nearby::sharing::api::SharingRpcNotifier* GetRpcNotifier() override;
NearbyShareLocalDeviceDataManager* GetLocalDeviceDataManager() override;
@@ -2228,6 +2228,52 @@ TEST_F(NearbySharingServiceImplTest,
EXPECT_FALSE(fake_nearby_connections_manager_->is_shutdown());
}
TEST_F(NearbySharingServiceImplTest, ValidateLoginStateWhenSettingVisibility) {
absl::Notification set_visibility_notification;
NearbySharingService::StatusCodes set_visibility_status;
SetConnectionType(ConnectionType::kWifi);
FlushTesting();
service_->SetVisibility(
DeviceVisibility::DEVICE_VISIBILITY_ALL_CONTACTS, absl::ZeroDuration(),
[&set_visibility_notification,
&set_visibility_status](NearbySharingService::StatusCodes status) {
set_visibility_status = status;
set_visibility_notification.Notify();
});
// We should not have been able to set all contacts visibility because we are
// not logged in.
ASSERT_TRUE(
set_visibility_notification.WaitForNotificationWithTimeout(kWaitTimeout));
EXPECT_EQ(set_visibility_status,
NearbySharingService::StatusCodes::kInvalidArgument);
// Create account.
AccountManager::Account account;
account.id = kTestAccountId;
// Log in.
absl::Notification login_notification;
account_manager().SetAccount(account);
service_->GetAccountManager()->Login(
[&](AccountManager::Account account) {
EXPECT_EQ(account.id, kTestAccountId);
login_notification.Notify();
},
[](absl::Status status) {});
ASSERT_TRUE(login_notification.WaitForNotificationWithTimeout(kWaitTimeout));
// We are now logged in, so we should be able to set all contacts visibility.
absl::Notification set_visibility_notification2;
NearbySharingService::StatusCodes set_visibility_status2;
service_->SetVisibility(
DeviceVisibility::DEVICE_VISIBILITY_ALL_CONTACTS, absl::ZeroDuration(),
[&set_visibility_notification2,
&set_visibility_status2](NearbySharingService::StatusCodes status) {
set_visibility_status2 = status;
set_visibility_notification2.Notify();
});
ASSERT_TRUE(set_visibility_notification2.WaitForNotificationWithTimeout(
kWaitTimeout));
EXPECT_EQ(set_visibility_status2, NearbySharingService::StatusCodes::kOk);
}
TEST_F(NearbySharingServiceImplTest,
BackgroundReceiveSurfaceVisibilityToAllContactsStartsAdvertising) {
SetConnectionType(ConnectionType::kWifi);