Added username/password copy options to extension when no password field is detected on the page details intitiated from.

This commit is contained in:
Kyle Spearrin 2016-07-28 19:12:51 -04:00
parent 9f54296ff0
commit bb4b732b76
3 changed files with 66 additions and 1 deletions

View file

@ -35,5 +35,21 @@ namespace Bit.iOS.Core.Utilities
alert.AddAction(UIAlertAction.Create(accept, UIAlertActionStyle.Default, acceptHandle)); alert.AddAction(UIAlertAction.Create(accept, UIAlertActionStyle.Default, acceptHandle));
return alert; return alert;
} }
public static UIAlertController CreateActionSheet(string title, UIViewController controller)
{
var sheet = UIAlertController.Create(title, null, UIAlertControllerStyle.ActionSheet);
if(UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
{
var x = controller.View.Bounds.Width / 2;
var y = controller.View.Bounds.Bottom;
var rect = new CGRect(x, y, 0, 0);
sheet.PopoverPresentationController.SourceView = controller.View;
sheet.PopoverPresentationController.SourceRect = rect;
sheet.PopoverPresentationController.PermittedArrowDirections = UIPopoverArrowDirection.Unknown;
}
return sheet;
}
} }
} }

View file

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Bit.iOS.Extension.Models namespace Bit.iOS.Extension.Models
{ {
@ -13,6 +14,7 @@ namespace Bit.iOS.Extension.Models
public Dictionary<string, Form> Forms { get; set; } public Dictionary<string, Form> Forms { get; set; }
public List<Field> Fields { get; set; } public List<Field> Fields { get; set; }
public long CollectedTimestamp { get; set; } public long CollectedTimestamp { get; set; }
public bool HasPasswordField => Fields.Any(f => f.Type == "password");
public class Form public class Form
{ {

View file

@ -11,6 +11,8 @@ using Newtonsoft.Json;
using UIKit; using UIKit;
using XLabs.Ioc; using XLabs.Ioc;
using Plugin.Settings.Abstractions; using Plugin.Settings.Abstractions;
using CoreGraphics;
using Bit.iOS.Core.Utilities;
namespace Bit.iOS.Extension namespace Bit.iOS.Extension
{ {
@ -147,6 +149,9 @@ namespace Bit.iOS.Extension
public override void RowSelected(UITableView tableView, NSIndexPath indexPath) public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{ {
tableView.DeselectRow(indexPath, true);
tableView.EndEditing(true);
if(_tableItems.Count() == 0) if(_tableItems.Count() == 0)
{ {
_controller.PerformSegue("siteAddSegue", this); _controller.PerformSegue("siteAddSegue", this);
@ -162,7 +167,49 @@ namespace Bit.iOS.Extension
return; return;
} }
_controller.LoadingController.CompleteUsernamePasswordRequest(item.Username, item.Password); if(_context?.Details?.HasPasswordField ?? false && !string.IsNullOrWhiteSpace(item.Password))
{
_controller.LoadingController.CompleteUsernamePasswordRequest(item.Username, item.Password);
}
else if(!string.IsNullOrWhiteSpace(item.Username) || !string.IsNullOrWhiteSpace(item.Password))
{
var sheet = Dialogs.CreateActionSheet(item.Name, _controller);
if(!string.IsNullOrWhiteSpace(item.Username))
{
sheet.AddAction(UIAlertAction.Create("Copy Username", UIAlertActionStyle.Default, a =>
{
UIPasteboard clipboard = UIPasteboard.General;
clipboard.String = item.Username;
var alert = Dialogs.CreateMessageAlert("Copied username!");
_controller.PresentViewController(alert, true, () =>
{
_controller.DismissViewController(true, null);
});
}));
}
if(!string.IsNullOrWhiteSpace(item.Password))
{
sheet.AddAction(UIAlertAction.Create("Copy Password", UIAlertActionStyle.Default, a =>
{
UIPasteboard clipboard = UIPasteboard.General;
clipboard.String = item.Password;
var alert = Dialogs.CreateMessageAlert("Copied password!");
_controller.PresentViewController(alert, true, () =>
{
_controller.DismissViewController(true, null);
});
}));
}
sheet.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null));
_controller.PresentViewController(sheet, true, null);
}
else
{
var alert = Dialogs.CreateAlert(null, "This site does not have a username or password configured.", "Ok");
_controller.PresentViewController(alert, true, null);
}
} }
} }
} }