From 26fb31644cb9425a906c1ff49aaa21226e57f569 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 15 Sep 2023 13:33:24 +0800 Subject: [PATCH] Fix crash --- app/build.gradle | 4 +- .../fongmi/android/tv/utils/Biometric.java | 37 ++++++++++++++++++- .../tv/cjump/jni/NativeBitmapFactory.java | 7 +++- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 12ea94cf6..2b3bf1d7b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,12 +21,12 @@ android { leanback { dimension "mode" versionCode 205 - versionName "20230915" + versionName "20230915#2" } mobile { dimension "mode" versionCode 205 - versionName "20230915" + versionName "20230915#2" } java { dimension "api" diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java b/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java index dcd7f2688..33bedfc4b 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Biometric.java @@ -1,9 +1,44 @@ package com.fongmi.android.tv.utils; +import androidx.annotation.NonNull; +import androidx.biometric.BiometricManager; +import androidx.biometric.BiometricPrompt; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.FragmentActivity; + +import com.fongmi.android.tv.App; +import com.fongmi.android.tv.R; + public class Biometric { + private static BiometricManager getManager() { + return BiometricManager.from(App.get()); + } + + private static int canAuthenticate() { + return getManager().canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG); + } + public static boolean enable() { - return false; + return canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS; + } + + public static void show(FragmentActivity activity) { + prompt(activity).authenticate(new BiometricPrompt.PromptInfo.Builder().setTitle(ResUtil.getString(R.string.app_name)).setNegativeButtonText(ResUtil.getString(R.string.dialog_negative)).build()); + } + + private static BiometricPrompt prompt(FragmentActivity activity) { + return new BiometricPrompt(activity, ContextCompat.getMainExecutor(activity), new BiometricPrompt.AuthenticationCallback() { + @Override + public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) { + Notify.show(errString.toString()); + } + + @Override + public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) { + ((Callback) activity).onBiometricSuccess(); + } + }); } public interface Callback { diff --git a/danmaku/src/main/java/tv/cjump/jni/NativeBitmapFactory.java b/danmaku/src/main/java/tv/cjump/jni/NativeBitmapFactory.java index 579232aa5..673f37217 100644 --- a/danmaku/src/main/java/tv/cjump/jni/NativeBitmapFactory.java +++ b/danmaku/src/main/java/tv/cjump/jni/NativeBitmapFactory.java @@ -1,6 +1,7 @@ package tv.cjump.jni; import android.graphics.Bitmap; +import android.os.Build; public class NativeBitmapFactory { @@ -9,6 +10,10 @@ public class NativeBitmapFactory { } public static synchronized Bitmap createBitmap(int width, int height, Bitmap.Config config, boolean hasAlpha) { - return Bitmap.createBitmap(width, height, config, hasAlpha); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + return Bitmap.createBitmap(width, height, config, hasAlpha); + } else { + return Bitmap.createBitmap(width, height, config); + } } }