mirror of
https://github.com/kidfromjupiter/nearby.git
synced 2026-09-14 14:46:12 -04:00
Add SetVisibility to NearbySharingService
PiperOrigin-RevId: 652933591
This commit is contained in:
committed by
Copybara-Service
parent
01e9a6e0e2
commit
a0484fef80
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user