From ec87b383e85f57c60effc6f4e5fb6195e34e83e9 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 12 Jul 2019 19:33:40 +0200 Subject: [PATCH] Check if biometrics sensor available --- .../java/eu/faircode/email/ActivitySetup.java | 15 ++++++++------- app/src/main/java/eu/faircode/email/Helper.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivitySetup.java b/app/src/main/java/eu/faircode/email/ActivitySetup.java index e0f4e30b8d..325760b115 100644 --- a/app/src/main/java/eu/faircode/email/ActivitySetup.java +++ b/app/src/main/java/eu/faircode/email/ActivitySetup.java @@ -201,13 +201,14 @@ public class ActivitySetup extends ActivityBase implements FragmentManager.OnBac } })); - menus.add(new NavMenuItem(R.drawable.baseline_fingerprint_24, R.string.title_setup_authentication, new Runnable() { - @Override - public void run() { - drawerLayout.closeDrawer(drawerContainer); - onMenuBiometrics(); - } - })); + if (Helper.canAuthenticate(this)) + menus.add(new NavMenuItem(R.drawable.baseline_fingerprint_24, R.string.title_setup_authentication, new Runnable() { + @Override + public void run() { + drawerLayout.closeDrawer(drawerContainer); + onMenuBiometrics(); + } + })); menus.add(new NavMenuItem(R.drawable.baseline_person_24, R.string.menu_contacts, new Runnable() { @Override diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index ba3cb23c49..04388c59b0 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -19,6 +19,7 @@ package eu.faircode.email; Copyright 2018-2019 by Marcel Bokhorst (M66B) */ +import android.annotation.SuppressLint; import android.app.Dialog; import android.content.ActivityNotFoundException; import android.content.Context; @@ -32,7 +33,10 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; +import android.hardware.biometrics.BiometricManager; +import android.hardware.fingerprint.FingerprintManager; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Parcel; @@ -653,6 +657,19 @@ public class Helper { return Objects.equals(signed, expected); } + static boolean canAuthenticate(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) + return false; + else if (Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.Q) { + FingerprintManager fpm = (FingerprintManager) context.getSystemService(Context.FINGERPRINT_SERVICE); + return (fpm != null && fpm.isHardwareDetected() && fpm.hasEnrolledFingerprints()); + } else { + @SuppressLint("WrongConstant") + BiometricManager bm = (BiometricManager) context.getSystemService(Context.BIOMETRIC_SERVICE); + return (bm != null && bm.canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS); + } + } + static boolean hasAuthentication(Context context) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); return prefs.getBoolean("biometrics", false);