support for faceid labels
This commit is contained in:
parent
898b76a549
commit
14540b4cc0
|
@ -46,7 +46,7 @@ namespace Bit.Android.Services
|
|||
public bool NfcEnabled => Utilities.NfcEnabled();
|
||||
public bool HasCamera => Xamarin.Forms.Forms.Context.PackageManager.HasSystemFeature(PackageManager.FeatureCamera);
|
||||
public bool AutofillServiceSupported => AutofillSupported();
|
||||
|
||||
public bool HasFaceIdSupport => false;
|
||||
private bool AutofillSupported()
|
||||
{
|
||||
if(Build.VERSION.SdkInt < BuildVersionCodes.O)
|
||||
|
|
|
@ -8,5 +8,6 @@
|
|||
bool NfcEnabled { get; }
|
||||
bool HasCamera { get; }
|
||||
bool AutofillServiceSupported { get; }
|
||||
bool HasFaceIdSupport { get; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ namespace Bit.App.Pages
|
|||
private readonly IFingerprint _fingerprint;
|
||||
private readonly ISettings _settings;
|
||||
private readonly IAppSettingsService _appSettings;
|
||||
private readonly IDeviceInfoService _deviceInfoService;
|
||||
private readonly bool _checkFingerprintImmediately;
|
||||
private DateTime? _lastAction;
|
||||
|
||||
|
@ -24,6 +25,7 @@ namespace Bit.App.Pages
|
|||
_fingerprint = Resolver.Resolve<IFingerprint>();
|
||||
_settings = Resolver.Resolve<ISettings>();
|
||||
_appSettings = Resolver.Resolve<IAppSettingsService>();
|
||||
_deviceInfoService = Resolver.Resolve<IDeviceInfoService>();
|
||||
|
||||
Init();
|
||||
}
|
||||
|
@ -32,7 +34,7 @@ namespace Bit.App.Pages
|
|||
{
|
||||
var fingerprintIcon = new ExtendedButton
|
||||
{
|
||||
Image = "fingerprint.png",
|
||||
Image = _deviceInfoService.HasFaceIdSupport ? "smile.png" : "fingerprint.png",
|
||||
BackgroundColor = Color.Transparent,
|
||||
Command = new Command(async () => await CheckFingerprintAsync()),
|
||||
VerticalOptions = LayoutOptions.CenterAndExpand,
|
||||
|
@ -41,7 +43,8 @@ namespace Bit.App.Pages
|
|||
|
||||
var fingerprintButton = new ExtendedButton
|
||||
{
|
||||
Text = AppResources.UseFingerprintToUnlock,
|
||||
Text = _deviceInfoService.HasFaceIdSupport ? AppResources.UseFaceIDToUnlock :
|
||||
AppResources.UseFingerprintToUnlock,
|
||||
Command = new Command(async () => await CheckFingerprintAsync()),
|
||||
VerticalOptions = LayoutOptions.EndAndExpand,
|
||||
Style = (Style)Application.Current.Resources["btn-primary"]
|
||||
|
@ -64,7 +67,7 @@ namespace Bit.App.Pages
|
|||
Children = { fingerprintIcon, fingerprintButton, logoutButton }
|
||||
};
|
||||
|
||||
Title = AppResources.VerifyFingerprint;
|
||||
Title = _deviceInfoService.HasFaceIdSupport ? AppResources.VerifyFaceID : AppResources.VerifyFingerprint;
|
||||
Content = stackLayout;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ namespace Bit.App.Pages
|
|||
private readonly IPushNotificationService _pushNotification;
|
||||
private readonly IGoogleAnalyticsService _googleAnalyticsService;
|
||||
private readonly IDeviceActionService _deviceActionService;
|
||||
private readonly IDeviceInfoService _deviceInfoService;
|
||||
private readonly ILockService _lockService;
|
||||
|
||||
// TODO: Model binding context?
|
||||
|
@ -33,6 +34,7 @@ namespace Bit.App.Pages
|
|||
_pushNotification = Resolver.Resolve<IPushNotificationService>();
|
||||
_googleAnalyticsService = Resolver.Resolve<IGoogleAnalyticsService>();
|
||||
_deviceActionService = Resolver.Resolve<IDeviceActionService>();
|
||||
_deviceInfoService = Resolver.Resolve<IDeviceInfoService>();
|
||||
_lockService = Resolver.Resolve<ILockService>();
|
||||
|
||||
Init();
|
||||
|
@ -91,8 +93,9 @@ namespace Bit.App.Pages
|
|||
|
||||
if((await _fingerprint.GetAvailabilityAsync()) == FingerprintAvailability.Available)
|
||||
{
|
||||
var fingerprintName = Helpers.OnPlatform(iOS: AppResources.TouchID, Android: AppResources.Fingerprint,
|
||||
Windows: AppResources.Fingerprint, WinPhone: AppResources.Fingerprint);
|
||||
var fingerprintName = Helpers.OnPlatform(
|
||||
iOS: _deviceInfoService.HasFaceIdSupport ? AppResources.FaceID : AppResources.TouchID,
|
||||
Android: AppResources.Fingerprint, Windows: AppResources.Fingerprint, WinPhone: AppResources.Fingerprint);
|
||||
FingerprintCell = new ExtendedSwitchCell
|
||||
{
|
||||
Text = string.Format(AppResources.UnlockWith, fingerprintName),
|
||||
|
|
|
@ -1303,6 +1303,24 @@ namespace Bit.App.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Face ID.
|
||||
/// </summary>
|
||||
public static string FaceID {
|
||||
get {
|
||||
return ResourceManager.GetString("FaceID", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Face ID to verify..
|
||||
/// </summary>
|
||||
public static string FaceIDDirection {
|
||||
get {
|
||||
return ResourceManager.GetString("FaceIDDirection", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Favorite.
|
||||
/// </summary>
|
||||
|
@ -2905,6 +2923,15 @@ namespace Bit.App.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Face ID To Unlock.
|
||||
/// </summary>
|
||||
public static string UseFaceIDToUnlock {
|
||||
get {
|
||||
return ResourceManager.GetString("UseFaceIDToUnlock", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Use Fingerprint to Unlock.
|
||||
/// </summary>
|
||||
|
@ -2995,6 +3022,15 @@ namespace Bit.App.Resources {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Verify Face ID.
|
||||
/// </summary>
|
||||
public static string VerifyFaceID {
|
||||
get {
|
||||
return ResourceManager.GetString("VerifyFaceID", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Verify Fingerprint.
|
||||
/// </summary>
|
||||
|
|
|
@ -1218,4 +1218,17 @@
|
|||
<data name="BitwardenAutofillServiceOpenAutofillSettings" xml:space="preserve">
|
||||
<value>Open Autofill Settings</value>
|
||||
</data>
|
||||
<data name="FaceID" xml:space="preserve">
|
||||
<value>Face ID</value>
|
||||
<comment>What Apple calls their facial recognition reader.</comment>
|
||||
</data>
|
||||
<data name="FaceIDDirection" xml:space="preserve">
|
||||
<value>Use Face ID to verify.</value>
|
||||
</data>
|
||||
<data name="UseFaceIDToUnlock" xml:space="preserve">
|
||||
<value>Use Face ID To Unlock</value>
|
||||
</data>
|
||||
<data name="VerifyFaceID" xml:space="preserve">
|
||||
<value>Verify Face ID</value>
|
||||
</data>
|
||||
</root>
|
|
@ -41,5 +41,6 @@ namespace Bit.UWP.Services
|
|||
}
|
||||
|
||||
public bool AutofillServiceSupported => false;
|
||||
public bool HasFaceIdSupport => false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
using Bit.App.Abstractions;
|
||||
using Foundation;
|
||||
using LocalAuthentication;
|
||||
using UIKit;
|
||||
|
||||
namespace Bit.iOS.Core.Services
|
||||
|
@ -25,5 +27,19 @@ namespace Bit.iOS.Core.Services
|
|||
public bool NfcEnabled => false;
|
||||
public bool HasCamera => true;
|
||||
public bool AutofillServiceSupported => false;
|
||||
public bool HasFaceIdSupport
|
||||
{
|
||||
get
|
||||
{
|
||||
if(Version < 11)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var context = new LAContext();
|
||||
return context.CanEvaluatePolicy(LAPolicy.DeviceOwnerAuthenticationWithBiometrics, out NSError e) &&
|
||||
context.BiometryType == LABiometryType.TypeFaceId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 5.3 KiB |
Loading…
Reference in New Issue