From c3a0798910ce75e5400c0410d88d4bd17adeda83 Mon Sep 17 00:00:00 2001 From: Steffen Schaefer Date: Thu, 17 Aug 2017 10:41:26 +0200 Subject: [PATCH] Bug 4228: Fixed a bug that caused the user hint about login to stay open when a user logs in --- .../TabletAndDesktopApplicationClientFactory.java | 12 +++++++++--- .../app/MobileApplicationClientFactory.java | 2 +- .../ui/authentication/AuthenticationManager.java | 2 +- .../authentication/AuthenticationManagerImpl.java | 15 +++++++++------ 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/TabletAndDesktopApplicationClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/TabletAndDesktopApplicationClientFactory.java index cb38927ea4c..16c3dd1577d 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/TabletAndDesktopApplicationClientFactory.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/TabletAndDesktopApplicationClientFactory.java @@ -46,6 +46,7 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio private final SailingDispatchSystem dispatch = new SailingDispatchSystemImpl(); private final WrappedPlaceManagementController userManagementWizardController; private final AuthenticationManager authenticationManager; + private LoginPopup loginPopup; public TabletAndDesktopApplicationClientFactory(boolean isStandaloneServer) { this(new SimpleEventBus(), isStandaloneServer); @@ -80,13 +81,18 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio new FlyoutAuthenticationPresenter(userManagementDisplay, getTopLevelView().getAuthenticationMenuView(), userManagementWizardController, eventBus, authenticationManager.getAuthenticationContext()); - authenticationManager.checkNewUserPopup(dismissCallback -> { - new LoginPopup(() -> { + authenticationManager.checkNewUserPopup(() -> { + if (loginPopup != null) { + loginPopup.hide(); + } + }, dismissCallback -> { + loginPopup = new LoginPopup(() -> { dismissCallback.run(); }, () -> { dismissCallback.run(); placesNavigator.goToPlace(placesNavigator.getMoreLoginInfo()); - }).show(); + }); + loginPopup.show(); }); } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileApplicationClientFactory.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileApplicationClientFactory.java index 84ed67b6496..35df9b9ce77 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileApplicationClientFactory.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileApplicationClientFactory.java @@ -71,7 +71,7 @@ public class MobileApplicationClientFactory extends .getMailVerifiedConfirmationNavigation().getFullQualifiedUrl(), getNavigator() .getPasswordResetNavigation().getFullQualifiedUrl()); - authenticationManager.checkNewUserPopup(dismissCallback -> { + authenticationManager.checkNewUserPopup(() -> root.setSubHeaderContent(null), dismissCallback -> { final LoginPopupContent content = new LoginPopupContent(() -> { root.setSubHeaderContent(null); dismissCallback.run(); diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManager.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManager.java index 1d3cd0bce5a..6141e5d7af8 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManager.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManager.java @@ -85,5 +85,5 @@ public interface AuthenticationManager { void onSuccess(T result); } - void checkNewUserPopup(Consumer showUserHintCallback); + void checkNewUserPopup(Runnable hideUserHintCallback, Consumer showUserHintCallback); } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManagerImpl.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManagerImpl.java index 2da3aa53624..329986c72c3 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManagerImpl.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationManagerImpl.java @@ -171,15 +171,18 @@ public class AuthenticationManagerImpl implements AuthenticationManager { } @Override - public void checkNewUserPopup(Consumer showUserHintCallback) { + public void checkNewUserPopup(final Runnable hideUserHintCallback, Consumer showUserHintCallback) { userService.addUserStatusEventHandler(new UserStatusEventHandler() { @Override public void onUserStatusChange(UserDTO user) { - // We are only interested in the initial user - userService.removeUserStatusEventHandler(this); - - if (user == null && !userService.wasUserRecentlyLoggedInOrDismissedTheHint()) { - showUserHintCallback.accept(userService::setUserLoginHintToStorage); + if (user != null) { + // No further user changes need to be handled + userService.removeUserStatusEventHandler(this); + hideUserHintCallback.run(); + } else { + if (!userService.wasUserRecentlyLoggedInOrDismissedTheHint()) { + showUserHintCallback.accept(userService::setUserLoginHintToStorage); + } } } }, true);