From 257758b27d53b7990c5fe1250446b69822fcf18e Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 20 Dec 2018 10:18:32 +0800 Subject: [PATCH] Avoid FingerprintManager.hasEnrolledFingerprints() crash on samsung devices --- .../com/hippo/ehviewer/ui/SetSecurityActivity.java | 14 +++++++++++++- .../com/hippo/ehviewer/ui/scene/SecurityScene.java | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java index ddc39c957..7691b5739 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SetSecurityActivity.java @@ -17,8 +17,10 @@ package com.hippo.ehviewer.ui; import android.hardware.fingerprint.FingerprintManager; +import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; import android.text.TextUtils; import android.view.MenuItem; import android.view.View; @@ -62,7 +64,7 @@ public class SetSecurityActivity extends ToolbarActivity implements View.OnClick FingerprintManager fingerprintManager = getSystemService(FingerprintManager.class); // The line below prevents the false positive inspection from Android Studio // noinspection ResourceType - if (fingerprintManager != null && fingerprintManager.hasEnrolledFingerprints()) { + if (fingerprintManager != null && hasEnrolledFingerprints(fingerprintManager)) { mFingerprint.setVisibility(View.VISIBLE); mFingerprint.setChecked(Settings.getEnableFingerprint()); } @@ -72,6 +74,16 @@ public class SetSecurityActivity extends ToolbarActivity implements View.OnClick mSet.setOnClickListener(this); } + @RequiresApi(api = Build.VERSION_CODES.M) + public static boolean hasEnrolledFingerprints(FingerprintManager fingerprintManager) { + try { + return fingerprintManager.isHardwareDetected() + && fingerprintManager.hasEnrolledFingerprints(); + } catch (Throwable e) { + return false; + } + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.java index eb554f287..1474ccbfc 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.java @@ -31,6 +31,7 @@ import android.widget.ImageView; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.ui.MainActivity; +import com.hippo.ehviewer.ui.SetSecurityActivity; import com.hippo.hardware.ShakeDetector; import com.hippo.widget.lockpattern.LockPatternUtils; import com.hippo.widget.lockpattern.LockPatternView; @@ -235,8 +236,7 @@ public class SecurityScene extends SolidScene implements return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Settings.getEnableFingerprint() && mFingerprintManager != null - && mFingerprintManager.isHardwareDetected() - && mFingerprintManager.hasEnrolledFingerprints(); + && SetSecurityActivity.hasEnrolledFingerprints(mFingerprintManager); } private Runnable mResetFingerprintRunnable = new Runnable() {