mirror of
https://github.com/bitwarden/android.git
synced 2024-12-25 18:38:27 +03:00
[PM-3446] User without MP, item with MP does not show on Android keyboard for autofill (#2764)
* [PM-3446] Check if user has mp and allow autofill to use items with mp re-prompt
This commit is contained in:
parent
828043ec97
commit
218a30b510
2 changed files with 10 additions and 8 deletions
|
@ -20,6 +20,7 @@ using AndroidX.AutoFill.Inline.V1;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using SaveFlags = Android.Service.Autofill.SaveFlags;
|
using SaveFlags = Android.Service.Autofill.SaveFlags;
|
||||||
using Bit.Droid.Utilities;
|
using Bit.Droid.Utilities;
|
||||||
|
using Bit.Core.Services;
|
||||||
|
|
||||||
namespace Bit.Droid.Autofill
|
namespace Bit.Droid.Autofill
|
||||||
{
|
{
|
||||||
|
@ -152,8 +153,9 @@ namespace Bit.Droid.Autofill
|
||||||
"androidapp://com.oneplus.applocker",
|
"androidapp://com.oneplus.applocker",
|
||||||
};
|
};
|
||||||
|
|
||||||
public static async Task<List<FilledItem>> GetFillItemsAsync(Parser parser, ICipherService cipherService)
|
public static async Task<List<FilledItem>> GetFillItemsAsync(Parser parser, ICipherService cipherService, IUserVerificationService userVerificationService)
|
||||||
{
|
{
|
||||||
|
var userHasMasterPassword = await userVerificationService.HasMasterPasswordAsync();
|
||||||
if (parser.FieldCollection.FillableForLogin)
|
if (parser.FieldCollection.FillableForLogin)
|
||||||
{
|
{
|
||||||
var ciphers = await cipherService.GetAllDecryptedByUrlAsync(parser.Uri);
|
var ciphers = await cipherService.GetAllDecryptedByUrlAsync(parser.Uri);
|
||||||
|
@ -161,14 +163,14 @@ namespace Bit.Droid.Autofill
|
||||||
{
|
{
|
||||||
var allCiphers = ciphers.Item1.ToList();
|
var allCiphers = ciphers.Item1.ToList();
|
||||||
allCiphers.AddRange(ciphers.Item2.ToList());
|
allCiphers.AddRange(ciphers.Item2.ToList());
|
||||||
var nonPromptCiphers = allCiphers.Where(cipher => cipher.Reprompt == CipherRepromptType.None);
|
var nonPromptCiphers = allCiphers.Where(cipher => !userHasMasterPassword || cipher.Reprompt == CipherRepromptType.None);
|
||||||
return nonPromptCiphers.Select(c => new FilledItem(c)).ToList();
|
return nonPromptCiphers.Select(c => new FilledItem(c)).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (parser.FieldCollection.FillableForCard)
|
else if (parser.FieldCollection.FillableForCard)
|
||||||
{
|
{
|
||||||
var ciphers = await cipherService.GetAllDecryptedAsync();
|
var ciphers = await cipherService.GetAllDecryptedAsync();
|
||||||
return ciphers.Where(c => c.Type == CipherType.Card && c.Reprompt == CipherRepromptType.None).Select(c => new FilledItem(c)).ToList();
|
return ciphers.Where(c => c.Type == CipherType.Card && (!userHasMasterPassword || c.Reprompt == CipherRepromptType.None)).Select(c => new FilledItem(c)).ToList();
|
||||||
}
|
}
|
||||||
return new List<FilledItem>();
|
return new List<FilledItem>();
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ using Android.Widget;
|
||||||
using Bit.Core;
|
using Bit.Core;
|
||||||
using Bit.Core.Abstractions;
|
using Bit.Core.Abstractions;
|
||||||
using Bit.Core.Enums;
|
using Bit.Core.Enums;
|
||||||
|
using Bit.Core.Services;
|
||||||
using Bit.Core.Utilities;
|
using Bit.Core.Utilities;
|
||||||
|
|
||||||
namespace Bit.Droid.Autofill
|
namespace Bit.Droid.Autofill
|
||||||
|
@ -26,6 +27,7 @@ namespace Bit.Droid.Autofill
|
||||||
private IPolicyService _policyService;
|
private IPolicyService _policyService;
|
||||||
private IStateService _stateService;
|
private IStateService _stateService;
|
||||||
private LazyResolve<ILogger> _logger = new LazyResolve<ILogger>("logger");
|
private LazyResolve<ILogger> _logger = new LazyResolve<ILogger>("logger");
|
||||||
|
private IUserVerificationService _userVerificationService;
|
||||||
|
|
||||||
public async override void OnFillRequest(FillRequest request, CancellationSignal cancellationSignal,
|
public async override void OnFillRequest(FillRequest request, CancellationSignal cancellationSignal,
|
||||||
FillCallback callback)
|
FillCallback callback)
|
||||||
|
@ -64,11 +66,9 @@ namespace Bit.Droid.Autofill
|
||||||
var locked = await _vaultTimeoutService.IsLockedAsync();
|
var locked = await _vaultTimeoutService.IsLockedAsync();
|
||||||
if (!locked)
|
if (!locked)
|
||||||
{
|
{
|
||||||
if (_cipherService == null)
|
_cipherService ??= ServiceContainer.Resolve<ICipherService>();
|
||||||
{
|
_userVerificationService ??= ServiceContainer.Resolve<IUserVerificationService>();
|
||||||
_cipherService = ServiceContainer.Resolve<ICipherService>("cipherService");
|
items = await AutofillHelpers.GetFillItemsAsync(parser, _cipherService, _userVerificationService);
|
||||||
}
|
|
||||||
items = await AutofillHelpers.GetFillItemsAsync(parser, _cipherService);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// build response
|
// build response
|
||||||
|
|
Loading…
Reference in a new issue