Optionally prevent taking screenshots
- Add setting to prevent screenshots - Enforce using FLAG_SECURE in onResume for each activity
This commit is contained in:
parent
b6fe1898e7
commit
ef8f10cc13
|
@ -1,16 +1,24 @@
|
||||||
package eu.siacs.conversations.ui;
|
package eu.siacs.conversations.ui;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
import eu.siacs.conversations.utils.ThemeHelper;
|
import eu.siacs.conversations.utils.ThemeHelper;
|
||||||
|
|
||||||
import static eu.siacs.conversations.ui.XmppActivity.configureActionBar;
|
import static eu.siacs.conversations.ui.XmppActivity.configureActionBar;
|
||||||
|
|
||||||
public class AboutActivity extends AppCompatActivity {
|
public class AboutActivity extends AppCompatActivity {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume(){
|
||||||
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
|
@ -2,10 +2,13 @@ package eu.siacs.conversations.ui;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
|
|
||||||
public class ConversationActivity extends AppCompatActivity {
|
public class ConversationActivity extends AppCompatActivity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -14,4 +17,10 @@ public class ConversationActivity extends AppCompatActivity {
|
||||||
startActivity(new Intent(this, ConversationsActivity.class));
|
startActivity(new Intent(this, ConversationsActivity.class));
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume(){
|
||||||
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ import eu.siacs.conversations.services.QuickConversationsService;
|
||||||
import eu.siacs.conversations.ui.util.LocationHelper;
|
import eu.siacs.conversations.ui.util.LocationHelper;
|
||||||
import eu.siacs.conversations.ui.widget.Marker;
|
import eu.siacs.conversations.ui.widget.Marker;
|
||||||
import eu.siacs.conversations.ui.widget.MyLocation;
|
import eu.siacs.conversations.ui.widget.MyLocation;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
import eu.siacs.conversations.utils.ThemeHelper;
|
import eu.siacs.conversations.utils.ThemeHelper;
|
||||||
|
|
||||||
public abstract class LocationActivity extends ActionBarActivity implements LocationListener {
|
public abstract class LocationActivity extends ActionBarActivity implements LocationListener {
|
||||||
|
@ -68,6 +69,7 @@ public abstract class LocationActivity extends ActionBarActivity implements Loca
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected void updateLocationMarkers() {
|
protected void updateLocationMarkers() {
|
||||||
clearMarkers();
|
clearMarkers();
|
||||||
}
|
}
|
||||||
|
@ -222,6 +224,7 @@ public abstract class LocationActivity extends ActionBarActivity implements Loca
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
Configuration.getInstance().load(this, getPreferences());
|
Configuration.getInstance().load(this, getPreferences());
|
||||||
map.onResume();
|
map.onResume();
|
||||||
this.setMyLoc(null);
|
this.setMyLoc(null);
|
||||||
|
|
|
@ -29,6 +29,7 @@ import android.content.DialogInterface.OnCancelListener;
|
||||||
import android.content.DialogInterface.OnClickListener;
|
import android.content.DialogInterface.OnClickListener;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
@ -39,6 +40,7 @@ import java.util.logging.Logger;
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.entities.MTMDecision;
|
import eu.siacs.conversations.entities.MTMDecision;
|
||||||
import eu.siacs.conversations.services.MemorizingTrustManager;
|
import eu.siacs.conversations.services.MemorizingTrustManager;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
import eu.siacs.conversations.utils.ThemeHelper;
|
import eu.siacs.conversations.utils.ThemeHelper;
|
||||||
|
|
||||||
public class MemorizingActivity extends AppCompatActivity implements OnClickListener, OnCancelListener {
|
public class MemorizingActivity extends AppCompatActivity implements OnClickListener, OnCancelListener {
|
||||||
|
@ -61,6 +63,8 @@ public class MemorizingActivity extends AppCompatActivity implements OnClickList
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
|
|
||||||
Intent i = getIntent();
|
Intent i = getIntent();
|
||||||
decisionId = i.getIntExtra(MemorizingTrustManager.DECISION_INTENT_ID, MTMDecision.DECISION_INVALID);
|
decisionId = i.getIntExtra(MemorizingTrustManager.DECISION_INTENT_ID, MTMDecision.DECISION_INVALID);
|
||||||
int titleId = i.getIntExtra(MemorizingTrustManager.DECISION_TITLE_ID, R.string.mtm_accept_cert);
|
int titleId = i.getIntExtra(MemorizingTrustManager.DECISION_TITLE_ID, R.string.mtm_accept_cert);
|
||||||
|
|
|
@ -9,6 +9,7 @@ import android.os.Bundle;
|
||||||
import android.os.FileObserver;
|
import android.os.FileObserver;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
@ -28,6 +29,7 @@ import eu.siacs.conversations.Config;
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.databinding.ActivityRecordingBinding;
|
import eu.siacs.conversations.databinding.ActivityRecordingBinding;
|
||||||
import eu.siacs.conversations.persistance.FileBackend;
|
import eu.siacs.conversations.persistance.FileBackend;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
import eu.siacs.conversations.utils.ThemeHelper;
|
import eu.siacs.conversations.utils.ThemeHelper;
|
||||||
import eu.siacs.conversations.utils.TimeFrameUtils;
|
import eu.siacs.conversations.utils.TimeFrameUtils;
|
||||||
|
|
||||||
|
@ -66,6 +68,12 @@ public class RecordingActivity extends Activity implements View.OnClickListener
|
||||||
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume(){
|
||||||
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
|
|
|
@ -33,6 +33,7 @@ import android.os.Handler;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.os.Vibrator;
|
import android.os.Vibrator;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
|
@ -61,6 +62,7 @@ import eu.siacs.conversations.Config;
|
||||||
import eu.siacs.conversations.R;
|
import eu.siacs.conversations.R;
|
||||||
import eu.siacs.conversations.ui.service.CameraManager;
|
import eu.siacs.conversations.ui.service.CameraManager;
|
||||||
import eu.siacs.conversations.ui.widget.ScannerView;
|
import eu.siacs.conversations.ui.widget.ScannerView;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andreas Schildbach
|
* @author Andreas Schildbach
|
||||||
|
@ -181,6 +183,7 @@ public final class ScanActivity extends Activity implements SurfaceTextureListen
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
maybeOpenCamera();
|
maybeOpenCamera();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@ import eu.siacs.conversations.services.MemorizingTrustManager;
|
||||||
import eu.siacs.conversations.services.QuickConversationsService;
|
import eu.siacs.conversations.services.QuickConversationsService;
|
||||||
import eu.siacs.conversations.ui.util.StyledAttributes;
|
import eu.siacs.conversations.ui.util.StyledAttributes;
|
||||||
import eu.siacs.conversations.utils.GeoHelper;
|
import eu.siacs.conversations.utils.GeoHelper;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
import eu.siacs.conversations.utils.TimeFrameUtils;
|
import eu.siacs.conversations.utils.TimeFrameUtils;
|
||||||
import eu.siacs.conversations.xmpp.Jid;
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
|
|
||||||
|
@ -57,8 +58,10 @@ public class SettingsActivity extends XmppActivity implements
|
||||||
public static final String THEME = "theme";
|
public static final String THEME = "theme";
|
||||||
public static final String SHOW_DYNAMIC_TAGS = "show_dynamic_tags";
|
public static final String SHOW_DYNAMIC_TAGS = "show_dynamic_tags";
|
||||||
public static final String OMEMO_SETTING = "omemo";
|
public static final String OMEMO_SETTING = "omemo";
|
||||||
|
public static final String PREVENT_SCREENSHOTS = "prevent_screenshots";
|
||||||
|
|
||||||
public static final int REQUEST_CREATE_BACKUP = 0xbf8701;
|
public static final int REQUEST_CREATE_BACKUP = 0xbf8701;
|
||||||
|
|
||||||
private SettingsFragment mSettingsFragment;
|
private SettingsFragment mSettingsFragment;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -393,8 +396,15 @@ public class SettingsActivity extends XmppActivity implements
|
||||||
if (this.mTheme != theme) {
|
if (this.mTheme != theme) {
|
||||||
recreate();
|
recreate();
|
||||||
}
|
}
|
||||||
|
} else if(name.equals(PREVENT_SCREENSHOTS)){
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume(){
|
||||||
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -80,6 +80,7 @@ import eu.siacs.conversations.ui.util.PresenceSelector;
|
||||||
import eu.siacs.conversations.ui.util.SoftKeyboardUtils;
|
import eu.siacs.conversations.ui.util.SoftKeyboardUtils;
|
||||||
import eu.siacs.conversations.utils.AccountUtils;
|
import eu.siacs.conversations.utils.AccountUtils;
|
||||||
import eu.siacs.conversations.utils.ExceptionHelper;
|
import eu.siacs.conversations.utils.ExceptionHelper;
|
||||||
|
import eu.siacs.conversations.ui.util.SettingsUtils;
|
||||||
import eu.siacs.conversations.utils.ThemeHelper;
|
import eu.siacs.conversations.utils.ThemeHelper;
|
||||||
import eu.siacs.conversations.xmpp.Jid;
|
import eu.siacs.conversations.xmpp.Jid;
|
||||||
import eu.siacs.conversations.xmpp.OnKeyStatusUpdated;
|
import eu.siacs.conversations.xmpp.OnKeyStatusUpdated;
|
||||||
|
@ -819,8 +820,9 @@ public abstract class XmppActivity extends ActionBarActivity {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
protected void onResume(){
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
SettingsUtils.applyScreenshotPreventionSetting(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected int findTheme() {
|
protected int findTheme() {
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
package eu.siacs.conversations.ui.util;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.view.Window;
|
||||||
|
import android.view.WindowManager;
|
||||||
|
|
||||||
|
public class SettingsUtils {
|
||||||
|
public static void applyScreenshotPreventionSetting(Activity activity){
|
||||||
|
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||||
|
boolean preventScreenshots = preferences.getBoolean("prevent_screenshots", false);
|
||||||
|
Window activityWindow = activity.getWindow();
|
||||||
|
if(preventScreenshots){
|
||||||
|
activityWindow.addFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
||||||
|
} else {
|
||||||
|
activityWindow.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,4 +44,5 @@
|
||||||
<bool name="start_searching">false</bool>
|
<bool name="start_searching">false</bool>
|
||||||
<string name="video_compression">360</string>
|
<string name="video_compression">360</string>
|
||||||
<string name="default_channel_discovery">JABBER_NETWORK</string>
|
<string name="default_channel_discovery">JABBER_NETWORK</string>
|
||||||
|
<bool name="prevent_screenshots">false</bool>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -130,6 +130,8 @@
|
||||||
<string name="pref_never_send_crash_summary">By sending in stack traces you are helping the development</string>
|
<string name="pref_never_send_crash_summary">By sending in stack traces you are helping the development</string>
|
||||||
<string name="pref_confirm_messages">Confirm Messages</string>
|
<string name="pref_confirm_messages">Confirm Messages</string>
|
||||||
<string name="pref_confirm_messages_summary">Let your contacts know when you have received and read their messages</string>
|
<string name="pref_confirm_messages_summary">Let your contacts know when you have received and read their messages</string>
|
||||||
|
<string name="pref_prevent_screenshots">Prevent Screenshots</string>
|
||||||
|
<string name="pref_prevent_screenshots_summary">Prevent taking screenshots of this app and hide its content in the app switcher</string>
|
||||||
<string name="pref_ui_options">UI</string>
|
<string name="pref_ui_options">UI</string>
|
||||||
<string name="openpgp_error">OpenKeychain produced an error.</string>
|
<string name="openpgp_error">OpenKeychain produced an error.</string>
|
||||||
<string name="bad_key_for_encryption">Bad key for encryption.</string>
|
<string name="bad_key_for_encryption">Bad key for encryption.</string>
|
||||||
|
@ -966,4 +968,5 @@
|
||||||
<string name="backup_started_message">The backup has been started. You’ll get a notification once it has been completed.</string>
|
<string name="backup_started_message">The backup has been started. You’ll get a notification once it has been completed.</string>
|
||||||
<string name="unable_to_enable_video">Unable to enable video.</string>
|
<string name="unable_to_enable_video">Unable to enable video.</string>
|
||||||
<string name="plain_text_document">Plain text document</string>
|
<string name="plain_text_document">Plain text document</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -32,6 +32,13 @@
|
||||||
android:key="last_activity"
|
android:key="last_activity"
|
||||||
android:summary="@string/pref_broadcast_last_activity_summary"
|
android:summary="@string/pref_broadcast_last_activity_summary"
|
||||||
android:title="@string/pref_broadcast_last_activity" />
|
android:title="@string/pref_broadcast_last_activity" />
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="@bool/prevent_screenshots"
|
||||||
|
android:key="prevent_screenshots"
|
||||||
|
android:summary="@string/pref_prevent_screenshots_summary"
|
||||||
|
android:title="@string/pref_prevent_screenshots" />
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:defaultValue="@string/omemo_setting_default"
|
android:defaultValue="@string/omemo_setting_default"
|
||||||
android:entries="@array/omemo_setting_entries"
|
android:entries="@array/omemo_setting_entries"
|
||||||
|
|
Loading…
Reference in a new issue