From 82071985bc8770f6aa09bb06940c7fb9cc341c41 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 13 May 2024 16:40:15 +0200 Subject: [PATCH] Added back secure flag to prevent screenshots --- .../java/org/linphone/core/CorePreferences.kt | 22 +++++++++---- .../java/org/linphone/ui/GenericActivity.kt | 32 +++++++++++++++++++ 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/linphone/core/CorePreferences.kt b/app/src/main/java/org/linphone/core/CorePreferences.kt index 06b2e363a..02c2b25e5 100644 --- a/app/src/main/java/org/linphone/core/CorePreferences.kt +++ b/app/src/main/java/org/linphone/core/CorePreferences.kt @@ -138,13 +138,6 @@ class CorePreferences @UiThread constructor(private val context: Context) { config.setInt("app", "dark_mode", value) } - @get:WorkerThread @set:WorkerThread - var themeMainColor: String - get() = config.getString("ui", "theme_main_color", "orange")!! - set(value) { - config.setString("ui", "theme_main_color", value) - } - @get:WorkerThread @set:WorkerThread var linphoneConfigurationVersion: Int get() = config.getInt("app", "config_version", 50200) @@ -152,6 +145,21 @@ class CorePreferences @UiThread constructor(private val context: Context) { config.setInt("app", "config_version", value) } + /** Allows to make screenshots */ + @get:WorkerThread @set:WorkerThread + var enableSecureMode: Boolean + get() = config.getBool("ui", "enable_secure_mode", true) + set(value) { + config.setBool("ui", "enable_secure_mode", value) + } + + @get:WorkerThread @set:WorkerThread + var themeMainColor: String + get() = config.getString("ui", "theme_main_color", "orange")!! + set(value) { + config.setString("ui", "theme_main_color", value) + } + @get:WorkerThread val darkModeAllowed: Boolean get() = config.getBool("ui", "dark_mode_allowed", true) diff --git a/app/src/main/java/org/linphone/ui/GenericActivity.kt b/app/src/main/java/org/linphone/ui/GenericActivity.kt index bd3c5a983..af1f90c40 100644 --- a/app/src/main/java/org/linphone/ui/GenericActivity.kt +++ b/app/src/main/java/org/linphone/ui/GenericActivity.kt @@ -24,6 +24,7 @@ import android.content.res.Configuration import android.content.res.Resources import android.os.Bundle import android.view.ViewGroup +import android.view.WindowManager import androidx.annotation.DrawableRes import androidx.annotation.MainThread import androidx.appcompat.app.AppCompatActivity @@ -68,6 +69,8 @@ open class GenericActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { WindowCompat.setDecorFitsSystemWindows(window, true) + enableWindowSecureMode(corePreferences.enableSecureMode) + val nightMode = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK val darkModeEnabled = corePreferences.darkMode Log.i( @@ -209,4 +212,33 @@ open class GenericActivity : AppCompatActivity() { } } } + + private fun enableWindowSecureMode(enable: Boolean) { + val flags: Int = window.attributes.flags + if ((enable && flags and WindowManager.LayoutParams.FLAG_SECURE != 0) || + (!enable && flags and WindowManager.LayoutParams.FLAG_SECURE == 0) + ) { + Log.d( + "$TAG Secure flag is already ${if (enable) "enabled" else "disabled"}, skipping..." + ) + return + } + + if (enable) { + Log.i("$TAG Secure flag added to window") + window.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + } else { + Log.w("$TAG Secure flag cleared from window") + window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } + + if (window.decorView.isAttachedToWindow) { + Log.d("$TAG Redrawing window decorView to apply flag") + try { + windowManager.updateViewLayout(window.decorView, window.attributes) + } catch (ise: IllegalStateException) { + Log.e("$TAG Failed to update window's decorView layout: $ise") + } + } + } }