コード例 #1
0
ファイル: LoginView.cs プロジェクト: PuntusEugene/XmpViaFlexi
        protected override void SetupSubviews()
        {
            base.SetupSubviews();

            BackgroundView = new UIImageView()
            {
                Image = AppImages.Background,
                UserInteractionEnabled = false
            };

            SetNeedsDisplay();

            InvalidCredentialLabel = new UILabel().SetCredentialLabel(Strings.InvalidCredential);

            LoginTextField = new UITextField().SetTextFieldStyle(Strings.Login);
            LoginTextField.ReturnKeyType = UIReturnKeyType.Next;
            LoginTextField.ShouldReturn  = field => PasswordTextField.BecomeFirstResponder();

            PasswordTextField = new UITextField().SetTextFieldStyle(Strings.Password);
            PasswordTextField.SecureTextEntry = true;
            PasswordTextField.ReturnKeyType   = UIReturnKeyType.Done;
            PasswordTextField.ShouldReturn    = field => PasswordTextField.ResignFirstResponder();

            LoginButton = new UIButton().SetPrimaryButtonStyle(Strings.SignIn);

            ActivityIndicatorView = new ActivityIndicatorView(80, 1);
        }
コード例 #2
0
 public override void ViewWillAppear(bool animated)
 {
     base.ViewWillAppear(animated);
     ActivityIndicatorView.Alpha = 0;
     ActivityIndicatorView.StartSpinning();
     PasswordTextField.ResignFirstResponder();
 }
コード例 #3
0
        void ReleaseDesignerOutlets()
        {
            if (ActivityIndicatorView != null)
            {
                ActivityIndicatorView.Dispose();
                ActivityIndicatorView = null;
            }

            if (CreateWorkspaceButton != null)
            {
                CreateWorkspaceButton.Dispose();
                CreateWorkspaceButton = null;
            }

            if (TryAgainButton != null)
            {
                TryAgainButton.Dispose();
                TryAgainButton = null;
            }

            if (HeadingLabel != null)
            {
                HeadingLabel.Dispose();
                HeadingLabel = null;
            }

            if (TextLabel != null)
            {
                TextLabel.Dispose();
                TextLabel = null;
            }
        }
コード例 #4
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            RemoveBackBarButtonTitle();

            ActivityIndicatorView.Hidden = true;
            SaveButton.Hidden            = true;

            TextField.KeyboardType       = UIKeyboardType.Url;
            TextField.Placeholder        = "Website URL";
            TextField.AutocorrectionType = UITextAutocorrectionType.No;
            TextField.BecomeFirstResponder();
            TextField.EditingChanged += (sender, e) =>
            {
                WebView.Hidden    = true;
                SaveButton.Hidden = true;
                HideActivityIndicatorView();
            };
            TextField.EditingDidEndOnExit += (sender, e) =>
            {
                if (String.IsNullOrEmpty(TextField.Text))
                {
                    return;
                }

                URL = TextField.Text.Trim();
                if (!URL.Contains("http"))
                {
                    URL = "http://" + URL;
                }

                if (!StringUtils.IsValidURL(URL))
                {
                    return;
                }

                WebView.Hidden = false;
                WebView.LoadRequest(NSUrlRequest.FromUrl(NSUrl.FromString(URL)));
                ActivityIndicatorView.Hidden = false;
                ActivityIndicatorView.StartAnimating();
            };

            SetProgressButton(SaveButton);

            WebViewSuperViewWidthConstraint.Constant = UIScreen.MainScreen.Bounds.Width - 40;

            WebView.Hidden        = true;
            WebView.LoadFinished += (sender, e) =>
            {
                SaveButton.Hidden = false;
                HideActivityIndicatorView();
            };
        }
コード例 #5
0
        protected override void SetupSubviews()
        {
            base.SetupSubviews();

            ContentView = new UIView {
                BackgroundColor = AppColors.ContentPrimary
            };

            VacationsPager      = new UIView();
            VacationPageControl = new UIPageControl
            {
                Pages = Enum.GetValues(typeof(VacationType)).Length, PageIndicatorTintColor = AppColors.TextBody,
                CurrentPageIndicatorTintColor = AppColors.TextPrimary
            };

            AboveDateSeparator     = new UIView().SetSeparatorStyle();
            DateBeginView          = new LargeDateControl(AppColors.TextPrimary);
            DateEndView            = new LargeDateControl(AppColors.TextSecondary);
            BelowDateSeparator     = new UIView().SetSeparatorStyle();
            StatusSegmentedControl = new UISegmentedControl(Strings.Approved, Strings.Closed)
            {
                TintColor = AppColors.TextSecondary
            };

            StartDatePicker = new UIDatePicker {
                Mode = UIDatePickerMode.Date
            };

            EndDatePicker = new UIDatePicker {
                Mode = UIDatePickerMode.Date
            };

            DatePickerToolbar = new UIToolbar
            {
                BarStyle = UIBarStyle.Default, Translucent = true, TintColor = AppColors.TextPrimary
            };

            var doneButton = new UIBarButtonItem()
            {
                Title = Strings.Done,
                Style = UIBarButtonItemStyle.Plain,
            };

            doneButton.ClickedWeakSubscribe((sender, args) => HideDatePickers());
            var space = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace);

            DatePickerToolbar.SetItems(new[] { space, doneButton }, false);
            DatePickerToolbar.UserInteractionEnabled = true;

            ActivityIndicator = new ActivityIndicatorView(80, 1);
        }
コード例 #6
0
        void ReleaseDesignerOutlets()
        {
            if (EmailLabel != null)
            {
                EmailLabel.Dispose();
                EmailLabel = null;
            }

            if (ActivityIndicatorView != null)
            {
                ActivityIndicatorView.Dispose();
                ActivityIndicatorView = null;
            }

            if (BottomConstraint != null)
            {
                BottomConstraint.Dispose();
                BottomConstraint = null;
            }

            if (ErrorLabel != null)
            {
                ErrorLabel.Dispose();
                ErrorLabel = null;
            }

            if (ErrorView != null)
            {
                ErrorView.Dispose();
                ErrorView = null;
            }

            if (PasswordTextField != null)
            {
                PasswordTextField.Dispose();
                PasswordTextField = null;
            }

            if (ShowPasswordButton != null)
            {
                ShowPasswordButton.Dispose();
                ShowPasswordButton = null;
            }

            if (SignOutButton != null)
            {
                SignOutButton.Dispose();
                SignOutButton = null;
            }
        }
コード例 #7
0
        void ReleaseDesignerOutlets()
        {
            if (ActivityIndicatorView != null)
            {
                ActivityIndicatorView.Dispose();
                ActivityIndicatorView = null;
            }

            if (Label != null)
            {
                Label.Dispose();
                Label = null;
            }

            if (LabelTrailingSpaceConstraint != null)
            {
                LabelTrailingSpaceConstraint.Dispose();
                LabelTrailingSpaceConstraint = null;
            }
        }
コード例 #8
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            CreateWorkspaceButton.SetTitle(Resources.CreateNewWorkspace, UIControlState.Normal);
            HeadingLabel.Text = Resources.UhOh;
            TextLabel.Text    = Resources.NoWorkspaceErrorMessage;

            var screenWidth = UIScreen.MainScreen.Bounds.Width;

            PreferredContentSize = new CGSize
            {
                // ScreenWidth - 32 for 16pt margins on both sides
                Width  = screenWidth > 320 ? screenWidth - 32 : 312,
                Height = cardHeight
            };

            prepareViews();

            CreateWorkspaceButton.Rx()
            .BindAction(ViewModel.CreateWorkspaceWithDefaultName)
            .DisposedBy(DisposeBag);

            TryAgainButton.Rx()
            .BindAction(ViewModel.TryAgain)
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Invert()
            .Subscribe(CreateWorkspaceButton.Rx().Enabled())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Invert()
            .Subscribe(TryAgainButton.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading.StartWith(false)
            .Subscribe(ActivityIndicatorView.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);
        }
コード例 #9
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            var screenWidth = UIScreen.MainScreen.Bounds.Width;

            PreferredContentSize = new CGSize
            {
                // ScreenWidth - 32 for 16pt margins on both sides
                Width  = screenWidth > 320 ? screenWidth - 32 : 312,
                Height = cardHeight
            };

            prepareViews();

            this.Bind(CreateWorkspaceButton.Rx().Tap(), ViewModel.CreateWorkspaceWithDefaultName);
            this.Bind(TryAgainButton.Rx().Tap(), ViewModel.TryAgain);

            this.Bind(ViewModel.IsLoading.Select(CommonFunctions.Invert), CreateWorkspaceButton.Rx().Enabled());
            this.Bind(ViewModel.IsLoading.Select(CommonFunctions.Invert), TryAgainButton.Rx().IsVisibleWithFade());
            this.Bind(ViewModel.IsLoading.StartWith(false), ActivityIndicatorView.Rx().IsVisibleWithFade());
        }
コード例 #10
0
        void ReleaseDesignerOutlets()
        {
            if (ActivityIndicatorView != null)
            {
                ActivityIndicatorView.Dispose();
                ActivityIndicatorView = null;
            }

            if (SaveButton != null)
            {
                SaveButton.Dispose();
                SaveButton = null;
            }

            if (ScrollView != null)
            {
                ScrollView.Dispose();
                ScrollView = null;
            }

            if (TextField != null)
            {
                TextField.Dispose();
                TextField = null;
            }

            if (WebView != null)
            {
                WebView.Dispose();
                WebView = null;
            }

            if (WebViewSuperViewWidthConstraint != null)
            {
                WebViewSuperViewWidthConstraint.Dispose();
                WebViewSuperViewWidthConstraint = null;
            }
        }
コード例 #11
0
 public override void ViewDidAppear(bool animated)
 {
     base.ViewDidAppear(animated);
     ActivityIndicatorView.StartSpinning();
 }
コード例 #12
0
 public void StartAnimation()
 {
     ActivityIndicatorView?.StartAnimating();
 }
コード例 #13
0
 void HideActivityIndicatorView()
 {
     ActivityIndicatorView.Hidden = true;
     ActivityIndicatorView.StopAnimating();
 }
コード例 #14
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            Title = Resources.LoginTitle;
            ResetSuccessLabel.Text        = Resources.APITokenResetSuccess;
            InstructionLabel.Text         = Resources.TokenResetInstruction;
            PasswordTextField.Placeholder = Resources.Password;
            SignOutButton.SetTitle(Resources.OrSignOut, UIControlState.Normal);

            prepareViews();

            ViewModel.Error
            .Subscribe(ErrorLabel.Rx().Text())
            .DisposedBy(DisposeBag);

            ViewModel.Email
            .SelectToString()
            .Subscribe(EmailLabel.Rx().Text())
            .DisposedBy(DisposeBag);

            ViewModel.Password
            .Subscribe(PasswordTextField.Rx().TextObserver())
            .DisposedBy(DisposeBag);

            PasswordTextField.Rx().Text()
            .Subscribe(ViewModel.Password)
            .DisposedBy(DisposeBag);

            ViewModel.IsPasswordMasked
            .Subscribe(PasswordTextField.Rx().SecureTextEntry())
            .DisposedBy(DisposeBag);

            SignOutButton.Rx()
            .BindAction(ViewModel.SignOut)
            .DisposedBy(DisposeBag);

            ShowPasswordButton.Rx()
            .BindAction(ViewModel.TogglePasswordVisibility)
            .DisposedBy(DisposeBag);

            nextButton.Rx().Tap()
            .Subscribe(ViewModel.Done.Inputs)
            .DisposedBy(DisposeBag);

            PasswordTextField.Rx().ShouldReturn()
            .Subscribe(ViewModel.Done.Inputs)
            .DisposedBy(DisposeBag);

            //Enabled
            ViewModel.NextIsEnabled
            .Subscribe(nextButton.Rx().Enabled())
            .DisposedBy(DisposeBag);

            //Visibility
            ViewModel.HasError
            .Subscribe(ErrorView.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.Done.Executing
            .Invert()
            .Subscribe(ShowPasswordButton.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.Done.Executing
            .Subscribe(ActivityIndicatorView.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            PasswordTextField.BecomeFirstResponder();
        }
コード例 #15
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            CreateWorkspaceButton.SetTitle(Resources.CreateNewWorkspace, UIControlState.Normal);
            HeadingLabel.Text = Resources.UhOh;
            TextLabel.Text    = Resources.NoWorkspaceErrorMessage;

            var tryAgainString = string.Format(Resources.NoWorkspaceOr, Resources.NoWorkspaceTryAgain);

            var rangeStart = tryAgainString.IndexOf(Resources.NoWorkspaceTryAgain, System.StringComparison.CurrentCulture);
            var rangeEnd   = Resources.NoWorkspaceTryAgain.Length;
            var range      = new NSRange(rangeStart, rangeEnd);

            var attributedString = new NSMutableAttributedString(
                tryAgainString,
                new UIStringAttributes {
                ForegroundColor = ColorAssets.Text
            });

            attributedString.AddAttributes(
                new UIStringAttributes {
                ForegroundColor = Colors.NoWorkspace.ActivityIndicator.ToNativeColor()
            },
                range);

            TryAgainButton.SetAttributedTitle(attributedString, UIControlState.Normal);

            var screenWidth = UIScreen.MainScreen.Bounds.Width;

            PreferredContentSize = new CGSize
            {
                // ScreenWidth - 32 for 16pt margins on both sides
                Width  = screenWidth > 320 ? screenWidth - 32 : 312,
                Height = cardHeight
            };

            prepareViews();

            CreateWorkspaceButton.Rx()
            .BindAction(ViewModel.CreateWorkspaceWithDefaultName)
            .DisposedBy(DisposeBag);

            TryAgainButton.Rx()
            .BindAction(ViewModel.TryAgain)
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Invert()
            .Subscribe(CreateWorkspaceButton.Rx().Enabled())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading
            .Invert()
            .Subscribe(TryAgainButton.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);

            ViewModel.IsLoading.StartWith(false)
            .Subscribe(ActivityIndicatorView.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);
        }
コード例 #16
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            Title = Resources.LoginTitle;
            ResetSuccessLabel.Text        = Resources.APITokenResetSuccess;
            InstructionLabel.Text         = Resources.TokenResetInstruction;
            PasswordTextField.Placeholder = Resources.Password;
            SignOutButton.SetTitle(Resources.OrSignOut, UIControlState.Normal);

            EmailLabel.Text = ViewModel.Email.ToString();

            ViewModel.Error
            .Subscribe(ErrorLabel.Rx().Text())
            .DisposedBy(DisposeBag);

            ViewModel.Password
            .Subscribe(PasswordTextField.Rx().TextObserver())
            .DisposedBy(DisposeBag);

            PasswordTextField.Rx().Text()
            .Subscribe(ViewModel.Password)
            .DisposedBy(DisposeBag);

            SignOutButton.Rx()
            .BindAction(ViewModel.SignOut)
            .DisposedBy(DisposeBag);

            ViewModel.SignOut.Elements
            .Subscribe(IosDependencyContainer.Instance.IntentDonationService.ClearAll)
            .DisposedBy(DisposeBag);

            ShowPasswordButton.Rx().Tap()
            .Subscribe(_ =>
            {
                PasswordTextField.ResignFirstResponder();
                PasswordTextField.SecureTextEntry = !PasswordTextField.SecureTextEntry;
                PasswordTextField.BecomeFirstResponder();
            })
            .DisposedBy(DisposeBag);

            LoginButton.Rx().Tap()
            .Subscribe(ViewModel.Done.Inputs)
            .DisposedBy(DisposeBag);

            PasswordTextField.Rx().ShouldReturn()
            .Subscribe(ViewModel.Done.Inputs)
            .DisposedBy(DisposeBag);

            //Enabled
            ViewModel.NextIsEnabled
            .Subscribe(LoginButton.Rx().Enabled())
            .DisposedBy(DisposeBag);

            //Visibility
            ErrorLabel.Hidden = true;
            ViewModel.HasError
            .Subscribe(ErrorLabel.Rx().AnimatedIsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.Done.Executing
            .Invert()
            .Subscribe(ShowPasswordButton.Rx().IsVisible())
            .DisposedBy(DisposeBag);

            ViewModel.Done.Executing
            .Subscribe(ActivityIndicatorView.Rx().IsVisibleWithFade())
            .DisposedBy(DisposeBag);

            ViewModel.Done.Executing.Select(loginButtonTitle)
            .Subscribe(LoginButton.Rx().AnimatedTitle())
            .DisposedBy(DisposeBag);

            PasswordTextField.BecomeFirstResponder();
            ShowPasswordButton.SetupShowPasswordButton();

            //Color
            ViewModel.HasError
            .Select(loginButtonTintColor)
            .Subscribe(LoginButton.Rx().TintColor())
            .DisposedBy(DisposeBag);

            ViewModel.NextIsEnabled
            .Select(loginButtonTitleColor)
            .Subscribe(LoginButton.Rx().TitleColor())
            .DisposedBy(DisposeBag);

            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();
        }