public override void ViewDidLoad() { base.ViewDidLoad(); EmailTextField.Placeholder = Resources.EmailAddress; PasswordTextField.Placeholder = Resources.Password; OrLabel.Text = Resources.Or.ToUpper(); LoginButton.SetTitle(Resources.LoginTitle, UIControlState.Normal); GoogleLoginButton.SetTitle(Resources.GoogleLogin, UIControlState.Normal); DontHaveAnAccountLabel.Text = Resources.DoNotHaveAnAccountWithQuestionMark; SignUpForFreeLabel.Text = Resources.SignUpTitle; NavigationController.NavigationBarHidden = true; UIKeyboard.Notifications.ObserveWillShow(KeyboardWillShow); UIKeyboard.Notifications.ObserveWillHide(KeyboardWillHide); //Text ViewModel.Email .Subscribe(EmailTextField.Rx().TextObserver()) .DisposedBy(DisposeBag); ViewModel.ErrorMessage .Subscribe(ErrorLabel.Rx().Text()) .DisposedBy(DisposeBag); ViewModel.Password .Subscribe(PasswordTextField.Rx().TextObserver()) .DisposedBy(DisposeBag); EmailTextField.Rx().Text() .Select(Email.From) .Subscribe(ViewModel.SetEmail) .DisposedBy(DisposeBag); PasswordTextField.Rx().Text() .Select(Password.From) .Subscribe(ViewModel.SetPassword) .DisposedBy(DisposeBag); ViewModel.IsLoading.Select(loginButtonTitle) .Subscribe(LoginButton.Rx().AnimatedTitle()) .DisposedBy(DisposeBag); //Visibility ViewModel.HasError .Subscribe(ErrorLabel.Rx().AnimatedIsVisible()) .DisposedBy(DisposeBag); ViewModel.IsLoading .Subscribe(ActivityIndicator.Rx().IsVisibleWithFade()) .DisposedBy(DisposeBag); ViewModel.IsPasswordMasked .Skip(1) .Subscribe(PasswordTextField.Rx().SecureTextEntry()) .DisposedBy(DisposeBag); ViewModel.IsShowPasswordButtonVisible .Subscribe(ShowPasswordButton.Rx().IsVisible()) .DisposedBy(DisposeBag); PasswordTextField.FirstResponder .Subscribe(ViewModel.SetIsShowPasswordButtonVisible) .DisposedBy(DisposeBag); //Commands SignupCard.Rx() .BindAction(ViewModel.Signup) .DisposedBy(DisposeBag); LoginButton.Rx().Tap() .Subscribe(ViewModel.Login) .DisposedBy(DisposeBag); GoogleLoginButton.Rx().Tap() .Subscribe(ViewModel.GoogleLogin) .DisposedBy(DisposeBag); ForgotPasswordButton.Rx() .BindAction(ViewModel.ForgotPassword) .DisposedBy(DisposeBag); ShowPasswordButton.Rx().Tap() .Subscribe(ViewModel.TogglePasswordVisibility) .DisposedBy(DisposeBag); //Color ViewModel.HasError .Select(loginButtonTintColor) .Subscribe(LoginButton.Rx().TintColor()) .DisposedBy(DisposeBag); ViewModel.LoginEnabled .Select(loginButtonTitleColor) .Subscribe(LoginButton.Rx().TitleColor()) .DisposedBy(DisposeBag); //Animation ViewModel.Shake .Subscribe(shakeTargets => { if (shakeTargets.HasFlag(LoginViewModel.ShakeTargets.Email)) { EmailTextField.Shake(); } if (shakeTargets.HasFlag(LoginViewModel.ShakeTargets.Password)) { PasswordTextField.Shake(); } }) .DisposedBy(DisposeBag); prepareViews(); UIColor loginButtonTintColor(bool hasError) => hasError ? UIColor.White : UIColor.Black; UIColor loginButtonTitleColor(bool enabled) => enabled ? Core.UI.Helper.Colors.Login.EnabledButtonColor.ToNativeColor() : Core.UI.Helper.Colors.Login.DisabledButtonColor.ToNativeColor(); }
void ReleaseDesignerOutlets() { if (ActivityIndicator != null) { ActivityIndicator.Dispose(); ActivityIndicator = null; } if (EmailTextField != null) { EmailTextField.Dispose(); EmailTextField = null; } if (ErrorLabel != null) { ErrorLabel.Dispose(); ErrorLabel = null; } if (ForgotPasswordButton != null) { ForgotPasswordButton.Dispose(); ForgotPasswordButton = null; } if (GoogleLoginButton != null) { GoogleLoginButton.Dispose(); GoogleLoginButton = null; } if (LoginButton != null) { LoginButton.Dispose(); LoginButton = null; } if (LogoImageView != null) { LogoImageView.Dispose(); LogoImageView = null; } if (PasswordManagerButton != null) { PasswordManagerButton.Dispose(); PasswordManagerButton = null; } if (PasswordTextField != null) { PasswordTextField.Dispose(); PasswordTextField = null; } if (ShowPasswordButton != null) { ShowPasswordButton.Dispose(); ShowPasswordButton = null; } if (SignupCard != null) { SignupCard.Dispose(); SignupCard = null; } if (TopConstraint != null) { TopConstraint.Dispose(); TopConstraint = null; } if (EmailFieldTopConstraint != null) { EmailFieldTopConstraint.Dispose(); EmailFieldTopConstraint = null; } }