keepass2android/src/keepass2android/FingerprintSamsungIdentifie...

141 lines
2.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Util;
using Android.Views;
using Android.Widget;
using Com.Samsung.Android.Sdk;
using Com.Samsung.Android.Sdk.Pass;
using Java.Lang;
namespace keepass2android
{
class FingerprintSamsungIdentifier: IFingerprintIdentifier
{
SpassFingerprint _spassFingerprint;
Spass _spass;
public FingerprintSamsungIdentifier(Context context)
{
_spass = new Spass();
try
{
_spass.Initialize(context);
}
catch (SecurityException)
{
//"Did you add the permission to the AndroidManifest.xml?");
throw;
}
if (_spass.IsFeatureEnabled(Spass.DeviceFingerprint))
{
_spassFingerprint = new SpassFingerprint(context);
}
else
{
throw new RuntimeException("Fingerprint Featue not available.");
}
}
public bool Init()
{
try
{
return _spassFingerprint.HasRegisteredFinger;
}
catch (UnsupportedOperationException)
{
return false;
}
}
class IdentifyListener : Java.Lang.Object, IIdentifyListener
{
private readonly IFingerprintAuthCallback _callback;
private readonly Context _context;
private readonly FingerprintSamsungIdentifier _id;
public IdentifyListener(IFingerprintAuthCallback callback, Context context, FingerprintSamsungIdentifier id)
{
_callback = callback;
_context = context;
_id = id;
}
public void OnFinished (int responseCode)
{
_id.Listening = false;
if (responseCode == SpassFingerprint.StatusAuthentificationSuccess)
{
_callback.OnFingerprintAuthSucceeded();
}
else if (responseCode == SpassFingerprint.StatusAuthentificationPasswordSuccess)
{
_callback.OnFingerprintAuthSucceeded();
}
}
public void OnReady ()
{
}
public void OnStarted ()
{
}
}
internal bool Listening
{
get; set;
}
public void StartListening(Context ctx, IFingerprintAuthCallback callback)
{
if (Listening) return;
try
{
_spassFingerprint.StartIdentifyWithDialog(ctx, new IdentifyListener(callback, ctx, this), false);
Listening = true;
}
catch (SpassInvalidStateException m)
{
callback.OnFingerprintError(m.Message);
}
catch (IllegalStateException ex)
{
callback.OnFingerprintError(ex.Message);
}
}
public void StopListening()
{
try
{
_spassFingerprint.CancelIdentify();
Listening = false;
}
catch (IllegalStateException ise)
{
Kp2aLog.Log(ise.Message);
}
}
}
}