From 149366bd12253e17173a5a75d1e3fa53de0ffc12 Mon Sep 17 00:00:00 2001 From: Nick Bourdakos Date: Thu, 12 Sep 2024 12:10:09 -0700 Subject: [PATCH] Fix a bug that prevented switching from everyone mode to temporary everyone mode PiperOrigin-RevId: 673949109 --- sharing/nearby_sharing_settings.cc | 9 +-------- sharing/nearby_sharing_settings_test.cc | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/sharing/nearby_sharing_settings.cc b/sharing/nearby_sharing_settings.cc index 320ee44c..3432800c 100644 --- a/sharing/nearby_sharing_settings.cc +++ b/sharing/nearby_sharing_settings.cc @@ -267,6 +267,7 @@ void NearbyShareSettings::SetVisibility(DeviceVisibility visibility, << ", expiration=" << expiration; visibility_expiration_timer_.reset(); + SetFallbackVisibility(last_visibility); absl::Time now = clock_->Now(); if (expiration != absl::ZeroDuration()) { NL_VLOG(1) << __func__ << ": temporary visibility timer starts."; @@ -274,16 +275,8 @@ void NearbyShareSettings::SetVisibility(DeviceVisibility visibility, preference_manager_.SetInteger( prefs::kNearbySharingBackgroundVisibilityExpirationSeconds, absl::ToUnixSeconds(fallback_visibility_timestamp)); - SetFallbackVisibility(last_visibility); StartVisibilityTimer(expiration); } else { - // Since our UI provides the option to go back to temporary everyone mode, - // we should only clear the fallback visibility when we are not in everyone - // mode. Once we fall back to a non-everyone mode visibility, we should - // clear the fallback visibility. - if (visibility != DeviceVisibility::DEVICE_VISIBILITY_EVERYONE) { - SetFallbackVisibility(DeviceVisibility::DEVICE_VISIBILITY_UNSPECIFIED); - } preference_manager_.SetInteger( prefs::kNearbySharingBackgroundVisibilityExpirationSeconds, 0); } diff --git a/sharing/nearby_sharing_settings_test.cc b/sharing/nearby_sharing_settings_test.cc index 7b08d094..41bb5a98 100644 --- a/sharing/nearby_sharing_settings_test.cc +++ b/sharing/nearby_sharing_settings_test.cc @@ -279,6 +279,26 @@ TEST_F(NearbyShareSettingsTest, DeviceVisibility::DEVICE_VISIBILITY_UNSPECIFIED); } +TEST_F(NearbyShareSettingsTest, + SetPersistentThenTemporaryVisibilityExpiresAndRestoresOriginal) { + // Set our initial visibility to self share. + settings()->SetVisibility(DeviceVisibility::DEVICE_VISIBILITY_SELF_SHARE); + // Set persistent everyone mode. + settings()->SetVisibility(DeviceVisibility::DEVICE_VISIBILITY_EVERYONE); + // Set everyone mode temporarily. + settings()->SetVisibility( + DeviceVisibility::DEVICE_VISIBILITY_EVERYONE, + absl::Seconds(prefs::kDefaultMaxVisibilityExpirationSeconds)); + // Fast forward to the expiration time. + FastForward(absl::Seconds(prefs::kDefaultMaxVisibilityExpirationSeconds + 1)); + // Verify that the visibility has expired and we are back to self share. + Flush(); + EXPECT_EQ(settings()->GetVisibility(), + DeviceVisibility::DEVICE_VISIBILITY_SELF_SHARE); + EXPECT_EQ(settings()->GetFallbackVisibility().visibility, + DeviceVisibility::DEVICE_VISIBILITY_UNSPECIFIED); +} + TEST_F(NearbyShareSettingsTest, GetFallbackVisibilityReturnsUnspecifiedIfPermanent) { // Set our initial visibility to self share.