security: FLAG_SECURE на экранах входа и PIN (аудит п.3)

Новый эффект F7SecureScreen(): пока экран на виду — окно с FLAG_SECURE
(нет в скриншотах/recents/записи экрана), снимается при уходе. Повешен на
LoginScreen (ввод пароля), AppLockUnlockScreen (разблокировка PIN) и
AppLockSetupDialog (создание PIN). Закрывает хвост Этапа 0 п.3.
This commit is contained in:
b-dev-mobile
2026-07-09 02:50:57 +00:00
parent e25dcbc403
commit cfa9fe2ffd
3 changed files with 29 additions and 0 deletions
@@ -53,6 +53,7 @@ import androidx.lifecycle.ProcessLifecycleOwner
import ru.forbion.f7cloud.core.auth.AppLockStore
import ru.forbion.f7cloud.core.designsystem.F7Colors
import ru.forbion.f7cloud.core.designsystem.F7PrimaryButton
import ru.forbion.f7cloud.core.designsystem.F7SecureScreen
import ru.forbion.f7cloud.core.designsystem.F7TextButton
import ru.forbion.f7cloud.mobile.R
@@ -145,6 +146,7 @@ fun AppLockSetupDialog(
onLockConfigured: () -> Unit = {},
) {
if (!visible) return
F7SecureScreen() // создание/подтверждение PIN — не в скриншотах/recents
val context = LocalContext.current
val activity = context.findFragmentActivity()
@@ -534,6 +536,7 @@ private fun AppLockUnlockScreen(
lockSession: Int,
onUnlocked: () -> Unit,
) {
F7SecureScreen() // экран разблокировки (PIN) — не в скриншотах/recents
val context = LocalContext.current
val activity = context.findFragmentActivity()
var pin by remember { mutableStateOf("") }
@@ -81,6 +81,7 @@ import ru.forbion.f7cloud.core.push.F7PushEventHub
import ru.forbion.f7cloud.core.push.F7PushRegistrar
import ru.forbion.f7cloud.core.designsystem.F7OverlayNavigationProvider
import ru.forbion.f7cloud.core.designsystem.F7AppMenuSheet
import ru.forbion.f7cloud.core.designsystem.F7SecureScreen
import ru.forbion.f7cloud.core.designsystem.F7AppScaffold
import ru.forbion.f7cloud.core.designsystem.F7AutoHideBottomBar
import ru.forbion.f7cloud.core.designsystem.F7BottomBarActions
@@ -689,6 +690,7 @@ fun AppScaffold(
private const val PERMISSIONS_PROMPTED_KEY = "runtime_permissions_prompted_v2"
@Composable
private fun LoginScreen(onLogin: (AuthSession) -> Unit) {
F7SecureScreen() // ввод пароля — не в скриншотах/recents
val context = LocalContext.current
val scope = rememberCoroutineScope()
val keyboardController = LocalSoftwareKeyboardController.current