private void Init() { NotesCell = new FormEditorCell(height: 180); TotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor, useButton: _deviceInfo.HasCamera); if (_deviceInfo.HasCamera) { TotpCell.Button.Image = "camera"; } TotpCell.Entry.DisableAutocapitalize = true; TotpCell.Entry.Autocorrect = false; TotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier"); PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: TotpCell.Entry, useButton: true); PasswordCell.Button.Image = "eye"; PasswordCell.Entry.DisableAutocapitalize = true; PasswordCell.Entry.Autocorrect = false; PasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier"); UsernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry); UsernameCell.Entry.DisableAutocapitalize = true; UsernameCell.Entry.Autocorrect = false; UriCell = new FormEntryCell(AppResources.URI, Keyboard.Url, nextElement: UsernameCell.Entry); if (!string.IsNullOrWhiteSpace(_defaultUri)) { UriCell.Entry.Text = _defaultUri; } NameCell = new FormEntryCell(AppResources.Name, nextElement: UriCell.Entry); if (!string.IsNullOrWhiteSpace(_defaultName)) { NameCell.Entry.Text = _defaultName; } var folderOptions = new List <string> { AppResources.FolderNone }; var folders = _folderService.GetAllAsync().GetAwaiter().GetResult() .OrderBy(f => f.Name?.Decrypt()).ToList(); foreach (var folder in folders) { folderOptions.Add(folder.Name.Decrypt()); } FolderCell = new FormPickerCell(AppResources.Folder, folderOptions.ToArray()); GenerateCell = new ExtendedTextCell { Text = AppResources.GeneratePassword, ShowDisclousure = true }; var favoriteCell = new ExtendedSwitchCell { Text = AppResources.Favorite }; var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = true, HasUnevenRows = true, Root = new TableRoot { new TableSection(AppResources.LoginInformation) { NameCell, UriCell, UsernameCell, PasswordCell, GenerateCell }, new TableSection(" ") { TotpCell, FolderCell, favoriteCell }, new TableSection(AppResources.Notes) { NotesCell } } }; if (Device.RuntimePlatform == Device.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } else if (Device.RuntimePlatform == Device.Android) { PasswordCell.Button.WidthRequest = 40; if (TotpCell.Button != null) { TotpCell.Button.WidthRequest = 40; } } var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async() => { if (_lastAction.LastActionWasRecent()) { return; } _lastAction = DateTime.UtcNow; if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (string.IsNullOrWhiteSpace(NameCell.Entry.Text)) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.Name), AppResources.Ok); return; } var login = new Login { Name = NameCell.Entry.Text.Encrypt(), Uri = string.IsNullOrWhiteSpace(UriCell.Entry.Text) ? null : UriCell.Entry.Text.Encrypt(), Username = string.IsNullOrWhiteSpace(UsernameCell.Entry.Text) ? null : UsernameCell.Entry.Text.Encrypt(), Password = string.IsNullOrWhiteSpace(PasswordCell.Entry.Text) ? null : PasswordCell.Entry.Text.Encrypt(), Notes = string.IsNullOrWhiteSpace(NotesCell.Editor.Text) ? null : NotesCell.Editor.Text.Encrypt(), Totp = string.IsNullOrWhiteSpace(TotpCell.Entry.Text) ? null : TotpCell.Entry.Text.Encrypt(), Favorite = favoriteCell.On }; if (FolderCell.Picker.SelectedIndex > 0) { login.FolderId = folders.ElementAt(FolderCell.Picker.SelectedIndex - 1).Id; } _userDialogs.ShowLoading(AppResources.Saving, MaskType.Black); var saveTask = await _loginService.SaveAsync(login); _userDialogs.HideLoading(); if (saveTask.Succeeded) { _userDialogs.Toast(AppResources.NewLoginCreated); if (_fromAutofill) { _googleAnalyticsService.TrackExtensionEvent("CreatedLogin"); } else { _googleAnalyticsService.TrackAppEvent("CreatedLogin"); } await Navigation.PopForDeviceAsync(); } else if (saveTask.Errors.Count() > 0) { await _userDialogs.AlertAsync(saveTask.Errors.First().Message, AppResources.AnErrorHasOccurred); } else { await _userDialogs.AlertAsync(AppResources.AnErrorHasOccurred); } }, ToolbarItemOrder.Default, 0); Title = AppResources.AddLogin; Content = table; ToolbarItems.Add(saveToolBarItem); if (Device.RuntimePlatform == Device.iOS) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } }
public void Init() { Password = new Label { FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)), Margin = new Thickness(15, 30, 15, 30), HorizontalTextAlignment = TextAlignment.Center, FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier"), LineBreakMode = LineBreakMode.TailTruncation, VerticalOptions = LayoutOptions.Start, TextColor = Color.Black }; Tgr = new TapGestureRecognizer(); Password.GestureRecognizers.Add(Tgr); Password.SetBinding(Label.FormattedTextProperty, nameof(PasswordGeneratorPageModel.FormattedPassword)); SliderCell = new SliderViewCell(this, _passwordGenerationService, _settings); RegenerateCell = new ExtendedTextCell { Text = AppResources.RegeneratePassword, TextColor = Colors.Primary }; CopyCell = new ExtendedTextCell { Text = AppResources.CopyPassword, TextColor = Colors.Primary }; UppercaseCell = new ExtendedSwitchCell { Text = "A-Z", On = _settings.GetValueOrDefault(Constants.PasswordGeneratorUppercase, true) }; LowercaseCell = new ExtendedSwitchCell { Text = "a-z", On = _settings.GetValueOrDefault(Constants.PasswordGeneratorLowercase, true) }; SpecialCell = new ExtendedSwitchCell { Text = "!@#$%^&*", On = _settings.GetValueOrDefault(Constants.PasswordGeneratorSpecial, true) }; NumbersCell = new ExtendedSwitchCell { Text = "0-9", On = _settings.GetValueOrDefault(Constants.PasswordGeneratorNumbers, true) }; AvoidAmbiguousCell = new ExtendedSwitchCell { Text = AppResources.AvoidAmbiguousCharacters, On = !_settings.GetValueOrDefault(Constants.PasswordGeneratorAmbiguous, false) }; NumbersMinCell = new StepperCell(AppResources.MinNumbers, _settings.GetValueOrDefault(Constants.PasswordGeneratorMinNumbers, 1), 0, 5, 1, () => { _settings.AddOrUpdateValue(Constants.PasswordGeneratorMinNumbers, Convert.ToInt32(NumbersMinCell.Stepper.Value)); Model.Password = _passwordGenerationService.GeneratePassword(); }); SpecialMinCell = new StepperCell(AppResources.MinSpecial, _settings.GetValueOrDefault(Constants.PasswordGeneratorMinSpecial, 1), 0, 5, 1, () => { _settings.AddOrUpdateValue(Constants.PasswordGeneratorMinSpecial, Convert.ToInt32(SpecialMinCell.Stepper.Value)); Model.Password = _passwordGenerationService.GeneratePassword(); }); var table = new ExtendedTableView { VerticalOptions = LayoutOptions.Start, EnableScrolling = false, Intent = TableIntent.Settings, HasUnevenRows = true, NoHeader = true, Root = new TableRoot { new TableSection(Helpers.GetEmptyTableSectionTitle()) { RegenerateCell, CopyCell }, new TableSection(AppResources.Options) { SliderCell, UppercaseCell, LowercaseCell, NumbersCell, SpecialCell }, new TableSection(Helpers.GetEmptyTableSectionTitle()) { NumbersMinCell, SpecialMinCell }, new TableSection(Helpers.GetEmptyTableSectionTitle()) { AvoidAmbiguousCell } } }; if (Device.RuntimePlatform == Device.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 44; if (_passwordValueAction != null) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } } else if (Device.RuntimePlatform == Device.Android) { table.BottomPadding = 50; } var stackLayout = new RedrawableStackLayout { Orientation = StackOrientation.Vertical, Children = { Password, table }, VerticalOptions = LayoutOptions.FillAndExpand, Spacing = 0 }; table.WrappingStackLayout = () => stackLayout; var scrollView = new ScrollView { Content = stackLayout, Orientation = ScrollOrientation.Vertical, VerticalOptions = LayoutOptions.FillAndExpand }; if (_passwordValueAction != null) { var selectToolBarItem = new ToolbarItem(AppResources.Select, Helpers.ToolbarImage("ion_chevron_right.png"), async() => { if (_fromAutofill) { _googleAnalyticsService.TrackExtensionEvent("SelectedGeneratedPassword"); } else { _googleAnalyticsService.TrackAppEvent("SelectedGeneratedPassword"); } _passwordValueAction(Model.Password); await Navigation.PopForDeviceAsync(); }, ToolbarItemOrder.Default, 0); ToolbarItems.Add(selectToolBarItem); } Title = AppResources.PasswordGenerator; Content = scrollView; BindingContext = Model; }
private void Init() { var notesCell = new FormEditorCell(height: 90); PasswordCell = new FormEntryCell(AppResources.Password, IsPassword: true, nextElement: notesCell.Editor); var usernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry); usernameCell.Entry.DisableAutocapitalize = true; usernameCell.Entry.Autocorrect = false; usernameCell.Entry.FontFamily = PasswordCell.Entry.FontFamily = Device.OnPlatform( iOS: "Courier", Android: "monospace", WinPhone: "Courier"); var uriCell = new FormEntryCell(AppResources.URI, Keyboard.Url, nextElement: usernameCell.Entry); var nameCell = new FormEntryCell(AppResources.Name, nextElement: uriCell.Entry); var folderOptions = new List <string> { AppResources.FolderNone }; var folders = _folderService.GetAllAsync().GetAwaiter().GetResult() .OrderBy(f => f.Name?.Decrypt()).ToList(); foreach (var folder in folders) { folderOptions.Add(folder.Name.Decrypt()); } var folderCell = new FormPickerCell(AppResources.Folder, folderOptions.ToArray()); var generateCell = new ExtendedTextCell { Text = "Generate Password", ShowDisclousure = true }; generateCell.Tapped += GenerateCell_Tapped;; var favoriteCell = new ExtendedSwitchCell { Text = "Favorite" }; var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = true, HasUnevenRows = true, Root = new TableRoot { new TableSection("Site Information") { nameCell, uriCell, usernameCell, PasswordCell, generateCell }, new TableSection { folderCell, favoriteCell }, new TableSection(AppResources.Notes) { notesCell } } }; if (Device.OS == TargetPlatform.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async() => { if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (string.IsNullOrWhiteSpace(nameCell.Entry.Text)) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.Name), AppResources.Ok); return; } var site = new Site { Uri = uriCell.Entry.Text?.Encrypt(), Name = nameCell.Entry.Text?.Encrypt(), Username = usernameCell.Entry.Text?.Encrypt(), Password = PasswordCell.Entry.Text?.Encrypt(), Notes = notesCell.Editor.Text?.Encrypt(), Favorite = favoriteCell.On }; if (folderCell.Picker.SelectedIndex > 0) { site.FolderId = folders.ElementAt(folderCell.Picker.SelectedIndex - 1).Id; } _userDialogs.ShowLoading("Saving...", MaskType.Black); var saveTask = await _siteService.SaveAsync(site); _userDialogs.HideLoading(); if (saveTask.Succeeded) { await Navigation.PopForDeviceAsync(); _userDialogs.Toast("New site created."); _googleAnalyticsService.TrackAppEvent("CreatedSite"); } else if (saveTask.Errors.Count() > 0) { await _userDialogs.AlertAsync(saveTask.Errors.First().Message, AppResources.AnErrorHasOccurred); } else { await _userDialogs.AlertAsync(AppResources.AnErrorHasOccurred); } }, ToolbarItemOrder.Default, 0); Title = AppResources.AddSite; Content = table; ToolbarItems.Add(saveToolBarItem); if (Device.OS == TargetPlatform.iOS) { ToolbarItems.Add(new DismissModalToolBarItem(this, "Cancel")); } }
private void InitTable() { // Sections TopSection = new TableSection(AppResources.ItemInformation) { NameCell }; MiddleSection = new TableSection(Helpers.GetEmptyTableSectionTitle()) { FolderCell, FavoriteCell }; if (_type == CipherType.Login) { LoginTotpCell = new FormEntryCell(AppResources.AuthenticatorKey, nextElement: NotesCell.Editor, useButton: _deviceInfo.HasCamera); if (_deviceInfo.HasCamera) { LoginTotpCell.Button.Image = "camera.png"; } LoginTotpCell.Entry.DisableAutocapitalize = true; LoginTotpCell.Entry.Autocorrect = false; LoginTotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier"); LoginPasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: LoginTotpCell.Entry, useButton: true); LoginPasswordCell.Button.Image = "eye.png"; LoginPasswordCell.Entry.DisableAutocapitalize = true; LoginPasswordCell.Entry.Autocorrect = false; LoginPasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", WinPhone: "Courier"); if (!string.IsNullOrWhiteSpace(_defaultPassword)) { LoginPasswordCell.Entry.Text = _defaultPassword; } LoginGenerateCell = new ExtendedTextCell { Text = AppResources.GeneratePassword, ShowDisclousure = true }; LoginUsernameCell = new FormEntryCell(AppResources.Username, nextElement: LoginPasswordCell.Entry); LoginUsernameCell.Entry.DisableAutocapitalize = true; LoginUsernameCell.Entry.Autocorrect = false; if (!string.IsNullOrWhiteSpace(_defaultUsername)) { LoginUsernameCell.Entry.Text = _defaultUsername; } LoginUriCell = new FormEntryCell(AppResources.URI, Keyboard.Url, nextElement: LoginUsernameCell.Entry); if (!string.IsNullOrWhiteSpace(_defaultUri)) { LoginUriCell.Entry.Text = _defaultUri; } NameCell.NextElement = LoginUriCell.Entry; // Build sections TopSection.Add(LoginUriCell); TopSection.Add(LoginUsernameCell); TopSection.Add(LoginPasswordCell); TopSection.Add(LoginGenerateCell); MiddleSection.Insert(0, LoginTotpCell); } else if (_type == CipherType.Card) { CardCodeCell = new FormEntryCell(AppResources.SecurityCode, Keyboard.Numeric, nextElement: NotesCell.Editor); if (!string.IsNullOrWhiteSpace(_defaultCardCode)) { CardCodeCell.Entry.Text = _defaultCardCode; } CardExpYearCell = new FormEntryCell(AppResources.ExpirationYear, Keyboard.Numeric, nextElement: CardCodeCell.Entry); if (!string.IsNullOrWhiteSpace(_defaultCardExpYear)) { CardExpYearCell.Entry.Text = _defaultCardExpYear; } CardExpMonthCell = new FormPickerCell(AppResources.ExpirationMonth, new string[] { "--", AppResources.January, AppResources.February, AppResources.March, AppResources.April, AppResources.May, AppResources.June, AppResources.July, AppResources.August, AppResources.September, AppResources.October, AppResources.November, AppResources.December }); if (_defaultCardExpMonth.HasValue) { CardExpMonthCell.Picker.SelectedIndex = _defaultCardExpMonth.Value; } CardBrandCell = new FormPickerCell(AppResources.Brand, new string[] { "--", "Visa", "Mastercard", "American Express", "Discover", "Diners Club", "JCB", "Maestro", "UnionPay", AppResources.Other }); CardNumberCell = new FormEntryCell(AppResources.Number, Keyboard.Numeric); if (!string.IsNullOrWhiteSpace(_defaultCardNumber)) { CardNumberCell.Entry.Text = _defaultCardNumber; } CardNameCell = new FormEntryCell(AppResources.CardholderName, nextElement: CardNumberCell.Entry); if (!string.IsNullOrWhiteSpace(_defaultCardName)) { CardNameCell.Entry.Text = _defaultCardName; } NameCell.NextElement = CardNameCell.Entry; // Build sections TopSection.Add(CardNameCell); TopSection.Add(CardNumberCell); TopSection.Add(CardBrandCell); TopSection.Add(CardExpMonthCell); TopSection.Add(CardExpYearCell); TopSection.Add(CardCodeCell); } else if (_type == CipherType.Identity) { IdCountryCell = new FormEntryCell(AppResources.Country, nextElement: NotesCell.Editor); IdPostalCodeCell = new FormEntryCell(AppResources.ZipPostalCode, nextElement: IdCountryCell.Entry); IdPostalCodeCell.Entry.DisableAutocapitalize = true; IdPostalCodeCell.Entry.Autocorrect = false; IdStateCell = new FormEntryCell(AppResources.StateProvince, nextElement: IdPostalCodeCell.Entry); IdCityCell = new FormEntryCell(AppResources.CityTown, nextElement: IdStateCell.Entry); IdAddress3Cell = new FormEntryCell(AppResources.Address3, nextElement: IdCityCell.Entry); IdAddress2Cell = new FormEntryCell(AppResources.Address2, nextElement: IdAddress3Cell.Entry); IdAddress1Cell = new FormEntryCell(AppResources.Address1, nextElement: IdAddress2Cell.Entry); IdPhoneCell = new FormEntryCell(AppResources.Phone, nextElement: IdAddress1Cell.Entry); IdPhoneCell.Entry.DisableAutocapitalize = true; IdPhoneCell.Entry.Autocorrect = false; IdEmailCell = new FormEntryCell(AppResources.Email, Keyboard.Email, nextElement: IdPhoneCell.Entry); IdEmailCell.Entry.DisableAutocapitalize = true; IdEmailCell.Entry.Autocorrect = false; IdLicenseNumberCell = new FormEntryCell(AppResources.LicenseNumber, nextElement: IdEmailCell.Entry); IdLicenseNumberCell.Entry.DisableAutocapitalize = true; IdLicenseNumberCell.Entry.Autocorrect = false; IdPassportNumberCell = new FormEntryCell(AppResources.PassportNumber, nextElement: IdLicenseNumberCell.Entry); IdPassportNumberCell.Entry.DisableAutocapitalize = true; IdPassportNumberCell.Entry.Autocorrect = false; IdSsnCell = new FormEntryCell(AppResources.SSN, nextElement: IdPassportNumberCell.Entry); IdSsnCell.Entry.DisableAutocapitalize = true; IdSsnCell.Entry.Autocorrect = false; IdCompanyCell = new FormEntryCell(AppResources.Company, nextElement: IdSsnCell.Entry); IdUsernameCell = new FormEntryCell(AppResources.Username, nextElement: IdCompanyCell.Entry); IdUsernameCell.Entry.DisableAutocapitalize = true; IdUsernameCell.Entry.Autocorrect = false; IdLastNameCell = new FormEntryCell(AppResources.LastName, nextElement: IdUsernameCell.Entry); IdMiddleNameCell = new FormEntryCell(AppResources.MiddleName, nextElement: IdLastNameCell.Entry); IdFirstNameCell = new FormEntryCell(AppResources.FirstName, nextElement: IdMiddleNameCell.Entry); IdTitleCell = new FormPickerCell(AppResources.Title, new string[] { "--", AppResources.Mr, AppResources.Mrs, AppResources.Ms, AppResources.Dr }); // Name NameCell.NextElement = IdFirstNameCell.Entry; // Build sections TopSection.Add(IdTitleCell); TopSection.Add(IdFirstNameCell); TopSection.Add(IdMiddleNameCell); TopSection.Add(IdLastNameCell); TopSection.Add(IdUsernameCell); TopSection.Add(IdCompanyCell); TopSection.Add(IdSsnCell); TopSection.Add(IdPassportNumberCell); TopSection.Add(IdLicenseNumberCell); TopSection.Add(IdEmailCell); TopSection.Add(IdPhoneCell); TopSection.Add(IdAddress1Cell); TopSection.Add(IdAddress2Cell); TopSection.Add(IdAddress3Cell); TopSection.Add(IdCityCell); TopSection.Add(IdStateCell); TopSection.Add(IdPostalCodeCell); TopSection.Add(IdCountryCell); } else if (_type == CipherType.SecureNote) { // Name NameCell.NextElement = NotesCell.Editor; } // Make table TableRoot = new TableRoot { TopSection, MiddleSection, new TableSection(AppResources.Notes) { NotesCell } }; Table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = true, HasUnevenRows = true, Root = TableRoot }; if (Device.RuntimePlatform == Device.iOS) { Table.RowHeight = -1; Table.EstimatedRowHeight = 70; } }
private void Init() { _canUseAttachments = _cryptoService.EncKey != null; SubscribeFileResult(true); var selectButton = new ExtendedButton { Text = AppResources.ChooseFile, Command = new Command(async() => await _deviceActionService.SelectFileAsync()), Style = (Style)Application.Current.Resources["btn-primaryAccent"], FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Button)) }; FileLabel = new Label { Text = AppResources.NoFileChosen, Style = (Style)Application.Current.Resources["text-muted"], FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label)), HorizontalTextAlignment = TextAlignment.Center }; AddNewStackLayout = new StackLayout { Children = { selectButton, FileLabel }, Orientation = StackOrientation.Vertical, Padding = new Thickness(20, Helpers.OnPlatform(iOS: 10, Android: 20), 20, 20), VerticalOptions = LayoutOptions.Start }; NewTable = new ExtendedTableView { Intent = TableIntent.Settings, HasUnevenRows = true, NoFooter = true, EnableScrolling = false, EnableSelection = false, VerticalOptions = LayoutOptions.Start, Margin = new Thickness(0, Helpers.OnPlatform(iOS: 10, Android: 30), 0, 0), Root = new TableRoot { new TableSection(AppResources.AddNewAttachment) { new ExtendedViewCell { View = AddNewStackLayout, BackgroundColor = Color.White } } } }; ListView = new ListView(ListViewCachingStrategy.RecycleElement) { ItemsSource = PresentationAttchments, HasUnevenRows = true, ItemTemplate = new DataTemplate(() => new VaultAttachmentsViewCell()), VerticalOptions = LayoutOptions.FillAndExpand }; if (_tokenService.TokenPremium) { ListView.Footer = NewTable; } NoDataLabel = new Label { Text = AppResources.NoAttachments, HorizontalTextAlignment = TextAlignment.Center, FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label)), Style = (Style)Application.Current.Resources["text-muted"] }; NoDataStackLayout = new StackLayout { VerticalOptions = LayoutOptions.Start, Spacing = 0, Margin = new Thickness(0, 40, 0, 0) }; var saveToolBarItem = new ToolbarItem(AppResources.Save, Helpers.ToolbarImage("envelope.png"), async() => { if (_lastAction.LastActionWasRecent() || _cipher == null) { return; } _lastAction = DateTime.UtcNow; if (!_canUseAttachments) { await ShowUpdateKeyAsync(); return; } if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (_fileBytes == null) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.File), AppResources.Ok); return; } _deviceActionService.ShowLoading(AppResources.Saving); var saveTask = await _cipherService.EncryptAndSaveAttachmentAsync(_cipher, _fileBytes, FileLabel.Text); _deviceActionService.HideLoading(); if (saveTask.Succeeded) { _fileBytes = null; FileLabel.Text = AppResources.NoFileChosen; _deviceActionService.Toast(AppResources.AttachementAdded); _googleAnalyticsService.TrackAppEvent("AddedAttachment"); await LoadAttachmentsAsync(); } else if (saveTask.Errors.Count() > 0) { await DisplayAlert(AppResources.AnErrorHasOccurred, saveTask.Errors.First().Message, AppResources.Ok); } else { await DisplayAlert(null, AppResources.AnErrorHasOccurred, AppResources.Ok); } }, ToolbarItemOrder.Default, 0); Title = AppResources.Attachments; Content = ListView; if (_tokenService.TokenPremium) { ToolbarItems.Add(saveToolBarItem); } if (Device.RuntimePlatform == Device.iOS) { ListView.RowHeight = -1; NewTable.RowHeight = -1; NewTable.EstimatedRowHeight = 44; NewTable.HeightRequest = 180; ListView.BackgroundColor = Color.Transparent; ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Close)); } }
private void Init() { var nameCell = new FormEntryCell(AppResources.Name); var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = false, HasUnevenRows = true, Root = new TableRoot { new TableSection() { nameCell } } }; if (Device.OS == TargetPlatform.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async() => { if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (string.IsNullOrWhiteSpace(nameCell.Entry.Text)) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.Name), AppResources.Ok); return; } var folder = new Folder { Name = nameCell.Entry.Text.Encrypt() }; _userDialogs.ShowLoading(AppResources.Saving, MaskType.Black); var saveResult = await _folderService.SaveAsync(folder); _userDialogs.HideLoading(); if (saveResult.Succeeded) { await Navigation.PopForDeviceAsync(); _userDialogs.Toast(AppResources.FolderCreated); _googleAnalyticsService.TrackAppEvent("CreatedFolder"); } else if (saveResult.Errors.Count() > 0) { await _userDialogs.AlertAsync(saveResult.Errors.First().Message, AppResources.AnErrorHasOccurred); } else { await _userDialogs.AlertAsync(AppResources.AnErrorHasOccurred); } }, ToolbarItemOrder.Default, 0); Title = AppResources.AddFolder; Content = table; ToolbarItems.Add(saveToolBarItem); if (Device.OS == TargetPlatform.iOS) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } }
public void Init() { var padding = Helpers.OnPlatform( iOS: new Thickness(15, 20), Android: new Thickness(15, 8), WinPhone: new Thickness(15, 20)); PasswordCell = new FormEntryCell(AppResources.MasterPassword, isPassword: true, useLabelAsPlaceholder: true, imageSource: "lock", containerPadding: padding); PasswordCell.Entry.ReturnType = Enums.ReturnType.Go; var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = false, HasUnevenRows = true, EnableSelection = false, VerticalOptions = LayoutOptions.Start, NoFooter = true, Root = new TableRoot { new TableSection(" ") { PasswordCell } } }; var logoutButton = new ExtendedButton { Text = AppResources.LogOut, Command = new Command(async() => await LogoutAsync()), VerticalOptions = LayoutOptions.End, Style = (Style)Application.Current.Resources["btn-primaryAccent"], BackgroundColor = Color.Transparent, Uppercase = false }; var stackLayout = new StackLayout { Spacing = 10, Children = { table, logoutButton } }; var scrollView = new ScrollView { Content = stackLayout }; if (Device.RuntimePlatform == Device.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } var loginToolbarItem = new ToolbarItem(AppResources.Submit, null, async() => { await CheckPasswordAsync(); }, ToolbarItemOrder.Default, 0); ToolbarItems.Add(loginToolbarItem); Title = AppResources.VerifyMasterPassword; Content = scrollView; }
private void Init() { var login = _loginService.GetByIdAsync(_loginId).GetAwaiter().GetResult(); if (login == null) { // TODO: handle error. navigate back? should never happen... return; } NotesCell = new FormEditorCell(height: 90); NotesCell.Editor.Text = login.Notes?.Decrypt(); PasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: NotesCell.Editor, useButton: true); PasswordCell.Entry.Text = login.Password?.Decrypt(); PasswordCell.Button.Image = "eye"; PasswordCell.Entry.DisableAutocapitalize = true; PasswordCell.Entry.Autocorrect = false; PasswordCell.Entry.FontFamily = Device.OnPlatform(iOS: "Courier", Android: "monospace", WinPhone: "Courier"); UsernameCell = new FormEntryCell(AppResources.Username, nextElement: PasswordCell.Entry); UsernameCell.Entry.Text = login.Username?.Decrypt(); UsernameCell.Entry.DisableAutocapitalize = true; UsernameCell.Entry.Autocorrect = false; UriCell = new FormEntryCell(AppResources.URI, Keyboard.Url, nextElement: UsernameCell.Entry); UriCell.Entry.Text = login.Uri?.Decrypt(); NameCell = new FormEntryCell(AppResources.Name, nextElement: UriCell.Entry); NameCell.Entry.Text = login.Name?.Decrypt(); GenerateCell = new ExtendedTextCell { Text = AppResources.GeneratePassword, ShowDisclousure = true }; var folderOptions = new List <string> { AppResources.FolderNone }; var folders = _folderService.GetAllAsync().GetAwaiter().GetResult() .OrderBy(f => f.Name?.Decrypt()).ToList(); int selectedIndex = 0; int i = 0; foreach (var folder in folders) { i++; if (folder.Id == login.FolderId) { selectedIndex = i; } folderOptions.Add(folder.Name.Decrypt()); } FolderCell = new FormPickerCell(AppResources.Folder, folderOptions.ToArray()); FolderCell.Picker.SelectedIndex = selectedIndex; var favoriteCell = new ExtendedSwitchCell { Text = AppResources.Favorite, On = login.Favorite }; DeleteCell = new ExtendedTextCell { Text = AppResources.Delete, TextColor = Color.Red }; var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = true, HasUnevenRows = true, Root = new TableRoot { new TableSection(AppResources.LoginInformation) { NameCell, UriCell, UsernameCell, PasswordCell, GenerateCell }, new TableSection { FolderCell, favoriteCell }, new TableSection(AppResources.Notes) { NotesCell }, new TableSection { DeleteCell } } }; if (Device.OS == TargetPlatform.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } else if (Device.OS == TargetPlatform.Android) { PasswordCell.Button.WidthRequest = 40; } var saveToolBarItem = new ToolbarItem(AppResources.Save, null, async() => { if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (string.IsNullOrWhiteSpace(NameCell.Entry.Text)) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.Name), AppResources.Ok); return; } login.Uri = UriCell.Entry.Text?.Encrypt(); login.Name = NameCell.Entry.Text?.Encrypt(); login.Username = UsernameCell.Entry.Text?.Encrypt(); login.Password = PasswordCell.Entry.Text?.Encrypt(); login.Notes = NotesCell.Editor.Text?.Encrypt(); login.Favorite = favoriteCell.On; if (FolderCell.Picker.SelectedIndex > 0) { login.FolderId = folders.ElementAt(FolderCell.Picker.SelectedIndex - 1).Id; } else { login.FolderId = null; } _userDialogs.ShowLoading(AppResources.Saving, MaskType.Black); var saveTask = await _loginService.SaveAsync(login); _userDialogs.HideLoading(); if (saveTask.Succeeded) { await Navigation.PopForDeviceAsync(); _userDialogs.Toast(AppResources.LoginUpdated); _googleAnalyticsService.TrackAppEvent("EditeLogin"); } else if (saveTask.Errors.Count() > 0) { await _userDialogs.AlertAsync(saveTask.Errors.First().Message, AppResources.AnErrorHasOccurred); } else { await _userDialogs.AlertAsync(AppResources.AnErrorHasOccurred); } }, ToolbarItemOrder.Default, 0); Title = AppResources.EditLogin; Content = table; ToolbarItems.Add(saveToolBarItem); if (Device.OS == TargetPlatform.iOS) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } }
private void Init() { var folder = _folderService.GetByIdAsync(_folderId).GetAwaiter().GetResult(); if (folder == null) { // TODO: handle error. navigate back? should never happen... return; } NameCell = new FormEntryCell(AppResources.Name); NameCell.Entry.Text = folder.Name.Decrypt(); DeleteCell = new ExtendedTextCell { Text = AppResources.Delete, TextColor = Color.Red }; var mainTable = new ExtendedTableView { Intent = TableIntent.Settings, HasUnevenRows = true, Root = new TableRoot { new TableSection(Helpers.GetEmptyTableSectionTitle()) { NameCell }, new TableSection(Helpers.GetEmptyTableSectionTitle()) { DeleteCell } } }; if (Device.RuntimePlatform == Device.iOS) { mainTable.RowHeight = -1; mainTable.EstimatedRowHeight = 70; } else if (Device.RuntimePlatform == Device.Android) { mainTable.BottomPadding = 50; } var saveToolBarItem = new ToolbarItem(AppResources.Save, Helpers.ToolbarImage("envelope.png"), async() => { if (_lastAction.LastActionWasRecent()) { return; } _lastAction = DateTime.UtcNow; if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (string.IsNullOrWhiteSpace(NameCell.Entry.Text)) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.Name), AppResources.Ok); return; } folder.Name = NameCell.Entry.Text.Encrypt(); await _deviceActionService.ShowLoadingAsync(AppResources.Saving); var saveResult = await _folderService.SaveAsync(folder); await _deviceActionService.HideLoadingAsync(); if (saveResult.Succeeded) { _deviceActionService.Toast(AppResources.FolderUpdated); _googleAnalyticsService.TrackAppEvent("EditedFolder"); await Navigation.PopForDeviceAsync(); } else if (saveResult.Errors.Count() > 0) { await DisplayAlert(AppResources.AnErrorHasOccurred, saveResult.Errors.First().Message, AppResources.Ok); } else { await DisplayAlert(null, AppResources.AnErrorHasOccurred, AppResources.Ok); } }, ToolbarItemOrder.Default, 0); Title = AppResources.EditFolder; Content = mainTable; ToolbarItems.Add(saveToolBarItem); if (Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.UWP) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } }
private void Init() { var padding = Helpers.OnPlatform( iOS: new Thickness(15, 20), Android: new Thickness(15, 8), Windows: new Thickness(10, 8)); EmailCell = new FormEntryCell(AppResources.EmailAddress, entryKeyboard: Keyboard.Email, useLabelAsPlaceholder: true, imageSource: "envelope.png", containerPadding: padding); EmailCell.Entry.TargetReturnType = Enums.ReturnType.Go; var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = false, HasUnevenRows = true, EnableSelection = true, NoFooter = true, VerticalOptions = LayoutOptions.Start, Root = new TableRoot { new TableSection(Helpers.GetEmptyTableSectionTitle()) { EmailCell } } }; var hintLabel = new Label { Text = AppResources.EnterEmailForHint, LineBreakMode = LineBreakMode.WordWrap, FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label)), Style = (Style)Application.Current.Resources["text-muted"], Margin = new Thickness(15, (this.IsLandscape() ? 5 : 0), 15, 25) }; var layout = new RedrawableStackLayout { Children = { table, hintLabel }, Spacing = 0 }; table.WrappingStackLayout = () => layout; var scrollView = new ScrollView { Content = layout }; if (Device.RuntimePlatform == Device.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } var submitToolbarItem = new ToolbarItem(AppResources.Submit, Helpers.ToolbarImage("ion_chevron_right.png"), async() => { await SubmitAsync(); }, ToolbarItemOrder.Default, 0); ToolbarItems.Add(submitToolbarItem); Title = AppResources.PasswordHint; Content = scrollView; }
public void Init() { var logo = new CachedImage { Source = "logo.png", HorizontalOptions = LayoutOptions.Center, WidthRequest = 282, HeightRequest = 44 }; var versionLabel = new Label { FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)), Text = $@"{AppResources.Version} {_appInfoService.Version} ({_appInfoService.Build}) © 8bit Solutions LLC 2015-{DateTime.Now.Year}", HorizontalTextAlignment = TextAlignment.Center }; var logoVersionStackLayout = new StackLayout { Children = { logo, versionLabel }, Spacing = 20, Padding = new Thickness(0, 40, 0, 0) }; CreditsCell = new ExtendedTextCell { Text = AppResources.Credits, ShowDisclousure = true }; var table = new ExtendedTableView { VerticalOptions = LayoutOptions.Start, EnableScrolling = false, Intent = TableIntent.Settings, HasUnevenRows = true, Root = new TableRoot { new TableSection(Helpers.GetEmptyTableSectionTitle()) { CreditsCell } } }; if (Device.RuntimePlatform == Device.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 44; } var stackLayout = new StackLayout { Children = { logoVersionStackLayout, table }, Spacing = 0 }; if (Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.Windows) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Close)); } Title = AppResources.About; Content = new ScrollView { Content = stackLayout }; }
private void InitTable() { AttachmentsCell = new ExtendedTextCell { Text = AppResources.Attachments, ShowDisclousure = true }; // Sections TopSection = new TableSection(AppResources.ItemInformation) { NameCell }; MiddleSection = new TableSection(Helpers.GetEmptyTableSectionTitle()) { FolderCell, FavoriteCell, AttachmentsCell }; // Types if (Cipher.Type == CipherType.Login) { LoginTotpCell = new FormEntryCell(AppResources.AuthenticatorKey, button1: _deviceInfo.HasCamera ? "camera.png" : null); LoginTotpCell.Entry.Text = Cipher.Login?.Totp?.Decrypt(Cipher.OrganizationId); LoginTotpCell.Entry.DisableAutocapitalize = true; LoginTotpCell.Entry.Autocorrect = false; LoginTotpCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier"); LoginPasswordCell = new FormEntryCell(AppResources.Password, isPassword: true, nextElement: LoginTotpCell.Entry, button1: "eye.png", button2: "refresh_alt.png"); LoginPasswordCell.Entry.Text = _originalLoginPassword = Cipher.Login?.Password?.Decrypt(Cipher.OrganizationId); LoginPasswordCell.Entry.DisableAutocapitalize = true; LoginPasswordCell.Entry.Autocorrect = false; LoginPasswordCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier"); LoginUsernameCell = new FormEntryCell(AppResources.Username, nextElement: LoginPasswordCell.Entry); LoginUsernameCell.Entry.Text = Cipher.Login?.Username?.Decrypt(Cipher.OrganizationId); LoginUsernameCell.Entry.DisableAutocapitalize = true; LoginUsernameCell.Entry.Autocorrect = false; // Name NameCell.NextElement = LoginUsernameCell.Entry; // Build sections TopSection.Add(LoginUsernameCell); TopSection.Add(LoginPasswordCell); TopSection.Add(LoginTotpCell); // Uris UrisSection = new TableSection(Helpers.GetEmptyTableSectionTitle()); AddUriCell = new ExtendedTextCell { Text = $"+ {AppResources.NewUri}", TextColor = Colors.Primary }; UrisSection.Add(AddUriCell); if (Cipher.Login?.Uris != null) { foreach (var uri in Cipher.Login.Uris) { var value = uri.Uri?.Decrypt(Cipher.OrganizationId); UrisSection.Insert(UrisSection.Count - 1, Helpers.MakeUriCell(value, uri.Match, UrisSection, this)); } } } else if (Cipher.Type == CipherType.Card) { CardCodeCell = new FormEntryCell(AppResources.SecurityCode, Keyboard.Numeric, isPassword: true, nextElement: NotesCell.Editor, button1: "eye.png"); CardCodeCell.Entry.Text = Cipher.Card.Code?.Decrypt(Cipher.OrganizationId); CardCodeCell.Entry.FontFamily = Helpers.OnPlatform(iOS: "Menlo-Regular", Android: "monospace", Windows: "Courier"); CardExpYearCell = new FormEntryCell(AppResources.ExpirationYear, Keyboard.Numeric, nextElement: CardCodeCell.Entry); CardExpYearCell.Entry.Text = Cipher.Card.ExpYear?.Decrypt(Cipher.OrganizationId); var month = Cipher.Card.ExpMonth?.Decrypt(Cipher.OrganizationId); CardExpMonthCell = new FormPickerCell(AppResources.ExpirationMonth, new string[] { "--", AppResources.January, AppResources.February, AppResources.March, AppResources.April, AppResources.May, AppResources.June, AppResources.July, AppResources.August, AppResources.September, AppResources.October, AppResources.November, AppResources.December }); if (!string.IsNullOrWhiteSpace(month) && int.TryParse(month, out int monthIndex)) { CardExpMonthCell.Picker.SelectedIndex = monthIndex; } else { CardExpMonthCell.Picker.SelectedIndex = 0; } var brandOptions = new string[] { "--", "Visa", "Mastercard", "American Express", "Discover", "Diners Club", "JCB", "Maestro", "UnionPay", AppResources.Other }; var brand = Cipher.Card.Brand?.Decrypt(Cipher.OrganizationId); CardBrandCell = new FormPickerCell(AppResources.Brand, brandOptions); CardBrandCell.Picker.SelectedIndex = 0; if (!string.IsNullOrWhiteSpace(brand)) { var i = 0; foreach (var o in brandOptions) { var option = o; if (option == AppResources.Other) { option = "Other"; } if (option == brand) { CardBrandCell.Picker.SelectedIndex = i; break; } i++; } } CardNumberCell = new FormEntryCell(AppResources.Number, Keyboard.Numeric); CardNumberCell.Entry.Text = Cipher.Card.Number?.Decrypt(Cipher.OrganizationId); CardNameCell = new FormEntryCell(AppResources.CardholderName, nextElement: CardNumberCell.Entry); CardNameCell.Entry.Text = Cipher.Card.CardholderName?.Decrypt(Cipher.OrganizationId); // Name NameCell.NextElement = CardNameCell.Entry; // Build sections TopSection.Add(CardNameCell); TopSection.Add(CardNumberCell); TopSection.Add(CardBrandCell); TopSection.Add(CardExpMonthCell); TopSection.Add(CardExpYearCell); TopSection.Add(CardCodeCell); } else if (Cipher.Type == CipherType.Identity) { IdCountryCell = new FormEntryCell(AppResources.Country, nextElement: NotesCell.Editor); IdCountryCell.Entry.Text = Cipher.Identity.Country?.Decrypt(Cipher.OrganizationId); IdPostalCodeCell = new FormEntryCell(AppResources.ZipPostalCode, nextElement: IdCountryCell.Entry); IdPostalCodeCell.Entry.Text = Cipher.Identity.PostalCode?.Decrypt(Cipher.OrganizationId); IdPostalCodeCell.Entry.DisableAutocapitalize = true; IdPostalCodeCell.Entry.Autocorrect = false; IdStateCell = new FormEntryCell(AppResources.StateProvince, nextElement: IdPostalCodeCell.Entry); IdStateCell.Entry.Text = Cipher.Identity.State?.Decrypt(Cipher.OrganizationId); IdCityCell = new FormEntryCell(AppResources.CityTown, nextElement: IdStateCell.Entry); IdCityCell.Entry.Text = Cipher.Identity.City?.Decrypt(Cipher.OrganizationId); IdAddress3Cell = new FormEntryCell(AppResources.Address3, nextElement: IdCityCell.Entry); IdAddress3Cell.Entry.Text = Cipher.Identity.Address3?.Decrypt(Cipher.OrganizationId); IdAddress2Cell = new FormEntryCell(AppResources.Address2, nextElement: IdAddress3Cell.Entry); IdAddress2Cell.Entry.Text = Cipher.Identity.Address2?.Decrypt(Cipher.OrganizationId); IdAddress1Cell = new FormEntryCell(AppResources.Address1, nextElement: IdAddress2Cell.Entry); IdAddress1Cell.Entry.Text = Cipher.Identity.Address1?.Decrypt(Cipher.OrganizationId); IdPhoneCell = new FormEntryCell(AppResources.Phone, nextElement: IdAddress1Cell.Entry); IdPhoneCell.Entry.Text = Cipher.Identity.Phone?.Decrypt(Cipher.OrganizationId); IdPhoneCell.Entry.DisableAutocapitalize = true; IdPhoneCell.Entry.Autocorrect = false; IdEmailCell = new FormEntryCell(AppResources.Email, Keyboard.Email, nextElement: IdPhoneCell.Entry); IdEmailCell.Entry.Text = Cipher.Identity.Email?.Decrypt(Cipher.OrganizationId); IdEmailCell.Entry.DisableAutocapitalize = true; IdEmailCell.Entry.Autocorrect = false; IdLicenseNumberCell = new FormEntryCell(AppResources.LicenseNumber, nextElement: IdEmailCell.Entry); IdLicenseNumberCell.Entry.Text = Cipher.Identity.LicenseNumber?.Decrypt(Cipher.OrganizationId); IdLicenseNumberCell.Entry.DisableAutocapitalize = true; IdLicenseNumberCell.Entry.Autocorrect = false; IdPassportNumberCell = new FormEntryCell(AppResources.PassportNumber, nextElement: IdLicenseNumberCell.Entry); IdPassportNumberCell.Entry.Text = Cipher.Identity.PassportNumber?.Decrypt(Cipher.OrganizationId); IdPassportNumberCell.Entry.DisableAutocapitalize = true; IdPassportNumberCell.Entry.Autocorrect = false; IdSsnCell = new FormEntryCell(AppResources.SSN, nextElement: IdPassportNumberCell.Entry); IdSsnCell.Entry.Text = Cipher.Identity.SSN?.Decrypt(Cipher.OrganizationId); IdSsnCell.Entry.DisableAutocapitalize = true; IdSsnCell.Entry.Autocorrect = false; IdCompanyCell = new FormEntryCell(AppResources.Company, nextElement: IdSsnCell.Entry); IdCompanyCell.Entry.Text = Cipher.Identity.Company?.Decrypt(Cipher.OrganizationId); IdUsernameCell = new FormEntryCell(AppResources.Username, nextElement: IdCompanyCell.Entry); IdUsernameCell.Entry.Text = Cipher.Identity.Username?.Decrypt(Cipher.OrganizationId); IdUsernameCell.Entry.DisableAutocapitalize = true; IdUsernameCell.Entry.Autocorrect = false; IdLastNameCell = new FormEntryCell(AppResources.LastName, nextElement: IdUsernameCell.Entry); IdLastNameCell.Entry.Text = Cipher.Identity.LastName?.Decrypt(Cipher.OrganizationId); IdMiddleNameCell = new FormEntryCell(AppResources.MiddleName, nextElement: IdLastNameCell.Entry); IdMiddleNameCell.Entry.Text = Cipher.Identity.MiddleName?.Decrypt(Cipher.OrganizationId); IdFirstNameCell = new FormEntryCell(AppResources.FirstName, nextElement: IdMiddleNameCell.Entry); IdFirstNameCell.Entry.Text = Cipher.Identity.FirstName?.Decrypt(Cipher.OrganizationId); var titleOptions = new string[] { "--", AppResources.Mr, AppResources.Mrs, AppResources.Ms, AppResources.Dr }; IdTitleCell = new FormPickerCell(AppResources.Title, titleOptions); var title = Cipher.Identity.Title?.Decrypt(Cipher.OrganizationId); IdTitleCell.Picker.SelectedIndex = 0; if (!string.IsNullOrWhiteSpace(title)) { var i = 0; foreach (var o in titleOptions) { i++; if (o == title) { IdTitleCell.Picker.SelectedIndex = i; break; } } } // Name NameCell.NextElement = IdFirstNameCell.Entry; // Build sections TopSection.Add(IdTitleCell); TopSection.Add(IdFirstNameCell); TopSection.Add(IdMiddleNameCell); TopSection.Add(IdLastNameCell); TopSection.Add(IdUsernameCell); TopSection.Add(IdCompanyCell); TopSection.Add(IdSsnCell); TopSection.Add(IdPassportNumberCell); TopSection.Add(IdLicenseNumberCell); TopSection.Add(IdEmailCell); TopSection.Add(IdPhoneCell); TopSection.Add(IdAddress1Cell); TopSection.Add(IdAddress2Cell); TopSection.Add(IdAddress3Cell); TopSection.Add(IdCityCell); TopSection.Add(IdStateCell); TopSection.Add(IdPostalCodeCell); TopSection.Add(IdCountryCell); } else if (Cipher.Type == CipherType.SecureNote) { // Name NameCell.NextElement = NotesCell.Editor; } FieldsSection = new TableSection(AppResources.CustomFields); if (Cipher.Fields != null) { foreach (var field in Cipher.Fields) { var label = field.Name?.Decrypt(Cipher.OrganizationId) ?? string.Empty; var value = field.Value?.Decrypt(Cipher.OrganizationId); var cell = Helpers.MakeFieldCell(field.Type, label, value, FieldsSection, this); if (cell != null) { FieldsSection.Add(cell); } if (!string.IsNullOrWhiteSpace(label) && !string.IsNullOrWhiteSpace(value) && field.Type == FieldType.Hidden) { _originalHiddenFields.Add(new Tuple <string, string>(label, value)); } } } AddFieldCell = new ExtendedTextCell { Text = $"+ {AppResources.NewCustomField}", TextColor = Colors.Primary }; FieldsSection.Add(AddFieldCell); // Make table TableRoot = new TableRoot { TopSection, MiddleSection, new TableSection(AppResources.Notes) { NotesCell }, FieldsSection, new TableSection(Helpers.GetEmptyTableSectionTitle()) { DeleteCell } }; if (UrisSection != null) { TableRoot.Insert(1, UrisSection); } Table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = true, HasUnevenRows = true, Root = TableRoot }; if (Device.RuntimePlatform == Device.iOS) { Table.RowHeight = -1; Table.EstimatedRowHeight = 70; } else if (Device.RuntimePlatform == Device.Android) { Table.BottomPadding = 50; } }
private void Init() { NameCell = new FormEntryCell(AppResources.Name); var table = new ExtendedTableView { Intent = TableIntent.Settings, EnableScrolling = false, HasUnevenRows = true, Root = new TableRoot { new TableSection(Helpers.GetEmptyTableSectionTitle()) { NameCell } } }; if (Device.RuntimePlatform == Device.iOS) { table.RowHeight = -1; table.EstimatedRowHeight = 70; } else if (Device.RuntimePlatform == Device.Android) { table.BottomPadding = 50; } var saveToolBarItem = new ToolbarItem(AppResources.Save, Helpers.ToolbarImage("envelope.png"), async() => { if (_lastAction.LastActionWasRecent()) { return; } _lastAction = DateTime.UtcNow; if (!_connectivity.IsConnected) { AlertNoConnection(); return; } if (string.IsNullOrWhiteSpace(NameCell.Entry.Text)) { await DisplayAlert(AppResources.AnErrorHasOccurred, string.Format(AppResources.ValidationFieldRequired, AppResources.Name), AppResources.Ok); return; } var folder = new Folder { Name = NameCell.Entry.Text.Encrypt() }; await _deviceActionService.ShowLoadingAsync(AppResources.Saving); var saveResult = await _folderService.SaveAsync(folder); await _deviceActionService.HideLoadingAsync(); if (saveResult.Succeeded) { _deviceActionService.Toast(AppResources.FolderCreated); _googleAnalyticsService.TrackAppEvent("CreatedFolder"); await Navigation.PopForDeviceAsync(); } else if (saveResult.Errors.Count() > 0) { await DisplayAlert(AppResources.AnErrorHasOccurred, saveResult.Errors.First().Message, AppResources.Ok); } else { await DisplayAlert(null, AppResources.AnErrorHasOccurred, AppResources.Ok); } }, ToolbarItemOrder.Default, 0); Title = AppResources.AddFolder; Content = table; ToolbarItems.Add(saveToolBarItem); if (Device.RuntimePlatform == Device.iOS || Device.RuntimePlatform == Device.UWP) { ToolbarItems.Add(new DismissModalToolBarItem(this, AppResources.Cancel)); } }