diff --git a/src/Android/Renderers/HybridWebViewRenderer.cs b/src/Android/Renderers/HybridWebViewRenderer.cs index b5dc81824..93c15562e 100644 --- a/src/Android/Renderers/HybridWebViewRenderer.cs +++ b/src/Android/Renderers/HybridWebViewRenderer.cs @@ -7,6 +7,7 @@ using AWebkit = Android.Webkit; using Java.Interop; using Android.Content; using Bit.Droid.Renderers; +using System.ComponentModel; [assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))] namespace Bit.Droid.Renderers @@ -47,6 +48,15 @@ namespace Bit.Droid.Renderers } } + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + if(e.PropertyName == HybridWebView.UriProperty.PropertyName) + { + Control.LoadUrl(Element.Uri); + } + } + public class JSBridge : Java.Lang.Object { private readonly WeakReference _hybridWebViewRenderer; diff --git a/src/App/Pages/Accounts/LoginPageViewModel.cs b/src/App/Pages/Accounts/LoginPageViewModel.cs index 7025cb26c..c4d094311 100644 --- a/src/App/Pages/Accounts/LoginPageViewModel.cs +++ b/src/App/Pages/Accounts/LoginPageViewModel.cs @@ -89,7 +89,6 @@ namespace Bit.App.Pages { await _deviceActionService.ShowLoadingAsync(AppResources.LoggingIn); var response = await _authService.LogInAsync(Email, MasterPassword); - await _deviceActionService.HideLoadingAsync(); if(RememberEmail) { await _storageService.SaveAsync(Keys_RememberedEmail, Email); @@ -98,6 +97,7 @@ namespace Bit.App.Pages { await _storageService.RemoveAsync(Keys_RememberedEmail); } + await _deviceActionService.HideLoadingAsync(); if(response.TwoFactor) { var page = new TwoFactorPage(); diff --git a/src/App/Pages/Accounts/TwoFactorPage.xaml b/src/App/Pages/Accounts/TwoFactorPage.xaml index 76526237e..15fd72aec 100644 --- a/src/App/Pages/Accounts/TwoFactorPage.xaml +++ b/src/App/Pages/Accounts/TwoFactorPage.xaml @@ -24,12 +24,12 @@ - - - + + + - + - + - + + Clicked="Methods_Clicked" + Margin="10, 0"> diff --git a/src/App/Pages/Accounts/TwoFactorPage.xaml.cs b/src/App/Pages/Accounts/TwoFactorPage.xaml.cs index c37ef6592..754392e0e 100644 --- a/src/App/Pages/Accounts/TwoFactorPage.xaml.cs +++ b/src/App/Pages/Accounts/TwoFactorPage.xaml.cs @@ -1,5 +1,6 @@ using Bit.App.Controls; using System; +using System.Threading.Tasks; namespace Bit.App.Pages { @@ -13,14 +14,19 @@ namespace Bit.App.Pages _vm = BindingContext as TwoFactorPageViewModel; _vm.Page = this; DuoWebView = _duoWebView; + SetActivityIndicator(); } public HybridWebView DuoWebView { get; set; } - protected override void OnAppearing() + protected async override void OnAppearing() { base.OnAppearing(); - _vm.Init(); + await LoadOnAppearedAsync(_scrollView, true, () => + { + _vm.Init(); + return Task.FromResult(0); + }); } private async void Continue_Clicked(object sender, EventArgs e) diff --git a/src/App/Pages/Accounts/TwoFactorPageViewModel.cs b/src/App/Pages/Accounts/TwoFactorPageViewModel.cs index dfda85041..f2fb508e1 100644 --- a/src/App/Pages/Accounts/TwoFactorPageViewModel.cs +++ b/src/App/Pages/Accounts/TwoFactorPageViewModel.cs @@ -36,6 +36,8 @@ namespace Bit.App.Pages _apiService = ServiceContainer.Resolve("apiService"); _platformUtilsService = ServiceContainer.Resolve("platformUtilsService"); _environmentService = ServiceContainer.Resolve("environmentService"); + + PageTitle = AppResources.TwoStepLogin; } public string TwoFactorEmail @@ -48,7 +50,8 @@ namespace Bit.App.Pages public string Token { get; set; } - public bool DuoMethod => SelectedProviderType == TwoFactorProviderType.Email; + public bool DuoMethod => SelectedProviderType == TwoFactorProviderType.Duo || + SelectedProviderType == TwoFactorProviderType.OrganizationDuo; public bool YubikeyMethod => SelectedProviderType == TwoFactorProviderType.YubiKey; diff --git a/src/iOS/Renderers/HybridWebViewRenderer.cs b/src/iOS/Renderers/HybridWebViewRenderer.cs index 13b45a39c..33766fe5a 100644 --- a/src/iOS/Renderers/HybridWebViewRenderer.cs +++ b/src/iOS/Renderers/HybridWebViewRenderer.cs @@ -4,6 +4,7 @@ using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; using Bit.App.Controls; using Bit.iOS.Renderers; +using System.ComponentModel; [assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))] namespace Bit.iOS.Renderers @@ -43,6 +44,15 @@ namespace Bit.iOS.Renderers } } + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) + { + base.OnElementPropertyChanged(sender, e); + if(e.PropertyName == HybridWebView.UriProperty.PropertyName) + { + Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Uri))); + } + } + public void DidReceiveScriptMessage(WKUserContentController userContentController, WKScriptMessage message) { Element.InvokeAction(message.Body.ToString());