From 195235495ecc0eedacfc570c0ca84452f7787b3a Mon Sep 17 00:00:00 2001 From: b-dev-mobile Date: Mon, 13 Jul 2026 11:57:33 +0000 Subject: [PATCH] =?UTF-8?q?F7SecureScreen:=20=D0=BD=D0=B5=20=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20FLAG=5FSECURE=20=D0=B2=20debug?= =?UTF-8?q?-=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B5=20(FLAG=5FDEBUGGABLE-?= =?UTF-8?q?=D0=B3=D0=B5=D0=B9=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Релиз остаётся защищённым (скриншоты/запись/превью блокируются), но debug-APK теперь снимается на эмуляторе — нужно для автономного визуал-теста (screencap на secure-окне возвращает пустой кадр). Проверка через ApplicationInfo.FLAG_DEBUGGABLE, без BuildConfig (работает в library-модуле). --- .../f7cloud/core/designsystem/F7SecureScreen.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7SecureScreen.kt b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7SecureScreen.kt index 8262022..d49ec3f 100644 --- a/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7SecureScreen.kt +++ b/core/designsystem/src/main/java/ru/forbion/f7cloud/core/designsystem/F7SecureScreen.kt @@ -1,6 +1,7 @@ package ru.forbion.f7cloud.core.designsystem import android.app.Activity +import android.content.pm.ApplicationInfo import android.view.WindowManager import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -10,15 +11,23 @@ import androidx.compose.ui.platform.LocalContext * Пока этот экран на виду — окно помечено FLAG_SECURE: содержимое не попадает * в скриншоты, превью в «недавних» и запись экрана. Вешать на чувствительные * экраны (ввод пароля/PIN). Флаг снимается при уходе с экрана. + * + * В debug-сборке (FLAG_DEBUGGABLE) флаг НЕ ставится — иначе невозможен автономный + * визуал-тест на эмуляторе (screencap возвращает пустой кадр). Релиз — всегда защищён. */ @Composable fun F7SecureScreen() { val context = LocalContext.current DisposableEffect(Unit) { + val debuggable = (context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE) != 0 val window = (context as? Activity)?.window - window?.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + if (!debuggable) { + window?.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + } onDispose { - window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + if (!debuggable) { + window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } } } }