Simplify popover hide logic and add test coverage

This commit is contained in:
Dean Herbert 2021-07-17 22:31:47 +09:00
parent 64cf9b702e
commit c6bc95767d
3 changed files with 25 additions and 14 deletions

View File

@ -52,6 +52,18 @@ namespace osu.Game.Tests.Visual.Multiplayer
AddAssert("room join password correct", () => lastJoinedPassword == null); AddAssert("room join password correct", () => lastJoinedPassword == null);
} }
[Test]
public void TestPopoverHidesOnLeavingScreen()
{
AddStep("add room", () => RoomManager.AddRooms(1, withPassword: true));
AddStep("select room", () => InputManager.Key(Key.Down));
AddStep("attempt join room", () => InputManager.Key(Key.Enter));
AddUntilStep("password prompt appeared", () => InputManager.ChildrenOfType<DrawableRoom.PasswordEntryPopover>().Any());
AddStep("exit screen", () => Stack.Exit());
AddUntilStep("password prompt hidden", () => !InputManager.ChildrenOfType<DrawableRoom.PasswordEntryPopover>().Any());
}
[Test] [Test]
public void TestJoinRoomWithPassword() public void TestJoinRoomWithPassword()
{ {

View File

@ -7,7 +7,6 @@ using System.Collections.Specialized;
using System.Linq; using System.Linq;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Extensions;
using osu.Framework.Extensions.IEnumerableExtensions; using osu.Framework.Extensions.IEnumerableExtensions;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
@ -239,11 +238,5 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
if (roomManager != null) if (roomManager != null)
roomManager.RoomsUpdated -= updateSorting; roomManager.RoomsUpdated -= updateSorting;
} }
public void HideAnyPopovers()
{
// must be called on a child of the PopoverContainer due to parent traversal not considering self.
roomFlow.HidePopover();
}
} }
} }

View File

@ -6,6 +6,7 @@ using System.Linq;
using JetBrains.Annotations; using JetBrains.Annotations;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Bindables; using osu.Framework.Bindables;
using osu.Framework.Extensions;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Input.Events; using osu.Framework.Input.Events;
@ -151,24 +152,29 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
onReturning(); onReturning();
} }
private void onReturning()
{
filter.HoldFocus = true;
}
public override bool OnExiting(IScreen next) public override bool OnExiting(IScreen next)
{ {
filter.HoldFocus = false; onLeaving();
return base.OnExiting(next); return base.OnExiting(next);
} }
public override void OnSuspending(IScreen next) public override void OnSuspending(IScreen next)
{ {
onLeaving();
base.OnSuspending(next); base.OnSuspending(next);
}
private void onReturning()
{
filter.HoldFocus = true;
}
private void onLeaving()
{
filter.HoldFocus = false; filter.HoldFocus = false;
// ensure any password prompt is dismissed. // ensure any password prompt is dismissed.
roomsContainer.HideAnyPopovers(); this.HidePopover();
} }
public void Join(Room room, string password) public void Join(Room room, string password)