fix Fingerprint issue with older Samsung devices (IsHardwareDetected=false). Now fallback correctly to Samsung Fingerprint API.
This commit is contained in:
parent
c1da91e0ef
commit
199f900f4b
|
@ -126,9 +126,7 @@ namespace keepass2android
|
||||||
TrySetupSamsung();
|
TrySetupSamsung();
|
||||||
|
|
||||||
}
|
}
|
||||||
FindViewById(Resource.Id.container_fingerprint_unlock).Visibility = _samsungFingerprint == null
|
|
||||||
? ViewStates.Visible
|
|
||||||
: ViewStates.Gone;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TrySetupSamsung()
|
private bool TrySetupSamsung()
|
||||||
|
@ -142,6 +140,9 @@ namespace keepass2android
|
||||||
SetError(Resource.String.fingerprint_no_enrolled);
|
SetError(Resource.String.fingerprint_no_enrolled);
|
||||||
}
|
}
|
||||||
ShowRadioButtons();
|
ShowRadioButtons();
|
||||||
|
FindViewById(Resource.Id.container_fingerprint_unlock).Visibility = _samsungFingerprint == null
|
||||||
|
? ViewStates.Visible
|
||||||
|
: ViewStates.Gone;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
|
|
|
@ -140,7 +140,10 @@ namespace keepass2android
|
||||||
RegisterReceiver(_intentReceiver, filter);
|
RegisterReceiver(_intentReceiver, filter);
|
||||||
|
|
||||||
if ((int) Build.VERSION.SdkInt >= 23)
|
if ((int) Build.VERSION.SdkInt >= 23)
|
||||||
RequestPermissions(new[] {Manifest.Permission.UseFingerprint}, FingerprintPermissionRequestCode);
|
{
|
||||||
|
Kp2aLog.Log("requesting fingerprint permission");
|
||||||
|
RequestPermissions(new[] { Manifest.Permission.UseFingerprint }, FingerprintPermissionRequestCode);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -157,6 +160,9 @@ namespace keepass2android
|
||||||
|
|
||||||
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
|
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("OnRequestPermissionsResult " + (requestCode == FingerprintPermissionRequestCode) +
|
||||||
|
((grantResults.Length > 0) && (grantResults[0] == Permission.Granted)));
|
||||||
|
|
||||||
if (requestCode == FingerprintPermissionRequestCode && grantResults[0] == Permission.Granted)
|
if (requestCode == FingerprintPermissionRequestCode && grantResults[0] == Permission.Granted)
|
||||||
{
|
{
|
||||||
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
||||||
|
@ -169,11 +175,13 @@ namespace keepass2android
|
||||||
b.Show();
|
b.Show();
|
||||||
};
|
};
|
||||||
_fingerprintPermissionGranted = true;
|
_fingerprintPermissionGranted = true;
|
||||||
|
Kp2aLog.Log("_fingerprintPermissionGranted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnFingerprintError(string message)
|
public void OnFingerprintError(string message)
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("fingerprint error: " + message);
|
||||||
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
||||||
|
|
||||||
btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
|
btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
|
||||||
|
@ -187,6 +195,7 @@ namespace keepass2android
|
||||||
|
|
||||||
public void OnFingerprintAuthSucceeded()
|
public void OnFingerprintAuthSucceeded()
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("OnFingerprintAuthSucceeded");
|
||||||
_fingerprintIdentifier.StopListening();
|
_fingerprintIdentifier.StopListening();
|
||||||
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
||||||
|
|
||||||
|
@ -206,6 +215,7 @@ namespace keepass2android
|
||||||
}
|
}
|
||||||
private void InitFingerprintUnlock()
|
private void InitFingerprintUnlock()
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("InitFingerprintUnlock");
|
||||||
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
var btn = FindViewById<ImageButton>(Resource.Id.fingerprintbtn);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -221,23 +231,28 @@ namespace keepass2android
|
||||||
if (_fingerprintPermissionGranted)
|
if (_fingerprintPermissionGranted)
|
||||||
{
|
{
|
||||||
FingerprintModule fpModule = new FingerprintModule(this);
|
FingerprintModule fpModule = new FingerprintModule(this);
|
||||||
|
Kp2aLog.Log("fpModule.FingerprintManager.IsHardwareDetected=" + fpModule.FingerprintManager.IsHardwareDetected);
|
||||||
if (fpModule.FingerprintManager.IsHardwareDetected) //see FingerprintSetupActivity
|
if (fpModule.FingerprintManager.IsHardwareDetected) //see FingerprintSetupActivity
|
||||||
_fingerprintIdentifier = new FingerprintDecryption(fpModule, App.Kp2a.GetDb().CurrentFingerprintPrefKey, this,
|
_fingerprintIdentifier = new FingerprintDecryption(fpModule, App.Kp2a.GetDb().CurrentFingerprintPrefKey, this,
|
||||||
App.Kp2a.GetDb().CurrentFingerprintPrefKey);
|
App.Kp2a.GetDb().CurrentFingerprintPrefKey);
|
||||||
|
else _fingerprintIdentifier = null; //force re-init Samsung
|
||||||
}
|
}
|
||||||
if (_fingerprintIdentifier == null)
|
if (_fingerprintIdentifier == null)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("trying Samsung Fingerprint API...");
|
||||||
_fingerprintIdentifier = new FingerprintSamsungIdentifier(this);
|
_fingerprintIdentifier = new FingerprintSamsungIdentifier(this);
|
||||||
btn.Click += (sender, args) =>
|
btn.Click += (sender, args) =>
|
||||||
{
|
{
|
||||||
if (_fingerprintIdentifier.Init())
|
if (_fingerprintIdentifier.Init())
|
||||||
_fingerprintIdentifier.StartListening(this, this);
|
_fingerprintIdentifier.StartListening(this, this);
|
||||||
};
|
};
|
||||||
|
Kp2aLog.Log("trying Samsung Fingerprint API...Seems to work!");
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("trying Samsung Fingerprint API...failed.");
|
||||||
FindViewById<ImageButton>(Resource.Id.fingerprintbtn).Visibility = ViewStates.Gone;
|
FindViewById<ImageButton>(Resource.Id.fingerprintbtn).Visibility = ViewStates.Gone;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -246,11 +261,13 @@ namespace keepass2android
|
||||||
|
|
||||||
if (_fingerprintIdentifier.Init())
|
if (_fingerprintIdentifier.Init())
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("successfully initialized fingerprint.");
|
||||||
btn.SetImageResource(Resource.Drawable.ic_fp_40px);
|
btn.SetImageResource(Resource.Drawable.ic_fp_40px);
|
||||||
_fingerprintIdentifier.StartListening(this, this);
|
_fingerprintIdentifier.StartListening(this, this);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("failed to initialize fingerprint.");
|
||||||
//key invalidated permanently
|
//key invalidated permanently
|
||||||
btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
|
btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
|
||||||
btn.Tag = GetString(Resource.String.fingerprint_unlock_failed);
|
btn.Tag = GetString(Resource.String.fingerprint_unlock_failed);
|
||||||
|
@ -261,6 +278,7 @@ namespace keepass2android
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("Error initializing Fingerprint Unlock: " + e);
|
||||||
btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
|
btn.SetImageResource(Resource.Drawable.ic_fingerprint_error);
|
||||||
btn.Tag = "Error initializing Fingerprint Unlock: " + e;
|
btn.Tag = "Error initializing Fingerprint Unlock: " + e;
|
||||||
|
|
||||||
|
@ -335,6 +353,7 @@ namespace keepass2android
|
||||||
base.OnPause();
|
base.OnPause();
|
||||||
if (_fingerprintIdentifier != null)
|
if (_fingerprintIdentifier != null)
|
||||||
{
|
{
|
||||||
|
Kp2aLog.Log("FP: Stop listening");
|
||||||
_fingerprintIdentifier.StopListening();
|
_fingerprintIdentifier.StopListening();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue