private void prepareViews()
        {
            NavigationController.NavigationBarHidden = false;

            ResetPasswordButton.SetTitleColor(
                Core.UI.Helper.Colors.Login.DisabledButtonColor.ToNativeColor(),
                UIControlState.Disabled
                );

            EmailTextField.BecomeFirstResponder();
            EmailTextField.Rx().ShouldReturn()
            .Subscribe(ViewModel.Reset.Inputs)
            .DisposedBy(DisposeBag);

            ActivityIndicator.StartSpinning();

            ErrorLabel.Hidden = true;
        }
        private void SetShouldReturnDelegates()
        {
            FirstNameTextField.ShouldReturn += (textField) =>
            {
                LastNameTextField.BecomeFirstResponder();
                return(true);
            };

            LastNameTextField.ShouldReturn += (textField) =>
            {
                EmailTextField.BecomeFirstResponder();
                return(true);
            };

            EmailTextField.ShouldReturn += (textField) =>
            {
                View.EndEditing(true);
                AddUserButton.BecomeFirstResponder();
                return(true);
            };
        }
Beispiel #3
0
        public override void ViewWillAppear(bool animated)
        {
            base.ViewWillAppear(animated);
            var timer = new System.Timers.Timer();

            timer.Interval = 50;

            timer.Elapsed += delegate
            {
                timer.Stop();
                timer.Dispose();
                InvokeOnMainThread(() =>
                {
                    if (!String.IsNullOrEmpty(email_value))
                    {
                        EmailTextField.BecomeFirstResponder();
                        EmailTextField.Text = email_value;
                    }
                });
            };
            timer.Start();
        }
        private void InitViewModel()
        {
            FirstNameTextField.EditingChanged += (sender, e) => { };
            LastNameTextField.EditingChanged  += (sender, e) => { };
            EmailTextField.EditingChanged     += (sender, e) => { };

            this.SetBinding(() => ViewModel.User.Name, () => FirstNameTextField.Text, BindingMode.TwoWay).ObserveTargetEvent("EditingChanged");
            this.SetBinding(() => ViewModel.User.LastName, () => LastNameTextField.Text, BindingMode.TwoWay).ObserveTargetEvent("EditingChanged");
            this.SetBinding(() => ViewModel.User.Email, () => EmailTextField.Text, BindingMode.TwoWay).ObserveTargetEvent("EditingChanged");

            ViewModel.OnFirstNameValidation += (string error) =>
            {
                FirstNameTextField.BecomeFirstResponder();
                this.ShowError(error);
            };

            ViewModel.OnLastNameValidation += (string error) =>
            {
                LastNameTextField.BecomeFirstResponder();
                this.ShowError(error);
            };
            ViewModel.OnEmailNameValidation += (string error) =>
            {
                EmailTextField.BecomeFirstResponder();
                this.ShowError(error);
            };
            ViewModel.OnUnexpectedError += (string error) =>
            {
                FirstNameTextField.BecomeFirstResponder();
                this.ShowError(error);
            };

            ViewModel.OnError += (string error) =>
            {
                FirstNameTextField.BecomeFirstResponder();
                this.ShowError(error);
            };
        }
Beispiel #5
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            Title = ViewModel.Title;

            prepareTextFields();

            UIKeyboard.Notifications.ObserveWillShow(keyboardWillShow);
            UIKeyboard.Notifications.ObserveWillHide(keyboardWillHide);

            NavigationItem.LeftBarButtonItem =
                new UIBarButtonItem {
                Title = Resources.LoginBackButton, TintColor = UIColor.White
            };

            NavigationItem.RightBarButtonItem =
                new UIBarButtonItem {
                Title = Resources.LoginNextButton, TintColor = UIColor.White
            };

            var bindingSet = this.CreateBindingSet <LoginViewController, LoginViewModel>();

            //Text
            bindingSet.Bind(EmailTextField).To(vm => vm.Email);
            bindingSet.Bind(PasswordTextField).To(vm => vm.Password);
            bindingSet.Bind(ErrorLabel).To(vm => vm.ErrorText);
            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindSecureTextEntry())
            .To(vm => vm.IsPasswordMasked);

            //Commands
            bindingSet.Bind(NavigationItem.LeftBarButtonItem)
            .For(v => v.BindCommand())
            .To(vm => vm.BackCommand);

            bindingSet.Bind(NavigationItem.RightBarButtonItem)
            .For(v => v.BindCommand())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(ShowPasswordButton)
            .For(v => v.BindTap())
            .To(vm => vm.TogglePasswordVisibilityCommand);

            bindingSet.Bind(PasswordManagerButton)
            .For(v => v.BindTap())
            .To(vm => vm.StartPasswordManagerCommand);

            //Enabled
            bindingSet.Bind(NavigationItem.RightBarButtonItem)
            .For(v => v.BindAnimatedEnabled())
            .To(vm => vm.NextIsEnabled);

            //Visibility
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.IsEmailPage);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.IsPasswordPage);

            bindingSet.Bind(ShowPasswordButton)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.ShowPasswordButtonVisible);

            bindingSet.Bind(ErrorLabel)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.HasError);

            bindingSet.Bind(ActivityIndicator)
            .For(v => v.BindVisible())
            .To(vm => vm.IsLoading);

            if (ViewModel.IsPasswordManagerAvailable)
            {
                bindingSet.Bind(PasswordManagerButton)
                .For(v => v.BindAnimatedVisibility())
                .To(vm => vm.IsEmailPage);
            }
            else
            {
                PasswordManagerButton.Hidden = true;
            }

            //State
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindFocus())
            .To(vm => vm.IsEmailPage);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindFocus())
            .To(vm => vm.IsPasswordPage);

            bindingSet.Apply();

            EmailTextField.BecomeFirstResponder();
        }
        public override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);

            EmailTextField.BecomeFirstResponder();
        }
Beispiel #7
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            Title = Resources.LoginForgotPassword;
            ResetPasswordButton.SetTitle(Resources.GetPasswordResetLink, UIControlState.Normal);
            EmailTextField.Placeholder = Resources.EmailAddress;
            SuccessMessageLabel.Text   = Resources.PasswordResetSuccess;

            prepareViews();

            //Text
            ViewModel.ErrorMessage
            .Subscribe(errorMessage =>
            {
                ErrorLabel.Text   = errorMessage;
                ErrorLabel.Hidden = string.IsNullOrEmpty(errorMessage);
            })
            .DisposedBy(DisposeBag);

            EmailTextField.Rx().Text()
            .Select(Email.From)
            .Subscribe(ViewModel.Email.OnNext)
            .DisposedBy(DisposeBag);

            ViewModel.Reset.Executing
            .Subscribe(loading =>
            {
                UIView.Transition(
                    ResetPasswordButton,
                    Animation.Timings.EnterTiming,
                    UIViewAnimationOptions.TransitionCrossDissolve,
                    () => ResetPasswordButton.SetTitle(loading ? "" : Resources.GetPasswordResetLink, UIControlState.Normal),
                    null
                    );
            })
            .DisposedBy(DisposeBag);

            //Visibility
            ViewModel.PasswordResetSuccessful
            .Subscribe(DoneCard.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);

            ViewModel.PasswordResetSuccessful
            .Invert()
            .Subscribe(ResetPasswordButton.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);

            ViewModel.PasswordResetSuccessful
            .Where(s => s == false)
            .Subscribe(_ => EmailTextField.BecomeFirstResponder())
            .DisposedBy(DisposeBag);

            ViewModel.Reset.Executing
            .Subscribe(ActivityIndicator.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);

            //Commands
            ResetPasswordButton.Rx()
            .BindAction(ViewModel.Reset)
            .DisposedBy(DisposeBag);
        }
Beispiel #8
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            InitElements();

            backBn.TouchUpInside += (s, e) =>
            {
                this.NavigationController.PopViewController(true);
            };
            if (!methods.IsConnected())
            {
                NoConnectionViewController.view_controller_name = GetType().Name;
                this.NavigationController.PushViewController(storyboard.InstantiateViewController(nameof(NoConnectionViewController)), false);
                return;
            }
            nextBn.TouchUpInside += async(s, e) =>
            {
                if (String.IsNullOrEmpty(EmailTextField.Text))
                {
                    UIAlertView alert_empty = new UIAlertView()
                    {
                        Title = "Введите email"
                    };
                    alert_empty.AddButton("OK");
                    alert_empty.Show();
                }
                else
                {
                    try
                    {
                        ConfirmEmailViewControllerNew.email_value = methods.EmailValidation(EmailTextField.Text);

                        activityIndicator.Hidden = false;
                        nextBn.Hidden            = true;
                        var    deviceName = UIDevice.CurrentDevice.Name;//IdentifierForVendor.ToString();
                        var    UDID       = UIDevice.CurrentDevice.IdentifierForVendor.ToString();
                        string res        = null;
                        try
                        {
                            res = await accountActions.AccountVerification(deviceName, EmailTextField.Text.ToLower(), UDID);
                        }
                        catch
                        {
                            if (!methods.IsConnected())
                            {
                                InvokeOnMainThread(() =>
                                {
                                    NoConnectionViewController.view_controller_name = GetType().Name;
                                    this.NavigationController.PushViewController(storyboard.InstantiateViewController(nameof(NoConnectionViewController)), false);
                                    return;
                                });
                            }
                            return;
                        }
                        Analytics.TrackEvent($"{deviceName} {res}");

                        activityIndicator.Hidden = true;
                        nextBn.Hidden            = false;
                        string      error_message = "";
                        UIAlertView alert         = new UIAlertView()
                        {
                            Title   = "Ошибка",
                            Message = "Что-то пошло не так."
                        };
                        if (res.ToLower().Contains(Constants.alreadyDone.ToLower()))
                        {
                            var possibleRepeat = TimeZone.CurrentTimeZone.ToLocalTime(databaseMethods.GetRepeatAfter());
                            var hour           = possibleRepeat.Hour.ToString();
                            var minute         = possibleRepeat.Minute.ToString();
                            var second         = possibleRepeat.Second.ToString();
                            if (hour.Length < 2)
                            {
                                hour = "0" + hour;
                            }
                            if (minute.Length < 2)
                            {
                                minute = "0" + minute;
                            }
                            if (second.Length < 2)
                            {
                                second = "0" + second;
                            }
                            alert.Message = "Запрос был выполнен ранее. Следующий можно будет выполнить после "
                                            + hour + ":" + minute + ":" + second;
                            alert.AddButton("OK");
                            alert.Show();
                            return;
                        }
                        if (res.Contains("SubscriptionConstraint") || String.IsNullOrEmpty(res))
                        {
                            error_message = "_";
                            var vc = storyboard.InstantiateViewController(nameof(EmailAlreadyRegisteredViewController));
                            this.NavigationController.PushViewController(vc, true);
                        }
                        else if (res.Contains("The Email field is not a valid e-mail address"))
                        {
                            error_message = "Неверный формат почты";
                        }
                        if (!String.IsNullOrEmpty(error_message))
                        {
                            if (!error_message.Contains("_"))
                            {
                                alert = new UIAlertView()
                                {
                                    Title   = "Ошибка",
                                    Message = error_message
                                };
                                alert.AddButton("OK");
                                alert.Show();
                            }
                        }
                        if (res.Contains("actionJwt"))
                        {
                            var deserialized_value = JsonConvert.DeserializeObject <AccountVerificationModel>(res);
                            databaseMethods.InsertActionJwt(deserialized_value.actionJwt);
                            Analytics.TrackEvent($"{"actionJwt:"} {deserialized_value.actionJwt}");
                            EmailViewControllerNew.actionToken = deserialized_value.actionToken;
                            EmailViewControllerNew.repeatAfter = deserialized_value.repeatAfter;
                            EmailViewControllerNew.validTill   = deserialized_value.validTill;
                            databaseMethods.InsertValidTillRepeatAfter(EmailViewControllerNew.validTill, EmailViewControllerNew.repeatAfter, ConfirmEmailViewControllerNew.email_value);
                            var vc = storyboard.InstantiateViewController(nameof(WaitingEmailConfirmViewController));
                            this.NavigationController.PushViewController(vc, true);
                        }
                    }
                    catch
                    {
                        UIAlertView alert_empty = new UIAlertView()
                        {
                            Title = "Email некорректен"
                        };
                        alert_empty.AddButton("OK");
                        alert_empty.Show();
                    }
                }
            };
            EmailTextField.EditingChanged += (s, e) =>
            {
                email_value = EmailTextField.Text;
            };

            email_value = databaseMethods.GetEmailFromValidTill_RepeatAfter();
            var timer = new System.Timers.Timer();

            timer.Interval = 400;
            timer.Elapsed += delegate
            {
                timer.Stop();
                timer.Dispose();
                InvokeOnMainThread(() =>
                {
                    if (!String.IsNullOrEmpty(email_value))
                    {
                        EmailTextField.BecomeFirstResponder();
                        EmailTextField.Text = email_value;
                    }
                });
            };
            timer.Start();
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            var invertedBoolConverter = new BoolToConstantValueConverter <bool>(false, true);

            var bindingSet = this.CreateBindingSet <LoginViewController, LoginViewModel>();

            //Text
            bindingSet.Bind(EmailTextField)
            .To(vm => vm.Email)
            .WithConversion(new EmailToStringValueConverter());

            bindingSet.Bind(PasswordTextField)
            .To(vm => vm.Password)
            .WithConversion(new PasswordToStringValueConverter());

            bindingSet.Bind(InfoLabel).To(vm => vm.InfoText);
            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindSecureTextEntry())
            .To(vm => vm.IsPasswordMasked);

            bindingSet.Bind(GoogleSignInButton)
            .For(v => v.BindTitle())
            .To(vm => vm.GoogleButtonText);

            bindingSet.Bind(this)
            .For(v => v.Title)
            .To(vm => vm.Title);

            //Commands
            bindingSet.Bind(GoogleSignInButton).To(vm => vm.GoogleLoginCommand);
            bindingSet.Bind(ForgotPasswordButton).To(vm => vm.ForgotPasswordCommand);
            bindingSet.Bind(PrivacyPolicyButton).To(vm => vm.OpenPrivacyPolicyCommand);
            bindingSet.Bind(TermsOfServiceButton).To(vm => vm.OpenTermsOfServiceCommand);

            bindingSet.Bind(backButton)
            .For(v => v.BindCommand())
            .To(vm => vm.BackCommand);

            bindingSet.Bind(nextButton)
            .For(v => v.BindCommand())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(ShowPasswordButton)
            .For(v => v.BindTap())
            .To(vm => vm.TogglePasswordVisibilityCommand);

            bindingSet.Bind(PasswordManagerButton)
            .For(v => v.BindTap())
            .To(vm => vm.StartPasswordManagerCommand);

            bindingSet.Bind(TryLoggingInInsteadButton)
            .For(v => v.BindTap())
            .To(vm => vm.ChangeSignUpToLoginCommand);

            //Enabled
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindShouldReturn())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindShouldReturn())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(nextButton)
            .For(v => v.Enabled)
            .To(vm => vm.NextIsEnabled);

            bindingSet.Bind(backButton)
            .For(v => v.Enabled)
            .To(vm => vm.IsLoading)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(ForgotPasswordButton)
            .For(v => v.Enabled)
            .To(vm => vm.IsLoading)
            .WithConversion(invertedBoolConverter);

            //Visibility
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.EmailFieldVisible);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.IsPasswordPage);

            bindingSet.Bind(ShowPasswordButton)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.ShowPasswordButtonVisible);

            bindingSet.Bind(InfoLabel)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.HasInfoText);

            bindingSet.Bind(ActivityIndicator)
            .For(v => v.BindVisible())
            .To(vm => vm.IsLoading);

            bindingSet.Bind(ForgotPasswordButton)
            .For(v => v.BindVisible())
            .To(vm => vm.ShowForgotPassword);

            bindingSet.Bind(SignUpLabels)
            .For(v => v.BindVisible())
            .To(vm => vm.IsSignUp);

            bindingSet.Bind(PasswordManagerButton)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.PasswordManagerVisible);

            bindingSet.Bind(TryLoggingInInsteadButton)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.TryLoggingInInsteadOfSignup);

            //State
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindFocus())
            .To(vm => vm.IsEmailFocused);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindFocus())
            .To(vm => vm.IsPasswordPage);

            bindingSet.Apply();

            EmailTextField.BecomeFirstResponder();

            willEnterForegroundNotification = UIApplication.Notifications.ObserveWillEnterForeground((sender, e) => startAnimations());
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            prepareViews();

            UIKeyboard.Notifications.ObserveWillShow(keyboardWillShow);
            UIKeyboard.Notifications.ObserveWillHide(keyboardWillHide);

            var invertedBoolConverter = new BoolToConstantValueConverter <bool>(false, true);

            var bindingSet = this.CreateBindingSet <LoginViewController, LoginViewModel>();

            //Text
            bindingSet.Bind(EmailTextField).To(vm => vm.Email);
            bindingSet.Bind(PasswordTextField).To(vm => vm.Password);
            bindingSet.Bind(InfoLabel).To(vm => vm.InfoText);
            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindSecureTextEntry())
            .To(vm => vm.IsPasswordMasked);

            bindingSet.Bind(this)
            .For(v => v.Title)
            .To(vm => vm.Title);

            //Commands
            bindingSet.Bind(ForgotPasswordButton).To(vm => vm.ForgotPasswordCommand);
            bindingSet.Bind(PrivacyPolicyButton).To(vm => vm.OpenPrivacyPolicyCommand);
            bindingSet.Bind(TermsOfServiceButton).To(vm => vm.OpenTermsOfServiceCommand);

            bindingSet.Bind(backButton)
            .For(v => v.BindCommand())
            .To(vm => vm.BackCommand);

            bindingSet.Bind(nextButton)
            .For(v => v.BindCommand())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(ShowPasswordButton)
            .For(v => v.BindTap())
            .To(vm => vm.TogglePasswordVisibilityCommand);

            bindingSet.Bind(PasswordManagerButton)
            .For(v => v.BindTap())
            .To(vm => vm.StartPasswordManagerCommand);

            //Enabled
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindShouldReturn())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindShouldReturn())
            .To(vm => vm.NextCommand);

            bindingSet.Bind(nextButton)
            .For(v => v.Enabled)
            .To(vm => vm.NextIsEnabled);

            bindingSet.Bind(backButton)
            .For(v => v.Enabled)
            .To(vm => vm.IsLoading)
            .WithConversion(invertedBoolConverter);

            bindingSet.Bind(ForgotPasswordButton)
            .For(v => v.Enabled)
            .To(vm => vm.IsLoading)
            .WithConversion(invertedBoolConverter);

            //Visibility
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.EmailFieldVisible);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.IsPasswordPage);

            bindingSet.Bind(ShowPasswordButton)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.ShowPasswordButtonVisible);

            bindingSet.Bind(InfoLabel)
            .For(v => v.BindAnimatedVisibility())
            .To(vm => vm.HasInfoText);

            bindingSet.Bind(ActivityIndicator)
            .For(v => v.BindVisible())
            .To(vm => vm.IsLoading);

            bindingSet.Bind(ForgotPasswordButton)
            .For(v => v.BindVisible())
            .To(vm => vm.ShowForgotPassword);

            bindingSet.Bind(SignUpLabels)
            .For(v => v.BindVisible())
            .To(vm => vm.IsSignUp);

            if (ViewModel.IsPasswordManagerAvailable)
            {
                bindingSet.Bind(PasswordManagerButton)
                .For(v => v.BindAnimatedVisibility())
                .To(vm => vm.IsEmailPage);
            }
            else
            {
                PasswordManagerButton.Hidden = true;
            }

            //State
            bindingSet.Bind(EmailTextField)
            .For(v => v.BindFocus())
            .To(vm => vm.IsEmailPage);

            bindingSet.Bind(PasswordTextField)
            .For(v => v.BindFocus())
            .To(vm => vm.IsPasswordPage);

            bindingSet.Apply();

            EmailTextField.BecomeFirstResponder();
        }