diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index 50404622b..ce4176181 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -38,6 +38,7 @@ import android.os.StrictMode; import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.Log; +import android.view.WindowManager; import android.widget.Toast; import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiskCache; @@ -126,6 +127,9 @@ public class FDroidApp extends Application { public void applyTheme(Activity activity) { activity.setTheme(getCurThemeResId()); + if (Preferences.get().preventScreenshots()) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); + } } public static int getCurThemeResId() { diff --git a/app/src/main/java/org/fdroid/fdroid/Preferences.java b/app/src/main/java/org/fdroid/fdroid/Preferences.java index 3d6b614e1..921464760 100644 --- a/app/src/main/java/org/fdroid/fdroid/Preferences.java +++ b/app/src/main/java/org/fdroid/fdroid/Preferences.java @@ -38,6 +38,8 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh .putString(PREF_LOCAL_REPO_NAME, getDefaultLocalRepoName()) .apply(); } + defaultPreventScreenshots = + context.getResources().getBoolean(R.bool.defaultPreventScreenshots); } public static final String PREF_UPD_INTERVAL = "updateInterval"; @@ -66,6 +68,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh public static final String PREF_SHOW_NFC_DURING_SWAP = "showNfcDuringSwap"; public static final String PREF_POST_PRIVILEGED_INSTALL = "postPrivilegedInstall"; public static final String PREF_TRIED_EMPTY_UPDATE = "triedEmptyUpdate"; + public static final String PREF_PREVENT_SCREENSHOTS = "preventScreenshots"; private static final boolean DEFAULT_ROOTED = true; private static final boolean DEFAULT_HIDE_ANTI_FEATURE_APPS = false; @@ -85,6 +88,7 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh private static final boolean DEFAULT_SHOW_NFC_DURING_SWAP = true; private static final boolean DEFAULT_FORCE_OLD_INDEX = false; private static final boolean DEFAULT_POST_PRIVILEGED_INSTALL = false; + private final boolean defaultPreventScreenshots; public enum Theme { light, @@ -314,6 +318,10 @@ public final class Preferences implements SharedPreferences.OnSharedPreferenceCh } } + public boolean preventScreenshots() { + return preferences.getBoolean(PREF_PREVENT_SCREENSHOTS, defaultPreventScreenshots); + } + /** * This is cached as it is called several times inside app list adapters. * Providing it here means the shared preferences file only needs to be diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java index f1b9aaca8..bd318459d 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java @@ -12,6 +12,8 @@ import android.preference.Preference; import android.preference.PreferenceCategory; import android.support.v4.preference.PreferenceFragment; import android.text.TextUtils; +import android.view.WindowManager; + import com.geecko.QuickLyric.view.AppCompatListPreference; import info.guardianproject.netcipher.NetCipher; import info.guardianproject.netcipher.proxy.OrbotHelper; @@ -377,6 +379,13 @@ public class PreferencesFragment extends PreferenceFragment public void onSharedPreferenceChanged( SharedPreferences sharedPreferences, String key) { updateSummary(key, true); + if (key.equals(Preferences.PREF_PREVENT_SCREENSHOTS)) { + if (Preferences.get().preventScreenshots()) { + getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); + } else { + getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); + } + } } } diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index bec951edc..16849e588 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -13,4 +13,8 @@ <attr name="lightGrayTextColor" format="color" /> <attr name="antiFeaturesWarning" format="reference" /> </declare-styleable> + + <!-- Default Preferences --> + <bool name="defaultPreventScreenshots">false</bool> + </resources> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dc580c2b6..1f93bc56d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -240,6 +240,10 @@ This often occurs with apps installed via Google Play or other sources, if they <string name="proxy_port">Proxy Port</string> <string name="proxy_port_summary">Your proxy\'s port number (e.g. 8118)</string> + <string name="privacy">Privacy</string> + <string name="preventScreenshots_title">Prevent Screenshots</string> + <string name="preventScreenshots_summary">Blocks screenshots from being taken and hides app content from recent apps screen</string> + <!-- status_download takes four parameters: - Repository (url) diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index c12ac36bd..d787ac33f 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -89,6 +89,19 @@ android:summary="@string/proxy_port_summary" android:dependency="enableProxy" /> </PreferenceCategory> + + <PreferenceCategory + android:key="pref_category_privacy" + android:title="@string/privacy"> + + <CheckBoxPreference + android:defaultValue="@bool/defaultPreventScreenshots" + android:key="preventScreenshots" + android:summary="@string/preventScreenshots_summary" + android:title="@string/preventScreenshots_title"/> + + </PreferenceCategory> + <PreferenceCategory android:title="@string/other" android:key="pref_category_other"> <com.geecko.QuickLyric.view.AppCompatListPreference android:title="@string/cache_downloaded"