using System; using UnityEngine.UIElements; using Codice.Client.Common; using Codice.Client.Common.Authentication; using Codice.Client.Common.WebApi; using Codice.CM.Common; using PlasticGui; using Unity.PlasticSCM.Editor.UI; using Unity.PlasticSCM.Editor.UI.UIElements; using PlasticGui.Configuration.CloudEdition.Welcome; namespace Unity.PlasticSCM.Editor.Configuration.CloudEdition.Welcome { internal class SignInPanel : VisualElement { internal interface IPanelHost { void ReplaceRootPanel(VisualElement panel); } internal interface IUnityIdOAuthFlowStarter { void Start(WaitingSignInPanel waitingPanel, IPlasticWebRestApi restApi); } internal SignInPanel( CloudEditionWelcomeWindow parentWindow, IPlasticWebRestApi restApi) : this(parentWindow, parentWindow, parentWindow, restApi, new DefaultUnityIdOAuthFlowStarter(), new DefaultExternalUrlOpener()) { } internal SignInPanel( IPanelHost panelHost, IWelcomeWindowNotify welcomeNotify, OAuthSignIn.INotify oauthNotify, IPlasticWebRestApi restApi, IUnityIdOAuthFlowStarter oauthFlowStarter, IExternalUrlOpener urlOpener) { mPanelHost = panelHost; mWelcomeNotify = welcomeNotify; mOAuthNotify = oauthNotify; mRestApi = restApi; mOAuthFlowStarter = oauthFlowStarter; mUrlOpener = urlOpener; InitializeLayoutAndStyles(); BuildComponents(); } internal void Dispose() { mSignInWithUnityIdButton.clicked -= SignInWithUnityIdButton_Clicked; mSignInWithEmailButton.clicked -= SignInWithEmailButton_Clicked; mPrivacyPolicyStatementButton.clicked -= PrivacyPolicyStatementButton_Clicked; mSignUpButton.clicked -= SignUpButton_Clicked; if (mSignInWithEmailPanel != null) mSignInWithEmailPanel.Dispose(); if (mWaitingSignInPanel != null) mWaitingSignInPanel.Dispose(); } void SignInWithEmailButton_Clicked() { mSignInWithEmailPanel = new SignInWithEmailPanel(mWelcomeNotify, mRestApi); mPanelHost.ReplaceRootPanel(mSignInWithEmailPanel); } void SignUpButton_Clicked() { mUrlOpener.Open(UnityUrl.DevOps.GetSignUp()); } internal void SignInWithUnityIdButton_Clicked() { mWaitingSignInPanel = new WaitingSignInPanel( mWelcomeNotify, mOAuthNotify, mRestApi); mPanelHost.ReplaceRootPanel(mWaitingSignInPanel); mOAuthFlowStarter.Start(mWaitingSignInPanel, mRestApi); } internal void SignInWithUnityIdButtonAutoLogin() { mWaitingSignInPanel = new WaitingSignInPanel( mWelcomeNotify, mOAuthNotify, mRestApi); mWaitingSignInPanel.OnAutoLogin(); mPanelHost.ReplaceRootPanel(mWaitingSignInPanel); } void PrivacyPolicyStatementButton_Clicked() { mUrlOpener.Open(UnityUrl.DevOps.GetPrivacyPolicy()); } void BuildComponents() { BuildSignUpArea(); BuildSignInUnityIdArea(); BuildSignInEmailArea(); BuildPrivatePolicyArea(); } void BuildPrivatePolicyArea() { this.SetControlText