mirror of
https://github.com/bitwarden/mobile
synced 2025-12-11 05:43:30 +00:00
auth activity for locked vaults when autofilling
This commit is contained in:
@@ -5,56 +5,70 @@ using Android.Service.Autofill;
|
||||
using Android.Views;
|
||||
using Android.Widget;
|
||||
using System.Linq;
|
||||
using Android.App;
|
||||
using Bit.App.Abstractions;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Bit.Android.Autofill
|
||||
{
|
||||
public static class AutofillHelpers
|
||||
{
|
||||
public static FillResponse BuildFillResponse(Context context, bool auth, FieldCollection fields,
|
||||
IDictionary<string, IFilledItem> items)
|
||||
public static async Task<List<IFilledItem>> GetFillItemsAsync(ICipherService service, string uri)
|
||||
{
|
||||
var items = new List<IFilledItem>();
|
||||
var ciphers = await service.GetAllAsync(uri);
|
||||
if(ciphers.Item1.Any() || ciphers.Item2.Any())
|
||||
{
|
||||
var allCiphers = ciphers.Item1.ToList();
|
||||
allCiphers.AddRange(ciphers.Item2.ToList());
|
||||
foreach(var cipher in allCiphers)
|
||||
{
|
||||
items.Add(new CipherFilledItem(cipher));
|
||||
}
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
public static FillResponse BuildFillResponse(Context context, FieldCollection fields, List<IFilledItem> items)
|
||||
{
|
||||
var responseBuilder = new FillResponse.Builder();
|
||||
if(items != null)
|
||||
{
|
||||
foreach(var datasetName in items.Keys)
|
||||
foreach(var item in items)
|
||||
{
|
||||
var dataset = BuildDataset(context, fields, items[datasetName], auth);
|
||||
var dataset = BuildDataset(context, fields, item);
|
||||
if(dataset != null)
|
||||
{
|
||||
responseBuilder.AddDataset(dataset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var info = new SaveInfo.Builder(fields.SaveType, fields.AutofillIds.ToArray()).Build();
|
||||
responseBuilder.SetSaveInfo(info);
|
||||
return responseBuilder.Build();
|
||||
}
|
||||
|
||||
public static Dataset BuildDataset(Context context, FieldCollection fields, IFilledItem filledItem, bool auth)
|
||||
public static Dataset BuildDataset(Context context, FieldCollection fields, IFilledItem filledItem)
|
||||
{
|
||||
Dataset.Builder datasetBuilder;
|
||||
if(auth)
|
||||
{
|
||||
datasetBuilder = new Dataset.Builder(
|
||||
BuildListView(context.PackageName, filledItem.Name, filledItem.Subtitle, Resource.Drawable.fa_lock));
|
||||
//IntentSender sender = AuthActivity.getAuthIntentSenderForDataset(context, datasetName);
|
||||
//datasetBuilder.SetAuthentication(sender);
|
||||
}
|
||||
else
|
||||
{
|
||||
datasetBuilder = new Dataset.Builder(
|
||||
BuildListView(context.PackageName, filledItem.Name, filledItem.Subtitle, filledItem.Icon));
|
||||
}
|
||||
|
||||
var datasetBuilder = new Dataset.Builder(
|
||||
BuildListView(context.PackageName, filledItem.Name, filledItem.Subtitle, filledItem.Icon));
|
||||
if(filledItem.ApplyToFields(fields, datasetBuilder))
|
||||
{
|
||||
return datasetBuilder.Build();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static FillResponse BuildAuthResponse(Context context, FieldCollection fields)
|
||||
{
|
||||
var responseBuilder = new FillResponse.Builder();
|
||||
var view = BuildListView(context.PackageName, "Autofill with bitwarden",
|
||||
"Vault locked", Resource.Drawable.icon);
|
||||
var intent = new Intent(context, typeof(AuthActivity));
|
||||
var pendingIntent = PendingIntent.GetActivity(context, 0, intent, PendingIntentFlags.CancelCurrent);
|
||||
responseBuilder.SetAuthentication(fields.AutofillIds.ToArray(), pendingIntent.IntentSender, view);
|
||||
return responseBuilder.Build();
|
||||
}
|
||||
|
||||
public static RemoteViews BuildListView(string packageName, string text, string subtext, int iconId)
|
||||
{
|
||||
var view = new RemoteViews(packageName, Resource.Layout.autofill_listitem);
|
||||
|
||||
Reference in New Issue
Block a user