From 639a5e8e768d4c23f8daa7063977e73c1b4c6ad8 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Mon, 7 Apr 2014 20:33:53 +0100
Subject: [PATCH] Prevent screenshots (including the Recents menu).

Thanks to the team that audited CryptoCat for this idea. :-)
---
 briar-android/src/org/briarproject/android/BriarActivity.java  | 2 ++
 .../src/org/briarproject/android/ExpiredActivity.java          | 3 +++
 .../src/org/briarproject/android/PasswordActivity.java         | 3 +++
 briar-android/src/org/briarproject/android/SetupActivity.java  | 3 +++
 .../src/org/briarproject/android/SplashScreenActivity.java     | 3 +++
 5 files changed, 14 insertions(+)

diff --git a/briar-android/src/org/briarproject/android/BriarActivity.java b/briar-android/src/org/briarproject/android/BriarActivity.java
index 1d3e30b45a..6dcf3e1b72 100644
--- a/briar-android/src/org/briarproject/android/BriarActivity.java
+++ b/briar-android/src/org/briarproject/android/BriarActivity.java
@@ -2,6 +2,7 @@ package org.briarproject.android;
 
 import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION;
 import static android.content.Intent.FLAG_ACTIVITY_SINGLE_TOP;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
 
 import java.util.concurrent.Executor;
@@ -41,6 +42,7 @@ public class BriarActivity extends RoboActivity {
 	@Override
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
+		getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);
 		if(databaseConfig.getEncryptionKey() != null) startAndBindService();
 	}
 
diff --git a/briar-android/src/org/briarproject/android/ExpiredActivity.java b/briar-android/src/org/briarproject/android/ExpiredActivity.java
index 453775393d..042d894b27 100644
--- a/briar-android/src/org/briarproject/android/ExpiredActivity.java
+++ b/briar-android/src/org/briarproject/android/ExpiredActivity.java
@@ -1,6 +1,7 @@
 package org.briarproject.android;
 
 import static android.view.Gravity.CENTER;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 
 import org.briarproject.R;
@@ -17,6 +18,8 @@ public class ExpiredActivity extends Activity {
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
 
+		getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);
+
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
 		layout.setGravity(CENTER);
diff --git a/briar-android/src/org/briarproject/android/PasswordActivity.java b/briar-android/src/org/briarproject/android/PasswordActivity.java
index 2ae108330b..68fce1d547 100644
--- a/briar-android/src/org/briarproject/android/PasswordActivity.java
+++ b/briar-android/src/org/briarproject/android/PasswordActivity.java
@@ -6,6 +6,7 @@ import static android.view.Gravity.CENTER;
 import static android.view.Gravity.CENTER_HORIZONTAL;
 import static android.view.View.GONE;
 import static android.view.View.VISIBLE;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static android.view.inputmethod.InputMethodManager.HIDE_IMPLICIT_ONLY;
 import static android.widget.LinearLayout.VERTICAL;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
@@ -55,6 +56,8 @@ public class PasswordActivity extends RoboActivity {
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
 
+		getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);
+
 		SharedPreferences prefs = getSharedPreferences("db", MODE_PRIVATE);
 		String hex = prefs.getString("key", null);
 		if(hex == null || !databaseConfig.databaseExists()) {
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java
index 02d9b0183f..69ab300a00 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/org/briarproject/android/SetupActivity.java
@@ -9,6 +9,7 @@ import static android.view.Gravity.CENTER_HORIZONTAL;
 import static android.view.View.GONE;
 import static android.view.View.INVISIBLE;
 import static android.view.View.VISIBLE;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static android.widget.LinearLayout.VERTICAL;
 import static java.util.logging.Level.INFO;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
@@ -74,6 +75,8 @@ public class SetupActivity extends RoboActivity implements OnClickListener {
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
 
+		getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);
+
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
 		layout.setOrientation(VERTICAL);
diff --git a/briar-android/src/org/briarproject/android/SplashScreenActivity.java b/briar-android/src/org/briarproject/android/SplashScreenActivity.java
index 16039e96ad..fb5eeda3b5 100644
--- a/briar-android/src/org/briarproject/android/SplashScreenActivity.java
+++ b/briar-android/src/org/briarproject/android/SplashScreenActivity.java
@@ -1,6 +1,7 @@
 package org.briarproject.android;
 
 import static android.view.Gravity.CENTER;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
 import static java.util.logging.Level.INFO;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 
@@ -44,6 +45,8 @@ public class SplashScreenActivity extends RoboSplashActivity {
 	public void onCreate(Bundle state) {
 		super.onCreate(state);
 
+		getWindow().setFlags(FLAG_SECURE, FLAG_SECURE);
+
 		LinearLayout layout = new LinearLayout(this);
 		layout.setLayoutParams(MATCH_MATCH);
 		layout.setGravity(CENTER);
-- 
GitLab