diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/DesktopActivityMapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/DesktopActivityMapper.java index 34ecac07a44..3d533b3b0d5 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/DesktopActivityMapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/app/DesktopActivityMapper.java @@ -88,7 +88,7 @@ public class DesktopActivityMapper implements ActivityMapper { } else if (place instanceof ImprintPlace) { return new ImprintActivityProxy((ImprintPlace) place); } else if (place instanceof MoreLoginInformationPlace) { - return new MoreLoginInformationActivity(place); + return new MoreLoginInformationActivity(place, clientFactory); } else { return null; } 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 88c9af0a6dc..40b4f95cf4b 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 @@ -35,7 +35,6 @@ import com.sap.sse.security.ui.authentication.AuthenticationClientFactoryImpl; import com.sap.sse.security.ui.authentication.AuthenticationManager; import com.sap.sse.security.ui.authentication.AuthenticationManagerImpl; import com.sap.sse.security.ui.authentication.AuthenticationPlaceManagementController; -import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController; import com.sap.sse.security.ui.authentication.info.LoggedInUserInfoPlace; import com.sap.sse.security.ui.authentication.view.FlyoutAuthenticationPresenter; import com.sap.sse.security.ui.client.i18n.StringMessages; @@ -43,7 +42,7 @@ import com.sap.sse.security.ui.client.i18n.StringMessages; public class TabletAndDesktopApplicationClientFactory extends AbstractApplicationClientFactory implements DesktopClientFactory { private final SailingDispatchSystem dispatch = new SailingDispatchSystemImpl(); - private final WrappedPlaceManagementController userManagementWizardController; + private final AuthenticationPlaceManagementController userManagementWizardController; private final AuthenticationManager authenticationManager; public TabletAndDesktopApplicationClientFactory(boolean isStandaloneServer) { diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/media/SailingFullscreenViewer.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/media/SailingFullscreenViewer.java index f1a6372f0c5..1999b2af22b 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/media/SailingFullscreenViewer.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/partials/media/SailingFullscreenViewer.java @@ -5,7 +5,7 @@ import java.util.Collection; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.Image; import com.google.gwt.view.client.SelectionChangeEvent; import com.sap.sailing.gwt.common.client.SharedResources; @@ -29,7 +29,7 @@ public class SailingFullscreenViewer extends FullscreenContainer SailingFullscreenViewer.this.toggleAutoplay()); addToolbarAction(autoRefreshControl); } @@ -95,10 +90,11 @@ public class SailingFullscreenViewer extends FullscreenContainer clientFactory.getEventBus() + .fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.CREATE_ACCOUNT)))); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java similarity index 59% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java index 201e26e5c18..757f8bc6974 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.java @@ -2,21 +2,21 @@ package com.sap.sailing.gwt.home.desktop.places.morelogininformation; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformation; /** * Desktop page that shows the benefits of logging in on sapsailing.com. */ -public class MoreLoginInformation extends Composite { +public class MoreLoginInformationDesktop extends AbstractMoreLoginInformation { private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class); - interface MoreLoginInformationUiBinder extends UiBinder { + interface MoreLoginInformationUiBinder extends UiBinder { } - public MoreLoginInformation() { - initWidget(uiBinder.createAndBindUi(this)); + public MoreLoginInformationDesktop(Runnable registerCallback) { + super(uiBinder, registerCallback); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.ui.xml similarity index 68% rename from java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.ui.xml rename to java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.ui.xml index a1cc6eec030..8f267f3705e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformation.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/morelogininformation/MoreLoginInformationDesktop.ui.xml @@ -9,12 +9,23 @@ .clear { clear: both; } + .registerContainer { + text-align: center; + } + .register { + cursor: pointer; + }

- + +
+ + + +
diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/user/profile/UserProfileActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/user/profile/UserProfileActivity.java index fb850c0e925..4e862c97c4a 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/user/profile/UserProfileActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/user/profile/UserProfileActivity.java @@ -17,6 +17,7 @@ import com.sap.sailing.gwt.home.shared.places.fakeseries.AbstractSeriesPlace; import com.sap.sailing.gwt.home.shared.places.start.StartPlace; import com.sap.sailing.gwt.home.shared.places.user.profile.AbstractUserProfilePlace; import com.sap.sse.security.ui.authentication.AuthenticationContextEvent; +import com.sap.sse.security.ui.authentication.AuthenticationPlaces; import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent; import com.sap.sse.security.ui.client.i18n.StringMessages; @@ -91,7 +92,7 @@ public class UserProfileActivity extends AbstractActivity implements UserProfile @Override public void doTriggerLoginForm() { - clientFactory.getEventBus().fireEvent(new AuthenticationRequestEvent()); + clientFactory.getEventBus().fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN)); } @Override diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileActivityMapper.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileActivityMapper.java index 584dba34565..4933a5e7e3f 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileActivityMapper.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobileActivityMapper.java @@ -78,8 +78,6 @@ public class MobileActivityMapper implements ActivityMapper { return new PasswordResetActivityProxy((PasswordResetPlace) place, clientFactory); } else if (place instanceof AbstractUserProfilePlace) { return new UserProfileActivityProxy((AbstractUserProfilePlace) place, clientFactory); - } else if (place instanceof AuthenticationPlace) { - return new AuthenticationActivityProxy((AuthenticationPlace) place, clientFactory); } else if (place instanceof ConfirmationPlace) { return new ConfirmationActivityProxy((ConfirmationPlace) place, clientFactory); } else if (place instanceof PasswordResetPlace) { @@ -87,7 +85,7 @@ public class MobileActivityMapper implements ActivityMapper { } else if (place instanceof ImprintPlace) { return new ImprintActivityProxy((ImprintPlace) place); } else if (place instanceof MoreLoginInformationPlace) { - return new MoreLoginInformationActivity(place); + return new MoreLoginInformationActivity(place, clientFactory); } else { return null; } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobilePlacesNavigator.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobilePlacesNavigator.java index 95b583c87f7..b01aa5da44c 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobilePlacesNavigator.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/app/MobilePlacesNavigator.java @@ -9,6 +9,7 @@ import com.sap.sailing.gwt.home.mobile.places.user.authentication.Authentication import com.sap.sailing.gwt.home.shared.app.HomePlacesNavigator; import com.sap.sailing.gwt.home.shared.app.PlaceNavigation; import com.sap.sailing.gwt.home.shared.places.event.EventContext; +import com.sap.sse.security.ui.authentication.AuthenticationPlaces; public class MobilePlacesNavigator extends HomePlacesNavigator { @@ -23,6 +24,11 @@ public class MobilePlacesNavigator extends HomePlacesNavigator { } public PlaceNavigation getSignInNavigation() { - return createLocalPlaceNavigation(new AuthenticationPlace()); + return createLocalPlaceNavigation(new AuthenticationPlace(AuthenticationPlaces.SIGN_IN)); } + + public PlaceNavigation getCreateAccountNavigation() { + return createLocalPlaceNavigation(new AuthenticationPlace(AuthenticationPlaces.CREATE_ACCOUNT)); + } + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/header/Header.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/header/Header.java index dc371ab0bf1..ddc857dfd93 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/header/Header.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/partials/header/Header.java @@ -68,7 +68,7 @@ public class Header extends Composite { signInNavigationItem = addNavigation(com.sap.sse.security.ui.client.i18n.StringMessages.INSTANCE.signIn(), new Runnable() { @Override public void run() { - placeNavigator.getSignInNavigation().goToPlace(); + placeNavigator.getSignInNavigation().goToPlace(); } }); userDetailsNavigationItem = addNavigation(placeNavigator.getUserProfileNavigation(), com.sap.sse.security.ui.client.i18n.StringMessages.INSTANCE.userDetails()); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java index 52d7052e88f..6d51fa10a4e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationActivity.java @@ -1,33 +1,14 @@ package com.sap.sailing.gwt.home.mobile.places.morelogininformation; -import com.google.gwt.activity.shared.Activity; -import com.google.gwt.event.shared.EventBus; import com.google.gwt.place.shared.Place; -import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.sap.sailing.gwt.home.mobile.app.MobileApplicationClientFactory; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformationActivity; -public class MoreLoginInformationActivity implements Activity { +public class MoreLoginInformationActivity extends AbstractMoreLoginInformationActivity { - public MoreLoginInformationActivity(Place place) { - } - - @Override - public String mayStop() { - return null; - } - - @Override - public void onCancel() { - - } - - @Override - public void onStop() { - - } - - @Override - public void start(AcceptsOneWidget panel, EventBus eventBus) { - panel.setWidget(new MoreLoginInformationMobile()); + public MoreLoginInformationActivity(Place place, MobileApplicationClientFactory clientFactory) { + super(clientFactory, new MoreLoginInformationMobile( + () -> clientFactory.getNavigator().getCreateAccountNavigation().goToPlace())); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java index b198e2a321b..f8f7a098003 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.java @@ -2,21 +2,21 @@ package com.sap.sailing.gwt.home.mobile.places.morelogininformation; import com.google.gwt.core.client.GWT; import com.google.gwt.uibinder.client.UiBinder; -import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; +import com.sap.sailing.gwt.home.shared.places.morelogininformation.AbstractMoreLoginInformation; /** * Mobile page that shows the benefits of logging in on sapsailing.com. */ -public class MoreLoginInformationMobile extends Composite { +public class MoreLoginInformationMobile extends AbstractMoreLoginInformation { private static MoreLoginInformationUiBinder uiBinder = GWT.create(MoreLoginInformationUiBinder.class); - interface MoreLoginInformationUiBinder extends UiBinder { + interface MoreLoginInformationUiBinder extends UiBinder { } - public MoreLoginInformationMobile() { - initWidget(uiBinder.createAndBindUi(this)); + public MoreLoginInformationMobile(Runnable registerCallback) { + super(uiBinder, registerCallback); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.ui.xml index ae50e0ffb0a..3973733f4db 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/morelogininformation/MoreLoginInformationMobile.ui.xml @@ -4,6 +4,7 @@ xmlns:login="urn:import:com.sap.sailing.gwt.home.mobile.places.morelogininformation" xmlns:a="urn:import:com.sap.sailing.gwt.home.mobile.partials.accordion"> + @@ -11,13 +12,12 @@ font-size: 1.5em; } .register { - border-radius: .3846154em; + border-radius: .384615384615385em; width: 100%; text-align: center; } - .buttonContainer { - padding: 1em 0.625em; + margin-top: 1em; } @@ -47,13 +47,13 @@ image="{local_res.notifications}" content="{i18n.moreLoginInformationSectionUserNotificationsDescription}" /> - diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationActivity.java index b14f5277bfc..23525bd7b18 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationActivity.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationActivity.java @@ -10,33 +10,27 @@ import com.sap.sailing.gwt.home.shared.usermanagement.AuthenticationCallbackImpl import com.sap.sailing.gwt.home.shared.usermanagement.view.AuthenticationViewMobile; import com.sap.sse.security.ui.authentication.AuthenticationClientFactoryImpl; import com.sap.sse.security.ui.authentication.AuthenticationPlaceManagementController; -import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController; import com.sap.sse.security.ui.authentication.view.AuthenticationView; public class AuthenticationActivity extends AbstractActivity { private final MobileApplicationClientFactory clientFactory; private final AuthenticationView userManagementView = new AuthenticationViewMobile(); + private final AuthenticationPlace place; public AuthenticationActivity(AuthenticationPlace place, MobileApplicationClientFactory clientFactory) { this.clientFactory = clientFactory; + this.place = place; } @Override public void start(final AcceptsOneWidget panel, EventBus eventBus) { panel.setWidget(userManagementView); - WrappedPlaceManagementController userManagementController = new AuthenticationPlaceManagementController( + final AuthenticationPlaceManagementController userManagementController = new AuthenticationPlaceManagementController( new AuthenticationClientFactoryImpl(clientFactory.getAuthenticationManager(), SharedResources.INSTANCE), new AuthenticationCallbackImpl(clientFactory.getNavigator().getUserProfileNavigation(), - new SignInSuccessfulNavigationMobile()), + () -> History.back()), userManagementView, eventBus); - userManagementController.start(); + userManagementController.goTo(place.getRequestedPlace()); } - - private class SignInSuccessfulNavigationMobile implements Runnable { - @Override - public void run() { - History.back(); - } - } - + } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationPlace.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationPlace.java index 61ad9c061da..71989b3a899 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationPlace.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/mobile/places/user/authentication/AuthenticationPlace.java @@ -6,14 +6,25 @@ import com.google.gwt.place.shared.Prefix; import com.sap.sailing.gwt.home.shared.app.HasLocationTitle; import com.sap.sailing.gwt.home.shared.app.HasMobileVersion; import com.sap.sailing.gwt.home.shared.places.PlaceTokenPrefixes; +import com.sap.sse.security.ui.authentication.AuthenticationPlaces; import com.sap.sse.security.ui.client.i18n.StringMessages; public class AuthenticationPlace extends Place implements HasMobileVersion, HasLocationTitle { + + private final AuthenticationPlaces requestedPlace; + + public AuthenticationPlace(AuthenticationPlaces requestedPlace) { + this.requestedPlace = requestedPlace; + } @Override public String getLocationTitle() { return StringMessages.INSTANCE.user(); } + + public AuthenticationPlaces getRequestedPlace() { + return requestedPlace; + } @Prefix(PlaceTokenPrefixes.UserAuthentication) public static class Tokenizer implements PlaceTokenizer { @@ -24,7 +35,7 @@ public class AuthenticationPlace extends Place implements HasMobileVersion, HasL @Override public AuthenticationPlace getPlace(String token) { - return new AuthenticationPlace(); + return new AuthenticationPlace(AuthenticationPlaces.SIGN_IN); } } diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml index bfaf45aa04c..cc87c47267e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/partials/fullscreen/FullscreenContainer.ui.xml @@ -51,11 +51,19 @@ padding: 10px; vertical-align: top; } - button.toolbarAction { - background-color: transparent; + a.toolbarAction, button.toolbarAction { border-radius: initial; font-size: 1.25em; } + a.toolbarAction { + color: #fff; + text-decoration: none; + outline: none; + padding-top: 0.666666666666667em + } + button.toolbarAction { + background-color: transparent; + } .toolbarBusyIndicator { display: inline-block; height: 50px; diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java new file mode 100644 index 00000000000..fd3669a7434 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformation.java @@ -0,0 +1,29 @@ +package com.sap.sailing.gwt.home.shared.places.morelogininformation; + +import com.google.gwt.dom.client.Element; +import com.google.gwt.uibinder.client.UiBinder; +import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.Event; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.UIObject; +import com.google.gwt.user.client.ui.Widget; + +public class AbstractMoreLoginInformation extends Composite implements MoreLoginInformationView { + + @UiField + public Element registerControl; + + protected AbstractMoreLoginInformation(UiBinder uiBinder, + Runnable registerCallback) { + initWidget(uiBinder.createAndBindUi(this)); + DOM.sinkEvents(registerControl, Event.ONCLICK); + Event.setEventListener(registerControl, event -> registerCallback.run()); + } + + @Override + public final void setRegisterControlVisible(boolean visible) { + UIObject.setVisible(registerControl, visible); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java new file mode 100644 index 00000000000..1e0c1e6a087 --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/AbstractMoreLoginInformationActivity.java @@ -0,0 +1,41 @@ +package com.sap.sailing.gwt.home.shared.places.morelogininformation; + +import java.util.Objects; + +import com.google.gwt.activity.shared.AbstractActivity; +import com.google.gwt.activity.shared.Activity; +import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.client.ui.AcceptsOneWidget; +import com.sap.sse.security.ui.authentication.WithUserService; +import com.sap.sse.security.ui.client.UserService; +import com.sap.sse.security.ui.client.UserStatusEventHandler; + +/** + * Abstract {@link Activity activity} implementation for {@link MoreLoginInformationView}s. + */ +public class AbstractMoreLoginInformationActivity extends AbstractActivity { + + private final WithUserService clientFactory; + private final MoreLoginInformationView view; + + /** + * Creates new {@link AbstractMoreLoginInformationActivity} instance for the provided view using the given factory. + * + * @param clientFactory + * {@link WithUserService client factory} providing access to the {@link UserService} + * @param view + * the {@link MoreLoginInformationView} to show + */ + protected AbstractMoreLoginInformationActivity(WithUserService clientFactory, MoreLoginInformationView view) { + this.clientFactory = clientFactory; + this.view = view; + } + + @Override + public final void start(AcceptsOneWidget panel, EventBus eventBus) { + final UserStatusEventHandler handler = user -> view.setRegisterControlVisible(Objects.isNull(user)); + this.clientFactory.getUserService().addUserStatusEventHandler(handler, true); + panel.setWidget(view); + } + +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java new file mode 100644 index 00000000000..4a44fa568ee --- /dev/null +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/shared/places/morelogininformation/MoreLoginInformationView.java @@ -0,0 +1,17 @@ +package com.sap.sailing.gwt.home.shared.places.morelogininformation; + +import com.google.gwt.user.client.ui.IsWidget; + +/** + * Interface for views containing information about benefits of signing in on SAP Sailing Analytics. + */ +public interface MoreLoginInformationView extends IsWidget { + + /** + * Show or hide the control leading to register form (usually based on login state). + * + * @param visible + * true to show register control, false to hide + */ + void setRegisterControlVisible(boolean visible); +} diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java index 21b4d544a58..583848c0da2 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.java @@ -1897,6 +1897,7 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages, String moreLoginInformationSectionStrategySimulatorDescription(); String moreLoginInformationSectionUserNotificationsHeading(); String moreLoginInformationSectionUserNotificationsDescription(); + String moreLoginInformationRegisterControlText(); String anniversaryUnitText(@Optional @PluralCount(DefaultRule_1_0n.class) int count); String anniversaryMajorCountdownTeaser(@PluralCount(DefaultRule_1_0n.class) int countdown, int anniversary); String anniversaryMajorCountdownDescription(int anniversary); diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties index 23b2515c3c8..83a01d1506d 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages.properties @@ -1879,6 +1879,7 @@ moreLoginInformationSectionUserSettingsDescription=Many parts of the user interf moreLoginInformationSectionStrategySimulatorDescription=The simulator enables sailors to simulate strategies for legs based on configurable wind conditions. The simulator is based on all the historical data available in SAP Sailing Analytics to provide simulations on the accurate behavior of specific boat classes. moreLoginInformationSectionUserNotificationsHeading=User Notifications moreLoginInformationSectionUserNotificationsDescription=User notifications are an easy way to keep you up to date about your favorite competitor/team or boat class. You can subscribe for mail-based notifications about new results for your favorite sailor/team or boat class as well as upcoming races of specific boat classes. +moreLoginInformationRegisterControlText=Sign up now anniversaryUnitText=Races anniversaryUnitText[one]=Race anniversaryMajorCountdownTeaser=Countdown! Only {0,number,#,###} races left until the {1,number,#,###}th race. diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties index cea5ffe233c..09eedb46ab8 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_de.properties @@ -1883,6 +1883,7 @@ moreLoginInformationSectionUserSettingsDescription=Viele Teile der Benutzeroberf moreLoginInformationSectionStrategySimulatorDescription=Der Simulator ermöglicht es Seglern, Strategien für die Bewältigung von Bahnschenkeln anhand einer einstellbaren Windsituation zu simulieren. Die Simulation basiert auf den historischen Daten, über welche die SAP Sailing Analytics verfügt und ermöglich damit realitätsnahe Analysen auf Basis spezifischer Bootsklassen. moreLoginInformationSectionUserNotificationsHeading=Benachrichtigungen moreLoginInformationSectionUserNotificationsDescription=Benachrichtigungen sind eine einfache Möglichkeit, über einen Teilnehmer/ein Team oder eine Bootsklasse auf dem Laufenden zu bleiben. Mail-Benachrichtigungen für neue Ergebnisse von Lieblings-Seglern oder Bootsklassen sowie demnächst startende Rennen spezifischer Bootsklassen können abonniert werden. +moreLoginInformationRegisterControlText=Jetzt registrieren anniversaryUnitText=Rennen anniversaryUnitText[one]=Rennen anniversaryMajorCountdownTeaser=Countdown! Noch {0,number,#,###} Rennen bis zum {1,number,#,###}. Rennen. 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 1a2194b78d7..7cb6d13da23 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 @@ -159,7 +159,7 @@ public class AuthenticationManagerImpl implements AuthenticationManager { @Override public void logout() { userService.logout(); - eventBus.fireEvent(new AuthenticationRequestEvent()); + eventBus.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN)); } @Override diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaceManagementController.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaceManagementController.java index 9b0cc73506d..977c0cb813d 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaceManagementController.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaceManagementController.java @@ -24,6 +24,8 @@ import com.sap.sse.security.ui.authentication.view.AuthenticationView; */ public class AuthenticationPlaceManagementController extends WrappedPlaceManagementController { + private final AuthenticationClientFactory clientFactory; + /** * Creates a new {@link AuthenticationPlaceManagementController} instance with the given parameters. * @@ -35,14 +37,25 @@ public class AuthenticationPlaceManagementController extends WrappedPlaceManagem public AuthenticationPlaceManagementController(AuthenticationClientFactory clientFactory, AuthenticationCallback callback, AuthenticationView authenticationView, EventBus globalEventBus) { super(new Configuration(clientFactory, callback, authenticationView)); - globalEventBus.addHandler(AuthenticationContextEvent.TYPE, new AuthenticationContextEvent.Handler() { - @Override - public void onUserChangeEvent(AuthenticationContextEvent event) { - AuthenticationPlaceManagementController.this.fireEvent(event); - } - }); + this.clientFactory = clientFactory; + globalEventBus.addHandler(AuthenticationContextEvent.TYPE, this::fireEvent); } - + + /** + * Tells the wrapped framework to go to the {@link Place} represented by the given {@link AuthenticationPlaces} + * instance is no user is logged in. Otherwise the wrapped framework will go to the {@link LoggedInUserInfoPlace + * user info} page. + * + * @param authPlace + * {@link AuthenticationPlaces} instance representing a {@link Place} instance to go to + * + * @see #goTo(Place) + */ + public void goTo(AuthenticationPlaces authPlace) { + final boolean isLoggedIn = clientFactory.getAuthenticationManager().getAuthenticationContext().isLoggedIn(); + super.goTo(isLoggedIn ? new LoggedInUserInfoPlace() : authPlace.getPlace()); + } + private static class Configuration implements PlaceManagementConfiguration { private final AuthenticationClientFactory clientFactory; private final AuthenticationCallback callback; diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaces.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaces.java new file mode 100644 index 00000000000..f6f0ef00f70 --- /dev/null +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationPlaces.java @@ -0,0 +1,31 @@ +package com.sap.sse.security.ui.authentication; + +import java.util.function.Supplier; + +import com.sap.sse.security.ui.authentication.create.CreateAccountPlace; +import com.sap.sse.security.ui.authentication.signin.SignInPlace; + +/** + * Enumeration to specify a requested {@link AbstractAuthenticationPlace authentication places}. + */ +public enum AuthenticationPlaces { + + /** {@link AuthenticationPlaces} representation for {@link SignInPlace} */ + SIGN_IN(SignInPlace::new), + /** {@link AuthenticationPlaces} representation for {@link CreateAccountPlace} */ + CREATE_ACCOUNT(CreateAccountPlace::new); + + private final Supplier placeSupplier; + + private AuthenticationPlaces(Supplier placeSupplier) { + this.placeSupplier = placeSupplier; + } + + /** + * @return new instance of the {@link AbstractAuthenticationPlace} represented by this {@link AuthenticationPlaces} + */ + public AbstractAuthenticationPlace getPlace() { + return this.placeSupplier.get(); + } + +} diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationRequestEvent.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationRequestEvent.java index a79513eef1a..f520caf2cd7 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationRequestEvent.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/AuthenticationRequestEvent.java @@ -9,10 +9,19 @@ import com.google.gwt.event.shared.GwtEvent; public class AuthenticationRequestEvent extends GwtEvent { public static final Type TYPE = new Type(); + private final AuthenticationPlaces requestedPlace; + + public AuthenticationRequestEvent(AuthenticationPlaces requestedPlace) { + this.requestedPlace = requestedPlace; + } + public interface Handler extends EventHandler { void onUserManagementRequestEvent(AuthenticationRequestEvent event); } - + + public AuthenticationPlaces getRequestedPlace() { + return requestedPlace; + } @Override public Type getAssociatedType() { diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java index d01827a0517..a5f3f23f0b5 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/decorator/FlyoutNotLoggedInPresenter.java @@ -1,6 +1,7 @@ package com.sap.sse.security.ui.authentication.decorator; import com.google.web.bindery.event.shared.EventBus; +import com.sap.sse.security.ui.authentication.AuthenticationPlaces; import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent; /** @@ -19,6 +20,6 @@ public class FlyoutNotLoggedInPresenter implements NotLoggedInPresenter { @Override public void doTriggerLoginForm() { - eventBus.fireEvent(new AuthenticationRequestEvent()); + eventBus.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN)); } } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/info/LoggedInUserInfoActivity.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/info/LoggedInUserInfoActivity.java index 9d691a77fcb..4ba1d321c69 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/info/LoggedInUserInfoActivity.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/info/LoggedInUserInfoActivity.java @@ -7,6 +7,7 @@ import com.google.gwt.user.client.ui.AcceptsOneWidget; import com.sap.sse.security.ui.authentication.AuthenticationCallback; import com.sap.sse.security.ui.authentication.AuthenticationClientFactory; import com.sap.sse.security.ui.authentication.AuthenticationContextEvent; +import com.sap.sse.security.ui.authentication.AuthenticationPlaces; import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent; import com.sap.sse.security.ui.authentication.signin.SignInPlace; @@ -45,7 +46,7 @@ public class LoggedInUserInfoActivity extends AbstractActivity implements Logged @Override public void gotoProfileUi() { - eventBus.fireEvent(new AuthenticationRequestEvent()); + eventBus.fireEvent(new AuthenticationRequestEvent(AuthenticationPlaces.SIGN_IN)); callback.handleUserProfileNavigation(); } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/view/FlyoutAuthenticationPresenter.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/view/FlyoutAuthenticationPresenter.java index d807290ba4a..48f8b9298da 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/view/FlyoutAuthenticationPresenter.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/authentication/view/FlyoutAuthenticationPresenter.java @@ -2,9 +2,11 @@ package com.sap.sse.security.ui.authentication.view; import com.google.web.bindery.event.shared.EventBus; import com.sap.sse.security.ui.authentication.AuthenticationContextEvent; +import com.sap.sse.security.ui.authentication.AuthenticationPlaceManagementController; import com.sap.sse.security.ui.authentication.AuthenticationRequestEvent; import com.sap.sse.security.ui.authentication.WrappedPlaceManagementController; import com.sap.sse.security.ui.authentication.app.AuthenticationContext; +import com.sap.sse.security.ui.authentication.create.CreateAccountPlace; /** * Default implementation of {@link AuthenticationMenuView.Presenter} and {@link FlyoutAuthenticationView.Presenter} to @@ -33,7 +35,7 @@ public class FlyoutAuthenticationPresenter implements AuthenticationMenuView.Pre */ public FlyoutAuthenticationPresenter(final FlyoutAuthenticationView flyoutAuthenticationView, final AuthenticationMenuView authenticationMenuView, - WrappedPlaceManagementController authenticationPlaceManagementController, + AuthenticationPlaceManagementController authenticationPlaceManagementController, EventBus eventBus, AuthenticationContext initialAuthentication) { this.flyoutAuthenticationView = flyoutAuthenticationView; this.authenticationMenuView = authenticationMenuView; @@ -44,11 +46,9 @@ public class FlyoutAuthenticationPresenter implements AuthenticationMenuView.Pre authenticationMenuView.setPresenter(this); flyoutAuthenticationView.setAutoHidePartner(authenticationMenuView); - eventBus.addHandler(AuthenticationRequestEvent.TYPE, new AuthenticationRequestEvent.Handler() { - @Override - public void onUserManagementRequestEvent(AuthenticationRequestEvent event) { - toggleFlyout(); - } + eventBus.addHandler(AuthenticationRequestEvent.TYPE, event -> { + flyoutAuthenticationView.show(); + authenticationPlaceManagementController.goTo(event.getRequestedPlace()); }); eventBus.addHandler(AuthenticationContextEvent.TYPE, new AuthenticationContextEvent.Handler() { @@ -60,6 +60,14 @@ public class FlyoutAuthenticationPresenter implements AuthenticationMenuView.Pre authenticationMenuView.setAuthenticated(initialAuthentication.isLoggedIn()); } + public void showRegister() { + if (!flyoutAuthenticationView.isShowing()) { + flyoutAuthenticationView.show(); + authenticationPlaceManagementController.start(); + authenticationPlaceManagementController.goTo(new CreateAccountPlace()); + } + } + @Override public void toggleFlyout() { if (flyoutAuthenticationView.isShowing()) {