diff --git a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs index 29b26f6991..f9f7f3e89c 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/BeatmapCarouselTestScene.cs @@ -375,6 +375,8 @@ namespace osu.Game.Tests.Visual.SongSelectV2 public partial class TestBeatmapCarousel : BeatmapCarousel { + public int FilterDelay = 0; + public IEnumerable PostFilterBeatmaps = null!; public BeatmapInfo? SelectedBeatmapInfo => CurrentSelection as BeatmapInfo; @@ -383,15 +385,15 @@ namespace osu.Game.Tests.Visual.SongSelectV2 public new BeatmapSetInfo? ExpandedBeatmapSet => base.ExpandedBeatmapSet; public new GroupDefinition? ExpandedGroup => base.ExpandedGroup; - protected override Task> FilterAsync(bool clearExistingPanels = false) + protected override async Task> FilterAsync(bool clearExistingPanels = false) { - var filterAsync = base.FilterAsync(clearExistingPanels); - filterAsync.ContinueWith(result => - { - if (result.IsCompletedSuccessfully) - PostFilterBeatmaps = result.GetResultSafely().Select(i => i.Model).OfType(); - }); - return filterAsync; + var items = await base.FilterAsync(clearExistingPanels); + + if (FilterDelay != 0) + await Task.Delay(FilterDelay); + + PostFilterBeatmaps = items.Select(i => i.Model).OfType(); + return items; } } } diff --git a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs index 73e0e5aaa8..56351eed97 100644 --- a/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs +++ b/osu.Game.Tests/Visual/SongSelectV2/TestSceneBeatmapCarousel.cs @@ -48,6 +48,14 @@ namespace osu.Game.Tests.Visual.SongSelectV2 RemoveAllBeatmaps(); } + [Test] + [Explicit] + public void TestLoadingDisplay() + { + AddStep("induce slow filtering", () => Carousel.FilterDelay = 2000); + SortAndGroupBy(SortMode.Artist, GroupMode.NoGrouping); + } + [Test] [Explicit] public void TestAddRemoveRepeatedOps() diff --git a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs index f23c02c120..0ffcac18b9 100644 --- a/osu.Game/Screens/SelectV2/BeatmapCarousel.cs +++ b/osu.Game/Screens/SelectV2/BeatmapCarousel.cs @@ -18,6 +18,7 @@ using osu.Framework.Utils; using osu.Game.Beatmaps; using osu.Game.Configuration; using osu.Game.Database; +using osu.Game.Graphics; using osu.Game.Graphics.Carousel; using osu.Game.Graphics.UserInterface; using osu.Game.Screens.Select; @@ -78,7 +79,7 @@ namespace osu.Game.Screens.SelectV2 grouping = new BeatmapCarouselFilterGrouping(() => Criteria), }; - AddInternal(loading = new LoadingLayer(dimBackground: true)); + AddInternal(loading = new LoadingLayer()); } [BackgroundDependencyLoader] @@ -451,13 +452,18 @@ namespace osu.Game.Screens.SelectV2 Criteria = criteria; - loadingDebounce ??= Scheduler.AddDelayed(() => loading.Show(), 250); + loadingDebounce ??= Scheduler.AddDelayed(() => + { + Scroll.FadeColour(OsuColour.Gray(0.5f), 1000, Easing.OutQuint); + loading.Show(); + }, 250); FilterAsync(resetDisplay).ContinueWith(_ => Schedule(() => { loadingDebounce?.Cancel(); loadingDebounce = null; + Scroll.FadeColour(OsuColour.Gray(1f), 500, Easing.OutQuint); loading.Hide(); })); }