mirror of
https://github.com/bitwarden/mobile
synced 2025-01-26 16:36:28 +01:00
[EC-371] Fix iOS extensions login more menu (#2016)
* EC-371 fix iOS extensions login more menu and HintPage to display correctly on extensions * EC-371 fix merge
This commit is contained in:
parent
570b56364a
commit
3ef5b576ac
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<ContentPage.ToolbarItems>
|
<ContentPage.ToolbarItems>
|
||||||
<ToolbarItem Text="{u:I18n Cancel}" Clicked="Close_Clicked" Order="Primary" Priority="-1" />
|
<ToolbarItem Text="{u:I18n Cancel}" Clicked="Close_Clicked" Order="Primary" Priority="-1" />
|
||||||
<ToolbarItem Text="{u:I18n Submit}" Clicked="Submit_Clicked" />
|
<ToolbarItem Text="{u:I18n Submit}" Command="{Binding SubmitCommand}" />
|
||||||
</ContentPage.ToolbarItems>
|
</ContentPage.ToolbarItems>
|
||||||
|
|
||||||
<ScrollView>
|
<ScrollView>
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System;
|
using Xamarin.Forms;
|
||||||
using Xamarin.Forms;
|
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@ -24,14 +23,6 @@ namespace Bit.App.Pages
|
|||||||
RequestFocus(_email);
|
RequestFocus(_email);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void Submit_Clicked(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (DoOnce())
|
|
||||||
{
|
|
||||||
await _vm.SubmitAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void Close_Clicked(object sender, System.EventArgs e)
|
private async void Close_Clicked(object sender, System.EventArgs e)
|
||||||
{
|
{
|
||||||
if (DoOnce())
|
if (DoOnce())
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
using Bit.App.Abstractions;
|
using Bit.App.Abstractions;
|
||||||
using Bit.App.Resources;
|
using Bit.App.Resources;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Exceptions;
|
using Bit.Core.Exceptions;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Xamarin.Forms;
|
using Xamarin.CommunityToolkit.ObjectModel;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
{
|
{
|
||||||
@ -13,18 +14,26 @@ namespace Bit.App.Pages
|
|||||||
private readonly IDeviceActionService _deviceActionService;
|
private readonly IDeviceActionService _deviceActionService;
|
||||||
private readonly IPlatformUtilsService _platformUtilsService;
|
private readonly IPlatformUtilsService _platformUtilsService;
|
||||||
private readonly IApiService _apiService;
|
private readonly IApiService _apiService;
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public HintPageViewModel()
|
public HintPageViewModel()
|
||||||
{
|
{
|
||||||
_deviceActionService = ServiceContainer.Resolve<IDeviceActionService>("deviceActionService");
|
_deviceActionService = ServiceContainer.Resolve<IDeviceActionService>("deviceActionService");
|
||||||
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
|
_platformUtilsService = ServiceContainer.Resolve<IPlatformUtilsService>("platformUtilsService");
|
||||||
_apiService = ServiceContainer.Resolve<IApiService>("apiService");
|
_apiService = ServiceContainer.Resolve<IApiService>("apiService");
|
||||||
|
_logger = ServiceContainer.Resolve<ILogger>();
|
||||||
|
|
||||||
PageTitle = AppResources.PasswordHint;
|
PageTitle = AppResources.PasswordHint;
|
||||||
SubmitCommand = new Command(async () => await SubmitAsync());
|
SubmitCommand = new AsyncCommand(SubmitAsync,
|
||||||
|
onException: ex =>
|
||||||
|
{
|
||||||
|
_logger.Exception(ex);
|
||||||
|
_deviceActionService.DisplayAlertAsync(AppResources.AnErrorHasOccurred, AppResources.GenericErrorMessage, AppResources.Ok).FireAndForget();
|
||||||
|
},
|
||||||
|
allowsMultipleExecutions: false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Command SubmitCommand { get; }
|
public ICommand SubmitCommand { get; }
|
||||||
public string Email { get; set; }
|
public string Email { get; set; }
|
||||||
|
|
||||||
public async Task SubmitAsync()
|
public async Task SubmitAsync()
|
||||||
@ -37,14 +46,14 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
if (string.IsNullOrWhiteSpace(Email))
|
if (string.IsNullOrWhiteSpace(Email))
|
||||||
{
|
{
|
||||||
await Page.DisplayAlert(AppResources.AnErrorHasOccurred,
|
await _deviceActionService.DisplayAlertAsync(AppResources.AnErrorHasOccurred,
|
||||||
string.Format(AppResources.ValidationFieldRequired, AppResources.EmailAddress),
|
string.Format(AppResources.ValidationFieldRequired, AppResources.EmailAddress),
|
||||||
AppResources.Ok);
|
AppResources.Ok);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Email.Contains("@"))
|
if (!Email.Contains("@"))
|
||||||
{
|
{
|
||||||
await Page.DisplayAlert(AppResources.AnErrorHasOccurred, AppResources.InvalidEmail, AppResources.Ok);
|
await _deviceActionService.DisplayAlertAsync(AppResources.AnErrorHasOccurred, AppResources.InvalidEmail, AppResources.Ok);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +63,7 @@ namespace Bit.App.Pages
|
|||||||
await _apiService.PostPasswordHintAsync(
|
await _apiService.PostPasswordHintAsync(
|
||||||
new Core.Models.Request.PasswordHintRequest { Email = Email });
|
new Core.Models.Request.PasswordHintRequest { Email = Email });
|
||||||
await _deviceActionService.HideLoadingAsync();
|
await _deviceActionService.HideLoadingAsync();
|
||||||
await Page.DisplayAlert(null, AppResources.PasswordHintAlert, AppResources.Ok);
|
await _deviceActionService.DisplayAlertAsync(null, AppResources.PasswordHintAlert, AppResources.Ok);
|
||||||
await Page.Navigation.PopModalAsync();
|
await Page.Navigation.PopModalAsync();
|
||||||
}
|
}
|
||||||
catch (ApiException e)
|
catch (ApiException e)
|
||||||
|
@ -55,6 +55,7 @@
|
|||||||
<Entry
|
<Entry
|
||||||
x:Name="_email"
|
x:Name="_email"
|
||||||
Text="{Binding Email}"
|
Text="{Binding Email}"
|
||||||
|
IsEnabled="{Binding IsEmailEnabled}"
|
||||||
Keyboard="Email"
|
Keyboard="Email"
|
||||||
StyleClass="box-value">
|
StyleClass="box-value">
|
||||||
<VisualStateManager.VisualStateGroups>
|
<VisualStateManager.VisualStateGroups>
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Bit.App.Models;
|
using Bit.App.Models;
|
||||||
using Bit.App.Resources;
|
|
||||||
using Bit.App.Utilities;
|
using Bit.App.Utilities;
|
||||||
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
@ -15,6 +15,8 @@ namespace Bit.App.Pages
|
|||||||
|
|
||||||
private bool _inputFocused;
|
private bool _inputFocused;
|
||||||
|
|
||||||
|
readonly LazyResolve<ILogger> _logger = new LazyResolve<ILogger>("logger");
|
||||||
|
|
||||||
public LoginPage(string email = null, AppOptions appOptions = null)
|
public LoginPage(string email = null, AppOptions appOptions = null)
|
||||||
{
|
{
|
||||||
_appOptions = appOptions;
|
_appOptions = appOptions;
|
||||||
@ -30,11 +32,10 @@ namespace Bit.App.Pages
|
|||||||
await _accountListOverlay.HideAsync();
|
await _accountListOverlay.HideAsync();
|
||||||
await Navigation.PopModalAsync();
|
await Navigation.PopModalAsync();
|
||||||
};
|
};
|
||||||
if (!string.IsNullOrWhiteSpace(email))
|
_vm.IsEmailEnabled = string.IsNullOrWhiteSpace(email);
|
||||||
{
|
_vm.IsIosExtension = _appOptions?.IosExtension ?? false;
|
||||||
_email.IsEnabled = false;
|
|
||||||
}
|
if (_vm.IsEmailEnabled)
|
||||||
else
|
|
||||||
{
|
{
|
||||||
_vm.ShowCancelButton = true;
|
_vm.ShowCancelButton = true;
|
||||||
}
|
}
|
||||||
@ -53,7 +54,7 @@ namespace Bit.App.Pages
|
|||||||
ToolbarItems.Add(_getPasswordHint);
|
ToolbarItems.Add(_getPasswordHint);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Device.RuntimePlatform == Device.Android && !_email.IsEnabled)
|
if (Device.RuntimePlatform == Device.Android && !_vm.IsEmailEnabled)
|
||||||
{
|
{
|
||||||
ToolbarItems.Add(_removeAccount);
|
ToolbarItems.Add(_removeAccount);
|
||||||
}
|
}
|
||||||
@ -110,7 +111,7 @@ namespace Bit.App.Pages
|
|||||||
{
|
{
|
||||||
if (DoOnce())
|
if (DoOnce())
|
||||||
{
|
{
|
||||||
await _vm.LogInAsync(true, _email.IsEnabled);
|
await _vm.LogInAsync(true, _vm.IsEmailEnabled);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,26 +140,16 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void More_Clicked(object sender, System.EventArgs e)
|
private async void More_Clicked(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
await _accountListOverlay.HideAsync();
|
try
|
||||||
if (!DoOnce())
|
|
||||||
{
|
{
|
||||||
return;
|
await _accountListOverlay.HideAsync();
|
||||||
|
_vm.MoreCommand.Execute(null);
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
var buttons = _email.IsEnabled ? new[] { AppResources.GetPasswordHint }
|
|
||||||
: new[] { AppResources.GetPasswordHint, AppResources.RemoveAccount };
|
|
||||||
var selection = await DisplayActionSheet(AppResources.Options,
|
|
||||||
AppResources.Cancel, null, buttons);
|
|
||||||
|
|
||||||
if (selection == AppResources.GetPasswordHint)
|
|
||||||
{
|
{
|
||||||
await Navigation.PushModalAsync(new NavigationPage(new HintPage()));
|
_logger.Value.Exception(ex);
|
||||||
}
|
|
||||||
else if (selection == AppResources.RemoveAccount)
|
|
||||||
{
|
|
||||||
await _vm.RemoveAccountAsync();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Input;
|
||||||
using Bit.App.Abstractions;
|
using Bit.App.Abstractions;
|
||||||
using Bit.App.Controls;
|
using Bit.App.Controls;
|
||||||
using Bit.App.Resources;
|
using Bit.App.Resources;
|
||||||
@ -8,6 +9,7 @@ using Bit.Core;
|
|||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Exceptions;
|
using Bit.Core.Exceptions;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
using Xamarin.CommunityToolkit.ObjectModel;
|
||||||
using Xamarin.Forms;
|
using Xamarin.Forms;
|
||||||
|
|
||||||
namespace Bit.App.Pages
|
namespace Bit.App.Pages
|
||||||
@ -28,6 +30,7 @@ namespace Bit.App.Pages
|
|||||||
private bool _showCancelButton;
|
private bool _showCancelButton;
|
||||||
private string _email;
|
private string _email;
|
||||||
private string _masterPassword;
|
private string _masterPassword;
|
||||||
|
private bool _isEmailEnabled;
|
||||||
|
|
||||||
public LoginPageViewModel()
|
public LoginPageViewModel()
|
||||||
{
|
{
|
||||||
@ -44,6 +47,7 @@ namespace Bit.App.Pages
|
|||||||
PageTitle = AppResources.Bitwarden;
|
PageTitle = AppResources.Bitwarden;
|
||||||
TogglePasswordCommand = new Command(TogglePassword);
|
TogglePasswordCommand = new Command(TogglePassword);
|
||||||
LogInCommand = new Command(async () => await LogInAsync());
|
LogInCommand = new Command(async () => await LogInAsync());
|
||||||
|
MoreCommand = new AsyncCommand(MoreAsync, onException: _logger.Exception, allowsMultipleExecutions: false);
|
||||||
|
|
||||||
AccountSwitchingOverlayViewModel = new AccountSwitchingOverlayViewModel(_stateService, _messagingService, _logger)
|
AccountSwitchingOverlayViewModel = new AccountSwitchingOverlayViewModel(_stateService, _messagingService, _logger)
|
||||||
{
|
{
|
||||||
@ -81,10 +85,19 @@ namespace Bit.App.Pages
|
|||||||
set => SetProperty(ref _masterPassword, value);
|
set => SetProperty(ref _masterPassword, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsEmailEnabled
|
||||||
|
{
|
||||||
|
get => _isEmailEnabled;
|
||||||
|
set => SetProperty(ref _isEmailEnabled, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsIosExtension { get; set; }
|
||||||
|
|
||||||
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
|
public AccountSwitchingOverlayViewModel AccountSwitchingOverlayViewModel { get; }
|
||||||
|
|
||||||
public Command LogInCommand { get; }
|
public Command LogInCommand { get; }
|
||||||
public Command TogglePasswordCommand { get; }
|
public Command TogglePasswordCommand { get; }
|
||||||
|
public ICommand MoreCommand { get; internal set; }
|
||||||
public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye;
|
public string ShowPasswordIcon => ShowPassword ? BitwardenIcons.EyeSlash : BitwardenIcons.Eye;
|
||||||
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
|
public string PasswordVisibilityAccessibilityText => ShowPassword ? AppResources.PasswordIsVisibleTapToHide : AppResources.PasswordIsNotVisibleTapToShow;
|
||||||
public Action StartTwoFactorAction { get; set; }
|
public Action StartTwoFactorAction { get; set; }
|
||||||
@ -201,6 +214,28 @@ namespace Bit.App.Pages
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task MoreAsync()
|
||||||
|
{
|
||||||
|
var buttons = IsEmailEnabled
|
||||||
|
? new[] { AppResources.GetPasswordHint }
|
||||||
|
: new[] { AppResources.GetPasswordHint, AppResources.RemoveAccount };
|
||||||
|
var selection = await _deviceActionService.DisplayActionSheetAsync(AppResources.Options, AppResources.Cancel, null, buttons);
|
||||||
|
|
||||||
|
if (selection == AppResources.GetPasswordHint)
|
||||||
|
{
|
||||||
|
var hintNavigationPage = new NavigationPage(new HintPage());
|
||||||
|
if (IsIosExtension)
|
||||||
|
{
|
||||||
|
ThemeManager.ApplyResourcesTo(hintNavigationPage);
|
||||||
|
}
|
||||||
|
await Page.Navigation.PushModalAsync(hintNavigationPage);
|
||||||
|
}
|
||||||
|
else if (selection == AppResources.RemoveAccount)
|
||||||
|
{
|
||||||
|
await RemoveAccountAsync();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void TogglePassword()
|
public void TogglePassword()
|
||||||
{
|
{
|
||||||
ShowPassword = !ShowPassword;
|
ShowPassword = !ShowPassword;
|
||||||
|
@ -147,11 +147,11 @@ namespace Bit.App.Utilities
|
|||||||
return Application.Current.RequestedTheme == OSAppTheme.Dark;
|
return Application.Current.RequestedTheme == OSAppTheme.Dark;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ApplyResourcesToPage(ContentPage page)
|
public static void ApplyResourcesTo(VisualElement element)
|
||||||
{
|
{
|
||||||
foreach (var resourceDict in Resources().MergedDictionaries)
|
foreach (var resourceDict in Resources().MergedDictionaries)
|
||||||
{
|
{
|
||||||
page.Resources.Add(resourceDict);
|
element.Resources.Add(resourceDict);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -430,7 +430,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var homePage = new HomePage();
|
var homePage = new HomePage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(homePage);
|
ThemeManager.ApplyResourcesTo(homePage);
|
||||||
if (homePage.BindingContext is HomeViewModel vm)
|
if (homePage.BindingContext is HomeViewModel vm)
|
||||||
{
|
{
|
||||||
vm.StartLoginAction = () => DismissViewController(false, () => LaunchLoginFlow());
|
vm.StartLoginAction = () => DismissViewController(false, () => LaunchLoginFlow());
|
||||||
@ -453,7 +453,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var environmentPage = new EnvironmentPage();
|
var environmentPage = new EnvironmentPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(environmentPage);
|
ThemeManager.ApplyResourcesTo(environmentPage);
|
||||||
if (environmentPage.BindingContext is EnvironmentPageViewModel vm)
|
if (environmentPage.BindingContext is EnvironmentPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.SubmitSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
vm.SubmitSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
||||||
@ -471,7 +471,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var registerPage = new RegisterPage(null);
|
var registerPage = new RegisterPage(null);
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(registerPage);
|
ThemeManager.ApplyResourcesTo(registerPage);
|
||||||
if (registerPage.BindingContext is RegisterPageViewModel vm)
|
if (registerPage.BindingContext is RegisterPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.RegistrationSuccess = () => DismissViewController(false, () => LaunchLoginFlow(vm.Email));
|
vm.RegistrationSuccess = () => DismissViewController(false, () => LaunchLoginFlow(vm.Email));
|
||||||
@ -486,10 +486,11 @@ namespace Bit.iOS.Autofill
|
|||||||
|
|
||||||
private void LaunchLoginFlow(string email = null)
|
private void LaunchLoginFlow(string email = null)
|
||||||
{
|
{
|
||||||
var loginPage = new LoginPage(email);
|
var appOptions = new AppOptions { IosExtension = true };
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(appOptions);
|
||||||
|
var loginPage = new LoginPage(email, appOptions);
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(loginPage);
|
ThemeManager.ApplyResourcesTo(loginPage);
|
||||||
if (loginPage.BindingContext is LoginPageViewModel vm)
|
if (loginPage.BindingContext is LoginPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(false));
|
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(false));
|
||||||
@ -511,7 +512,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var loginPage = new LoginSsoPage();
|
var loginPage = new LoginSsoPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(loginPage);
|
ThemeManager.ApplyResourcesTo(loginPage);
|
||||||
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(true));
|
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(true));
|
||||||
@ -534,7 +535,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var twoFactorPage = new TwoFactorPage(authingWithSso);
|
var twoFactorPage = new TwoFactorPage(authingWithSso);
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(twoFactorPage);
|
ThemeManager.ApplyResourcesTo(twoFactorPage);
|
||||||
if (twoFactorPage.BindingContext is TwoFactorPageViewModel vm)
|
if (twoFactorPage.BindingContext is TwoFactorPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.TwoFactorAuthSuccessAction = () => DismissLockAndContinue();
|
vm.TwoFactorAuthSuccessAction = () => DismissLockAndContinue();
|
||||||
@ -561,7 +562,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var setPasswordPage = new SetPasswordPage();
|
var setPasswordPage = new SetPasswordPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(setPasswordPage);
|
ThemeManager.ApplyResourcesTo(setPasswordPage);
|
||||||
if (setPasswordPage.BindingContext is SetPasswordPageViewModel vm)
|
if (setPasswordPage.BindingContext is SetPasswordPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.UpdateTempPasswordAction = () => DismissViewController(false, () => LaunchUpdateTempPasswordFlow());
|
vm.UpdateTempPasswordAction = () => DismissViewController(false, () => LaunchUpdateTempPasswordFlow());
|
||||||
@ -580,7 +581,7 @@ namespace Bit.iOS.Autofill
|
|||||||
var updateTempPasswordPage = new UpdateTempPasswordPage();
|
var updateTempPasswordPage = new UpdateTempPasswordPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(updateTempPasswordPage);
|
ThemeManager.ApplyResourcesTo(updateTempPasswordPage);
|
||||||
if (updateTempPasswordPage.BindingContext is UpdateTempPasswordPageViewModel vm)
|
if (updateTempPasswordPage.BindingContext is UpdateTempPasswordPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.UpdateTempPasswordSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
vm.UpdateTempPasswordSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
||||||
|
@ -339,7 +339,7 @@ namespace Bit.iOS.Core.Controllers
|
|||||||
var loginPage = new LoginSsoPage();
|
var loginPage = new LoginSsoPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(loginPage);
|
ThemeManager.ApplyResourcesTo(loginPage);
|
||||||
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.SsoAuthSuccessAction = () => DoContinue();
|
vm.SsoAuthSuccessAction = () => DoContinue();
|
||||||
|
@ -328,7 +328,7 @@ namespace Bit.iOS.Core.Controllers
|
|||||||
var loginPage = new LoginSsoPage();
|
var loginPage = new LoginSsoPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(loginPage);
|
ThemeManager.ApplyResourcesTo(loginPage);
|
||||||
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.SsoAuthSuccessAction = () => DoContinue();
|
vm.SsoAuthSuccessAction = () => DoContinue();
|
||||||
|
@ -83,12 +83,11 @@ namespace Bit.iOS.Core.Services
|
|||||||
{
|
{
|
||||||
HideLoadingAsync().GetAwaiter().GetResult();
|
HideLoadingAsync().GetAwaiter().GetResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
var vc = GetPresentedViewController();
|
var vc = GetPresentedViewController();
|
||||||
if (vc is null)
|
if (vc is null)
|
||||||
{
|
{
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = new TaskCompletionSource<int>();
|
var result = new TaskCompletionSource<int>();
|
||||||
|
|
||||||
@ -360,6 +359,7 @@ namespace Bit.iOS.Core.Services
|
|||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var result = new TaskCompletionSource<string>();
|
var result = new TaskCompletionSource<string>();
|
||||||
var sheet = UIAlertController.Create(title, null, UIAlertControllerStyle.ActionSheet);
|
var sheet = UIAlertController.Create(title, null, UIAlertControllerStyle.ActionSheet);
|
||||||
if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
|
if (UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
|
||||||
|
@ -451,7 +451,7 @@ namespace Bit.iOS.Extension
|
|||||||
var homePage = new HomePage();
|
var homePage = new HomePage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(homePage);
|
ThemeManager.ApplyResourcesTo(homePage);
|
||||||
if (homePage.BindingContext is HomeViewModel vm)
|
if (homePage.BindingContext is HomeViewModel vm)
|
||||||
{
|
{
|
||||||
vm.StartLoginAction = () => DismissViewController(false, () => LaunchLoginFlow());
|
vm.StartLoginAction = () => DismissViewController(false, () => LaunchLoginFlow());
|
||||||
@ -474,7 +474,7 @@ namespace Bit.iOS.Extension
|
|||||||
var environmentPage = new EnvironmentPage();
|
var environmentPage = new EnvironmentPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(environmentPage);
|
ThemeManager.ApplyResourcesTo(environmentPage);
|
||||||
if (environmentPage.BindingContext is EnvironmentPageViewModel vm)
|
if (environmentPage.BindingContext is EnvironmentPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.SubmitSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
vm.SubmitSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
||||||
@ -492,7 +492,7 @@ namespace Bit.iOS.Extension
|
|||||||
var registerPage = new RegisterPage(null);
|
var registerPage = new RegisterPage(null);
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(registerPage);
|
ThemeManager.ApplyResourcesTo(registerPage);
|
||||||
if (registerPage.BindingContext is RegisterPageViewModel vm)
|
if (registerPage.BindingContext is RegisterPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.RegistrationSuccess = () => DismissViewController(false, () => LaunchLoginFlow(vm.Email));
|
vm.RegistrationSuccess = () => DismissViewController(false, () => LaunchLoginFlow(vm.Email));
|
||||||
@ -507,10 +507,11 @@ namespace Bit.iOS.Extension
|
|||||||
|
|
||||||
private void LaunchLoginFlow(string email = null)
|
private void LaunchLoginFlow(string email = null)
|
||||||
{
|
{
|
||||||
var loginPage = new LoginPage(email);
|
var appOptions = new AppOptions { IosExtension = true };
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(appOptions);
|
||||||
|
var loginPage = new LoginPage(email, appOptions);
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(loginPage);
|
ThemeManager.ApplyResourcesTo(loginPage);
|
||||||
if (loginPage.BindingContext is LoginPageViewModel vm)
|
if (loginPage.BindingContext is LoginPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(false));
|
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(false));
|
||||||
@ -532,7 +533,7 @@ namespace Bit.iOS.Extension
|
|||||||
var loginPage = new LoginSsoPage();
|
var loginPage = new LoginSsoPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(loginPage);
|
ThemeManager.ApplyResourcesTo(loginPage);
|
||||||
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
if (loginPage.BindingContext is LoginSsoPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(true));
|
vm.StartTwoFactorAction = () => DismissViewController(false, () => LaunchTwoFactorFlow(true));
|
||||||
@ -555,7 +556,7 @@ namespace Bit.iOS.Extension
|
|||||||
var twoFactorPage = new TwoFactorPage();
|
var twoFactorPage = new TwoFactorPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(twoFactorPage);
|
ThemeManager.ApplyResourcesTo(twoFactorPage);
|
||||||
if (twoFactorPage.BindingContext is TwoFactorPageViewModel vm)
|
if (twoFactorPage.BindingContext is TwoFactorPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.TwoFactorAuthSuccessAction = () => DismissLockAndContinue();
|
vm.TwoFactorAuthSuccessAction = () => DismissLockAndContinue();
|
||||||
@ -582,7 +583,7 @@ namespace Bit.iOS.Extension
|
|||||||
var setPasswordPage = new SetPasswordPage();
|
var setPasswordPage = new SetPasswordPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(setPasswordPage);
|
ThemeManager.ApplyResourcesTo(setPasswordPage);
|
||||||
if (setPasswordPage.BindingContext is SetPasswordPageViewModel vm)
|
if (setPasswordPage.BindingContext is SetPasswordPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.UpdateTempPasswordAction = () => DismissViewController(false, () => LaunchUpdateTempPasswordFlow());
|
vm.UpdateTempPasswordAction = () => DismissViewController(false, () => LaunchUpdateTempPasswordFlow());
|
||||||
@ -601,7 +602,7 @@ namespace Bit.iOS.Extension
|
|||||||
var updateTempPasswordPage = new UpdateTempPasswordPage();
|
var updateTempPasswordPage = new UpdateTempPasswordPage();
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(new AppOptions { IosExtension = true });
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
ThemeManager.ApplyResourcesToPage(updateTempPasswordPage);
|
ThemeManager.ApplyResourcesTo(updateTempPasswordPage);
|
||||||
if (updateTempPasswordPage.BindingContext is UpdateTempPasswordPageViewModel vm)
|
if (updateTempPasswordPage.BindingContext is UpdateTempPasswordPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.UpdateTempPasswordSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
vm.UpdateTempPasswordSuccessAction = () => DismissViewController(false, () => LaunchHomePage());
|
||||||
|
@ -38,6 +38,7 @@ namespace Bit.iOS.ShareExtension
|
|||||||
|
|
||||||
Lazy<UIStoryboard> _storyboard = new Lazy<UIStoryboard>(() => UIStoryboard.FromName(STORYBOARD_NAME, null));
|
Lazy<UIStoryboard> _storyboard = new Lazy<UIStoryboard>(() => UIStoryboard.FromName(STORYBOARD_NAME, null));
|
||||||
|
|
||||||
|
private readonly Lazy<AppOptions> _appOptions = new Lazy<AppOptions>(() => new AppOptions { IosExtension = true });
|
||||||
private App.App _app = null;
|
private App.App _app = null;
|
||||||
private UIViewController _currentModalController;
|
private UIViewController _currentModalController;
|
||||||
private bool _presentingOnNavigationPage;
|
private bool _presentingOnNavigationPage;
|
||||||
@ -279,10 +280,10 @@ namespace Bit.iOS.ShareExtension
|
|||||||
{
|
{
|
||||||
if (_app is null)
|
if (_app is null)
|
||||||
{
|
{
|
||||||
var app = new App.App(new AppOptions { IosExtension = true });
|
var app = new App.App(_appOptions.Value);
|
||||||
ThemeManager.SetTheme(app.Resources);
|
ThemeManager.SetTheme(app.Resources);
|
||||||
}
|
}
|
||||||
ThemeManager.ApplyResourcesToPage(page);
|
ThemeManager.ApplyResourcesTo(page);
|
||||||
return _app;
|
return _app;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +308,7 @@ namespace Bit.iOS.ShareExtension
|
|||||||
{
|
{
|
||||||
var environmentPage = new EnvironmentPage();
|
var environmentPage = new EnvironmentPage();
|
||||||
SetupAppAndApplyResources(environmentPage);
|
SetupAppAndApplyResources(environmentPage);
|
||||||
ThemeManager.ApplyResourcesToPage(environmentPage);
|
ThemeManager.ApplyResourcesTo(environmentPage);
|
||||||
if (environmentPage.BindingContext is EnvironmentPageViewModel vm)
|
if (environmentPage.BindingContext is EnvironmentPageViewModel vm)
|
||||||
{
|
{
|
||||||
vm.SubmitSuccessAction = () => DismissAndLaunch(() => LaunchHomePage());
|
vm.SubmitSuccessAction = () => DismissAndLaunch(() => LaunchHomePage());
|
||||||
@ -331,7 +332,7 @@ namespace Bit.iOS.ShareExtension
|
|||||||
|
|
||||||
private void LaunchLoginFlow(string email = null)
|
private void LaunchLoginFlow(string email = null)
|
||||||
{
|
{
|
||||||
var loginPage = new LoginPage(email);
|
var loginPage = new LoginPage(email, _appOptions.Value);
|
||||||
SetupAppAndApplyResources(loginPage);
|
SetupAppAndApplyResources(loginPage);
|
||||||
if (loginPage.BindingContext is LoginPageViewModel vm)
|
if (loginPage.BindingContext is LoginPageViewModel vm)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user