bitwarden-mobile/src/App/Pages/Generator/GeneratorPage.xaml.cs

157 lines
4.5 KiB
C#
Raw Normal View History

using System;
2019-05-14 15:43:46 +02:00
using System.Threading.Tasks;
using Bit.App.Resources;
using Bit.App.Styles;
using Bit.Core.Abstractions;
using Bit.Core.Utilities;
2019-05-14 15:01:07 +02:00
using Xamarin.Forms;
2019-06-24 23:32:24 +02:00
using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
2019-03-28 01:12:44 +01:00
2019-03-28 22:10:10 +01:00
namespace Bit.App.Pages
2019-03-28 01:12:44 +01:00
{
public partial class GeneratorPage : BaseContentPage, IThemeDirtablePage
2019-03-28 01:12:44 +01:00
{
private readonly IBroadcasterService _broadcasterService;
2022-04-26 17:21:17 +02:00
private GeneratorPageViewModel _vm;
2019-05-14 15:43:46 +02:00
private readonly bool _fromTabPage;
2019-05-13 22:06:56 +02:00
private readonly Action<string> _selectAction;
private readonly TabsPage _tabsPage;
public GeneratorPage(bool fromTabPage, Action<string> selectAction = null, TabsPage tabsPage = null)
2019-03-28 01:12:44 +01:00
{
_tabsPage = tabsPage;
2019-03-28 01:12:44 +01:00
InitializeComponent();
_broadcasterService = ServiceContainer.Resolve<IBroadcasterService>("broadcasterService");
_vm = BindingContext as GeneratorPageViewModel;
_vm.Page = this;
2019-05-14 15:43:46 +02:00
_fromTabPage = fromTabPage;
2019-05-13 22:06:56 +02:00
_selectAction = selectAction;
2019-06-24 23:32:24 +02:00
var isIos = Device.RuntimePlatform == Device.iOS;
if (selectAction != null)
2019-05-13 22:06:56 +02:00
{
if (isIos)
2019-06-24 21:22:46 +02:00
{
ToolbarItems.Add(_closeItem);
}
ToolbarItems.Add(_selectItem);
}
else
{
if (isIos)
2019-06-24 21:22:46 +02:00
{
ToolbarItems.Add(_moreItem);
}
else
{
ToolbarItems.Add(_historyItem);
}
2019-05-13 22:06:56 +02:00
}
if (isIos)
2019-06-24 23:32:24 +02:00
{
_typePicker.On<Xamarin.Forms.PlatformConfiguration.iOS>().SetUpdateMode(UpdateMode.WhenFinished);
2019-06-24 23:32:24 +02:00
}
}
2019-05-14 15:43:46 +02:00
public async Task InitAsync()
{
await _vm.InitAsync();
}
protected async override void OnAppearing()
{
base.OnAppearing();
lblPassword.IsVisible = true;
if (!_fromTabPage)
2019-05-14 15:43:46 +02:00
{
await InitAsync();
}
_broadcasterService.Subscribe(nameof(GeneratorPage), (message) =>
{
if (message.Command == "updatedTheme")
{
Device.BeginInvokeOnMainThread(() => _vm.RedrawPassword());
}
});
}
2022-04-26 17:21:17 +02:00
protected override void OnDisappearing()
{
base.OnDisappearing();
lblPassword.IsVisible = false;
_broadcasterService.Unsubscribe(nameof(GeneratorPage));
}
protected override bool OnBackButtonPressed()
{
if (Device.RuntimePlatform == Device.Android && _tabsPage != null)
{
_tabsPage.ResetToVaultPage();
return true;
}
return base.OnBackButtonPressed();
}
private async void Regenerate_Clicked(object sender, EventArgs e)
{
await _vm.RegenerateAsync();
}
private async void Copy_Clicked(object sender, EventArgs e)
{
await _vm.CopyAsync();
}
private async void More_Clicked(object sender, EventArgs e)
{
if (!DoOnce())
{
return;
}
var selection = await DisplayActionSheet(AppResources.Options, AppResources.Cancel,
null, AppResources.PasswordHistory);
if (selection == AppResources.PasswordHistory)
{
var page = new GeneratorHistoryPage();
2019-06-24 23:32:24 +02:00
await Navigation.PushModalAsync(new Xamarin.Forms.NavigationPage(page));
}
}
private void Select_Clicked(object sender, EventArgs e)
{
2019-05-13 22:06:56 +02:00
_selectAction?.Invoke(_vm.Password);
}
2019-05-14 15:01:07 +02:00
private async void History_Clicked(object sender, EventArgs e)
{
2019-05-14 15:01:07 +02:00
var page = new GeneratorHistoryPage();
2019-06-24 23:32:24 +02:00
await Navigation.PushModalAsync(new Xamarin.Forms.NavigationPage(page));
2019-03-28 01:12:44 +01:00
}
2019-05-31 17:13:46 +02:00
private async void LengthSlider_DragCompleted(object sender, EventArgs e)
{
2019-05-31 17:13:46 +02:00
await _vm.SliderChangedAsync();
}
2019-06-24 21:22:46 +02:00
private async void Close_Clicked(object sender, EventArgs e)
{
if (DoOnce())
2019-06-24 21:22:46 +02:00
{
await Navigation.PopModalAsync();
}
}
public override async Task UpdateOnThemeChanged()
{
await base.UpdateOnThemeChanged();
await Device.InvokeOnMainThreadAsync(() => _vm?.RedrawPassword());
}
2019-03-28 01:12:44 +01:00
}
}