From 1360fda38d7879d2b1222c88a83f4c2c8101084c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=BC=ED=98=81?= Date: Thu, 1 Oct 2026 19:03:29 +0900 Subject: [PATCH 1/2] fix(core): restore legacy biometric authentication (#2200) --- app/src/main/res/values-v29/themes.xml | 5 + app/src/main/res/values/themes.xml | 6 +- .../afternote_fe/BiometricDialogThemeTest.kt | 100 +++++++ .../core/common/biometric/BiometricAuth.kt | 22 +- .../common/biometric/BiometricCryptoGate.kt | 21 +- .../passkey/PassKeyMakingApi29Test.kt | 268 +++++++++++++++--- gradle/libs.versions.toml | 3 +- 7 files changed, 374 insertions(+), 51 deletions(-) create mode 100644 app/src/main/res/values-v29/themes.xml create mode 100644 app/src/test/java/com/afternote/afternote_fe/BiometricDialogThemeTest.kt diff --git a/app/src/main/res/values-v29/themes.xml b/app/src/main/res/values-v29/themes.xml new file mode 100644 index 0000000000..4232750e1d --- /dev/null +++ b/app/src/main/res/values-v29/themes.xml @@ -0,0 +1,5 @@ + + + + - \ No newline at end of file + diff --git a/app/src/test/java/com/afternote/afternote_fe/BiometricDialogThemeTest.kt b/app/src/test/java/com/afternote/afternote_fe/BiometricDialogThemeTest.kt new file mode 100644 index 0000000000..8744dce378 --- /dev/null +++ b/app/src/test/java/com/afternote/afternote_fe/BiometricDialogThemeTest.kt @@ -0,0 +1,100 @@ +package com.afternote.afternote_fe + +import android.app.Activity +import android.app.Application +import android.app.Dialog +import android.content.Context +import android.content.DialogInterface +import android.os.Looper +import android.util.TypedValue +import android.widget.Button +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner +import org.robolectric.Shadows.shadowOf +import org.robolectric.annotation.Config + +/** 실제 앱 테마로 AndroidX 지문 대화상자와 같은 AppCompat dialog를 생성한다. */ +@RunWith(RobolectricTestRunner::class) +@Config(sdk = [26, 27, 28], application = Application::class) +class BiometricDialogThemeTest { + @Test + fun `API26부터 28 앱 테마는 AppCompat 인증 대화상자를 띄우고 닫을 수 있다`() { + val controller = Robolectric.buildActivity(Activity::class.java) + controller.get().setTheme(R.style.Theme_Afternotefe_Main) + controller.setup() + val activity = controller.get() + var canceled = false + val dialog = createAppCompatDialog(activity) { canceled = true } + + try { + // 플랫폼 Material 테마만 있으면 show()에서 AppCompat 테마 요구 예외가 발생한다. + dialog.show() + assertTrue(dialog.isShowing) + dialog.findViewById