Updated on 2026-08-14
This commit is contained in:
parent
3306749ae5
commit
b98b66ff9f
6 changed files with 84 additions and 46 deletions
|
|
@ -1,11 +1,53 @@
|
|||
package com.tangem.core.ui.security
|
||||
|
||||
import android.app.Activity
|
||||
import android.view.WindowManager
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.staticCompositionLocalOf
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import com.tangem.core.ui.utils.findActivity
|
||||
import timber.log.Timber
|
||||
|
||||
private val LocalSecureFlagController = staticCompositionLocalOf<SecureFlagController> {
|
||||
error("No SecureFlagController provided")
|
||||
}
|
||||
|
||||
private class SecureFlagController(private val activity: Activity) {
|
||||
private var count by mutableIntStateOf(0)
|
||||
|
||||
fun enable() {
|
||||
if (count == 0) {
|
||||
activity.window.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
)
|
||||
}
|
||||
count++
|
||||
}
|
||||
|
||||
fun disable() {
|
||||
count--
|
||||
if (count == 0) {
|
||||
activity.window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProvideSecureFlagController(content: @Composable () -> Unit) {
|
||||
val activity = LocalContext.current.findActivity()
|
||||
val controller = remember(activity) { SecureFlagController(activity) }
|
||||
|
||||
CompositionLocalProvider(
|
||||
LocalSecureFlagController provides controller,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Disables screenshots for the current composition.
|
||||
|
|
@ -14,18 +56,10 @@ import timber.log.Timber
|
|||
*/
|
||||
@Composable
|
||||
fun DisableScreenshotsDisposableEffect() {
|
||||
val activity = LocalContext.current.findActivity()
|
||||
val secureFlagController = LocalSecureFlagController.current
|
||||
|
||||
DisposableEffect(activity) {
|
||||
Timber.d("Security mode: enabled")
|
||||
activity.window.setFlags(
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
WindowManager.LayoutParams.FLAG_SECURE,
|
||||
)
|
||||
|
||||
onDispose {
|
||||
Timber.d("Security mode: disabled")
|
||||
activity.window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
|
||||
}
|
||||
DisposableEffect(secureFlagController) {
|
||||
secureFlagController.enable()
|
||||
onDispose { secureFlagController.disable() }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue