feat: Add logging for screen initialization and data loading in UnlockScreen

This commit is contained in:
k1ngsterr1
2026-01-24 23:07:43 +05:00
parent a239486860
commit 0bb8bee2e2

View File

@@ -181,6 +181,8 @@ fun UnlockScreen(
val biometricPrefs = remember { BiometricPreferences(context) }
val scope = rememberCoroutineScope()
android.util.Log.d("UnlockScreen", "🎬 SCREEN INITIALIZED - Activity: $activity")
var password by remember { mutableStateOf("") }
var passwordVisible by remember { mutableStateOf(false) }
var isUnlocking by remember { mutableStateOf(false) }
@@ -191,6 +193,7 @@ fun UnlockScreen(
var isBiometricEnabled by remember { mutableStateOf(false) }
var savedPasswordsMap by remember { mutableStateOf<Map<String, String>>(emptyMap()) }
var dataLoaded by remember { mutableStateOf(false) }
var biometricAttempted by remember { mutableStateOf(false) } // Отслеживаем попытку биометрии
// Account selection state
var accounts by remember { mutableStateOf<List<AccountItem>>(emptyList()) }
@@ -201,6 +204,7 @@ fun UnlockScreen(
// Load accounts and pre-select last used account
LaunchedEffect(Unit) {
android.util.Log.d("UnlockScreen", "📦 LOADING DATA...")
// ⚡ СИНХРОННОЕ чтение последнего аккаунта ДО загрузки списка
val lastLoggedKey = accountManager.getLastLoggedPublicKey()
@@ -248,60 +252,86 @@ fun UnlockScreen(
android.util.Log.d("UnlockScreen", "🔐 Has password for selected: ${selectedAccount?.let { passwords.containsKey(it.publicKey) }}")
dataLoaded = true
android.util.Log.d("UnlockScreen", "✅ DATA LOADED")
}
// Автоматически пытаемся разблокировать через биометрию при выборе аккаунта
LaunchedEffect(selectedAccount, isBiometricEnabled, savedPasswordsMap, dataLoaded) {
android.util.Log.d("UnlockScreen", "🚀 LaunchedEffect triggered")
android.util.Log.d("UnlockScreen", "🚀 dataLoaded: $dataLoaded")
android.util.Log.d("UnlockScreen", "🚀 selectedAccount: ${selectedAccount?.publicKey}")
android.util.Log.d("UnlockScreen", "🚀 isBiometricEnabled: $isBiometricEnabled")
android.util.Log.d("UnlockScreen", "🚀 biometricAvailable: $biometricAvailable")
android.util.Log.d("UnlockScreen", "🚀 activity: $activity")
// Функция для запуска биометрической разблокировки
fun tryBiometricUnlock() {
if (selectedAccount == null || activity == null) {
android.util.Log.d("UnlockScreen", "❌ Cannot start biometric: no account or activity")
return
}
val encryptedPassword = savedPasswordsMap[selectedAccount!!.publicKey]
if (encryptedPassword == null) {
android.util.Log.d("UnlockScreen", "❌ No saved password for account")
return
}
android.util.Log.d("UnlockScreen", "🔐 Starting biometric unlock...")
biometricAttempted = true
biometricManager.decryptPassword(
activity = activity,
encryptedData = encryptedPassword,
onSuccess = { decryptedPassword ->
android.util.Log.d("UnlockScreen", "✅ Biometric success, unlocking...")
scope.launch {
performUnlock(
selectedAccount = selectedAccount,
password = decryptedPassword,
accountManager = accountManager,
onUnlocking = { isUnlocking = it },
onError = { error = it },
onSuccess = { decryptedAccount ->
onUnlocked(decryptedAccount)
}
)
}
},
onError = { errorMessage ->
android.util.Log.e("UnlockScreen", "❌ Biometric error: $errorMessage")
error = errorMessage
},
onCancel = {
android.util.Log.d("UnlockScreen", "🚫 Biometric cancelled")
}
)
}
// Автоматически запускаем биометрию при загрузке данных
LaunchedEffect(dataLoaded, selectedAccount, isBiometricEnabled, savedPasswordsMap) {
android.util.Log.d("UnlockScreen", "🚀 Auto-biometric LaunchedEffect")
android.util.Log.d("UnlockScreen", " dataLoaded: $dataLoaded")
android.util.Log.d("UnlockScreen", " selectedAccount: ${selectedAccount?.publicKey}")
android.util.Log.d("UnlockScreen", " isBiometricEnabled: $isBiometricEnabled")
android.util.Log.d("UnlockScreen", " biometricAvailable: $biometricAvailable")
android.util.Log.d("UnlockScreen", " activity: $activity")
android.util.Log.d("UnlockScreen", " biometricAttempted: $biometricAttempted")
if (!dataLoaded) {
android.util.Log.d("UnlockScreen", "⏸️ Data not loaded yet, waiting...")
android.util.Log.d("UnlockScreen", "⏸️ Data not loaded yet")
return@LaunchedEffect
}
if (selectedAccount != null && isBiometricEnabled && activity != null &&
if (biometricAttempted) {
android.util.Log.d("UnlockScreen", "⏸️ Biometric already attempted")
return@LaunchedEffect
}
if (selectedAccount != null &&
isBiometricEnabled &&
activity != null &&
biometricAvailable is BiometricAvailability.Available) {
val encryptedPassword = savedPasswordsMap[selectedAccount!!.publicKey]
android.util.Log.d("UnlockScreen", "🔑 Encrypted password found: ${encryptedPassword != null}")
android.util.Log.d("UnlockScreen", "🔑 Has password: ${encryptedPassword != null}")
if (encryptedPassword != null) {
// Небольшая задержка для анимации UI
delay(500)
// Запускаем биометрическую аутентификацию
biometricManager.decryptPassword(
activity = activity,
encryptedData = encryptedPassword,
onSuccess = { decryptedPassword ->
password = decryptedPassword
// Автоматически разблокируем
scope.launch {
performUnlock(
selectedAccount = selectedAccount,
password = decryptedPassword,
accountManager = accountManager,
onUnlocking = { isUnlocking = it },
onError = { error = it },
onSuccess = { decryptedAccount ->
onUnlocked(decryptedAccount)
}
)
}
},
onError = { errorMessage ->
// Если биометрия не сработала, пользователь может ввести пароль вручную
android.util.Log.e("UnlockScreen", "Biometric error: $errorMessage")
},
onCancel = {
// Пользователь отменил биометрию, покажем поле для ввода пароля
}
)
delay(300)
tryBiometricUnlock()
}
}
}
@@ -813,35 +843,7 @@ fun UnlockScreen(
if (showBiometricButton) {
Button(
onClick = {
if (selectedAccount == null || activity == null) return@Button
val encryptedPassword = savedPasswordsMap[selectedAccount!!.publicKey]
if (encryptedPassword != null) {
biometricManager.decryptPassword(
activity = activity,
encryptedData = encryptedPassword,
onSuccess = { decryptedPassword ->
scope.launch {
performUnlock(
selectedAccount = selectedAccount,
password = decryptedPassword,
accountManager = accountManager,
onUnlocking = { isUnlocking = it },
onError = { error = it },
onSuccess = { decryptedAccount ->
onUnlocked(decryptedAccount)
}
)
}
},
onError = { errorMessage ->
error = errorMessage
},
onCancel = {
// User cancelled
}
)
}
tryBiometricUnlock()
},
enabled = !isUnlocking,
modifier = Modifier