You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
refactor(core): 생체 인증 프롬프트 래퍼를 core:common 으로 올린다 #2195
feature/afternote/presentation/.../shared/fingerprint/BiometricAuth.kt 의 FragmentActivity.authenticateBiometric
feature/setting/presentation/.../passkey/PassKeyMakingScreen.kt 의 private authenticate(activity) 와 BiometricResult
허용자 조합, CryptoObject 생성과 confirmWithCryptoOperation 성공 확정, 취소 코드 세 가지를 Canceled 로 접는 분기, invokeOnCancellation 처리가 같다. #1166 본문이 이미 복제라고 적었고, 같은 CodeQL 수정이 914a440(0826, afternote)와 21df4d8(0913, setting)로 두 번 들어갔다.
사본은 이미 갈라졌다. 설정 쪽에는 canAuthenticate 사전 분기와 authenticate 초기화 예외를 잡는 try/catch 가 없다. BIOMETRIC_STRONG | DEVICE_CREDENTIAL 조합은 API 28~29 에서 PromptInfo.Builder.build() 가 IllegalArgumentException 을 던지는데, 설정 버튼은 BIOMETRIC_STRONG 가용 여부로만 켜지므로 Android 9·10 기기에서 패스키의 지문 인증을 누르면 예외가 새어 크래시가 난다.
래퍼를 core:common 의 biometric 패키지(BiometricCryptoGate.kt 옆)로 올리고 두 소비처가 쓰게 한다. 문구는 각 feature 가 인자로 넘긴다.
완료 조건
core:common 에 FragmentActivity.authenticateBiometric, 결과 타입, 문구 묶음이 있고 afternote 동작은 지금과 같다.
afternote 지문 관문과 설정 패스키 등록이 core 래퍼를 쓰고, 두 feature 의 사본은 지워진다.
설정 패스키가 afternote 와 같은 사전 분기·초기화 예외 처리를 얻어, 지원하지 않는 조합에서 크래시 대신 오류로 끝난다.
core·afternote·설정 유닛 테스트, ktlint, :app:compileDebugUnitTestKotlin 을 통과한다.
Activity
test(setting): cover API 29 biometric failure handling (#2195)
test(setting): construct API 29 regression through Hilt (#2195)