1
0
mirror of https://github.com/bitwarden/mobile.git synced 2024-11-22 11:35:21 +01:00

lazy decrypt password and username for vault listing. dynamically show copy and url launch options if provided.

This commit is contained in:
Kyle Spearrin 2016-07-06 22:59:13 -04:00
parent 29c7a0ccf0
commit 31ad96ff31
4 changed files with 25 additions and 8 deletions

View File

@ -16,16 +16,16 @@ namespace Bit.App.Models.Page
FolderId = folderId; FolderId = folderId;
Name = site.Name?.Decrypt(); Name = site.Name?.Decrypt();
Username = site.Username?.Decrypt() ?? " "; Username = site.Username?.Decrypt() ?? " ";
Password = site.Password?.Decrypt(); Password = new Lazy<string>(() => site.Password?.Decrypt());
Uri = site.Uri?.Decrypt(); Uri = new Lazy<string>(() => site.Uri?.Decrypt());
} }
public string Id { get; set; } public string Id { get; set; }
public string FolderId { get; set; } public string FolderId { get; set; }
public string Name { get; set; } public string Name { get; set; }
public string Username { get; set; } public string Username { get; set; }
public string Password { get; set; } public Lazy<string> Password { get; set; }
public string Uri { get; set; } public Lazy<string> Uri { get; set; }
} }
public class Folder : List<Site> public class Folder : List<Site>

View File

@ -61,9 +61,11 @@ namespace Bit.App.Models.Page
PropertyChanged(this, new PropertyChangedEventArgs(nameof(Uri))); PropertyChanged(this, new PropertyChangedEventArgs(nameof(Uri)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(UriHost))); PropertyChanged(this, new PropertyChangedEventArgs(nameof(UriHost)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ShowUri))); PropertyChanged(this, new PropertyChangedEventArgs(nameof(ShowUri)));
PropertyChanged(this, new PropertyChangedEventArgs(nameof(ShowLaunch)));
} }
} }
public bool ShowUri => !string.IsNullOrWhiteSpace(Uri); public bool ShowUri => !string.IsNullOrWhiteSpace(Uri);
public bool ShowLaunch => Uri.StartsWith("http://") || Uri.StartsWith("https://");
public string UriHost public string UriHost
{ {

View File

@ -13,6 +13,7 @@ using Bit.App.Utilities;
using PushNotification.Plugin.Abstractions; using PushNotification.Plugin.Abstractions;
using Plugin.Settings.Abstractions; using Plugin.Settings.Abstractions;
using Plugin.Connectivity.Abstractions; using Plugin.Connectivity.Abstractions;
using System.Collections.Generic;
namespace Bit.App.Pages namespace Bit.App.Pages
{ {
@ -121,8 +122,21 @@ namespace Bit.App.Pages
private async void MoreClickedAsync(VaultListPageModel.Site site) private async void MoreClickedAsync(VaultListPageModel.Site site)
{ {
var selection = await DisplayActionSheet(site.Name, AppResources.Cancel, null, var buttons = new List<string> { AppResources.View, AppResources.Edit };
AppResources.View, AppResources.Edit, AppResources.CopyPassword, AppResources.CopyUsername, AppResources.GoToWebsite); if(!string.IsNullOrWhiteSpace(site.Password.Value))
{
buttons.Add(AppResources.CopyPassword);
}
if(!string.IsNullOrWhiteSpace(site.Username))
{
buttons.Add(AppResources.CopyUsername);
}
if(!string.IsNullOrWhiteSpace(site.Uri.Value) && (site.Uri.Value.StartsWith("http://") || site.Uri.Value.StartsWith("https://")))
{
buttons.Add(AppResources.GoToWebsite);
}
var selection = await DisplayActionSheet(site.Name, AppResources.Cancel, null, buttons.ToArray());
if(selection == AppResources.View) if(selection == AppResources.View)
{ {
@ -136,7 +150,7 @@ namespace Bit.App.Pages
} }
else if(selection == AppResources.CopyPassword) else if(selection == AppResources.CopyPassword)
{ {
Copy(site.Password, AppResources.Password); Copy(site.Password.Value, AppResources.Password);
} }
else if(selection == AppResources.CopyUsername) else if(selection == AppResources.CopyUsername)
{ {
@ -144,7 +158,7 @@ namespace Bit.App.Pages
} }
else if(selection == AppResources.GoToWebsite) else if(selection == AppResources.GoToWebsite)
{ {
Device.OpenUri(new Uri(site.Uri)); Device.OpenUri(new Uri(site.Uri.Value));
} }
} }

View File

@ -67,6 +67,7 @@ namespace Bit.App.Pages
// URI // URI
UriCell = new LabeledValueCell(AppResources.Website, button1Text: AppResources.Launch); UriCell = new LabeledValueCell(AppResources.Website, button1Text: AppResources.Launch);
UriCell.Value.SetBinding<VaultViewSitePageModel>(Label.TextProperty, s => s.UriHost); UriCell.Value.SetBinding<VaultViewSitePageModel>(Label.TextProperty, s => s.UriHost);
UriCell.Button1.SetBinding<VaultViewSitePageModel>(IsVisibleProperty, s => s.ShowLaunch);
UriCell.Button1.Command = new Command(() => Device.OpenUri(new Uri(Model.Uri))); UriCell.Button1.Command = new Command(() => Device.OpenUri(new Uri(Model.Uri)));
// Notes // Notes