Add screen capture protection (#292)

Co-authored-by: Rahul Sharma <rahul.shwork@gmail.com>
This commit is contained in:
Aryan 2026-05-10 10:18:48 +05:30 committed by GitHub
parent 8366d76dcd
commit 6897496423
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 77 additions and 2 deletions

View file

@ -22,6 +22,7 @@ package com.aryan.reader
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.WindowManager
import android.webkit.WebView
import androidx.appcompat.app.AppCompatActivity
import androidx.activity.compose.setContent
@ -34,6 +35,8 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.Modifier
import androidx.lifecycle.lifecycleScope
import androidx.navigation.compose.rememberNavController
@ -87,6 +90,8 @@ class MainActivity : AppCompatActivity() {
setContent {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
ScreenCaptureProtectionEffect(enabled = uiState.isScreenCaptureProtectionEnabled)
val darkTheme = when (uiState.appThemeMode) {
AppThemeMode.LIGHT -> false
AppThemeMode.DARK -> true
@ -131,4 +136,21 @@ class MainActivity : AppCompatActivity() {
viewModel.onFileSelected(uri, isFromRecent = false, isExternalIntent = true)
}
}
}
}
@Composable
private fun MainActivity.ScreenCaptureProtectionEffect(enabled: Boolean) {
DisposableEffect(enabled) {
if (enabled) {
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)
} else {
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
onDispose {
if (enabled) {
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE)
}
}
}
}