- 원인: visibilitychange(숨김)로 백그라운드를 감지하는데 카메라/파일선택/공유 호출 시에도 웹뷰가 숨겨져 잠금이 걸렸음(복귀 시 PIN 화면) - appLock.suppressLock(): 네이티브 동작 직전 일시중지 창을 열어 그 복귀는 잠그지 않음 - 파일선택(input[type=file])은 App.vue 전역 클릭 리스너로 일괄 처리 - 카메라(OCR)·공유(백업)는 호출부에서 직접 suppressLock 호출 - 복귀(visible) 시 일시중지 창 해제 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,10 @@ const state = reactive({
|
||||
locked: false,
|
||||
})
|
||||
|
||||
// 카메라/갤러리/공유 등 앱 내 네이티브 동작을 호출하면 웹뷰가 잠깐 백그라운드로
|
||||
// 인식돼 잠금이 걸리는 오작동을 막기 위한 "잠금 일시중지" 창(timestamp).
|
||||
let suppressUntil = 0
|
||||
|
||||
async function hashPin(pin) {
|
||||
const data = new TextEncoder().encode('dondwaeji-applock:' + pin)
|
||||
const buf = await crypto.subtle.digest('SHA-256', data)
|
||||
@@ -39,10 +43,19 @@ export const appLock = {
|
||||
state.enabled = false
|
||||
state.locked = false
|
||||
},
|
||||
/** 잠금 걸기(활성화된 경우에만) */
|
||||
/** 잠금 걸기(활성화 + 일시중지 창 밖일 때만) */
|
||||
lock() {
|
||||
if (Date.now() < suppressUntil) return // 네이티브 동작 복귀 — 잠그지 않음
|
||||
if (state.enabled) state.locked = true
|
||||
},
|
||||
/** 다음 백그라운드 전환을 잠그지 않음(카메라/갤러리/공유 호출 직전에 사용) */
|
||||
suppressLock(ms = 60000) {
|
||||
suppressUntil = Date.now() + ms
|
||||
},
|
||||
/** 일시중지 창 해제(앱으로 복귀 시) */
|
||||
clearSuppress() {
|
||||
suppressUntil = 0
|
||||
},
|
||||
/** 잠금 풀기(이번 세션) */
|
||||
unlock() {
|
||||
state.locked = false
|
||||
|
||||
Reference in New Issue
Block a user