diff --git a/app/src/main/java/com/keepassdroid/LockCloseActivity.java b/app/src/main/java/com/keepassdroid/LockCloseActivity.java
index 9fac89308..3e4098a82 100644
--- a/app/src/main/java/com/keepassdroid/LockCloseActivity.java
+++ b/app/src/main/java/com/keepassdroid/LockCloseActivity.java
@@ -22,26 +22,8 @@ package com.keepassdroid;
import android.content.ActivityNotFoundException;
import android.content.Intent;
-import com.kunzisoft.keepass.KeePass;
-import com.keepassdroid.app.App;
-
public abstract class LockCloseActivity extends LockingActivity {
- @Override
- protected void onResume() {
- super.onResume();
-
- checkShutdown();
- }
-
- private void checkShutdown() {
- if ( App.isShutdown() && App.getDB().Loaded() ) {
- setResult(KeePass.EXIT_LOCK);
- finish();
- }
-
- }
-
/* (non-Javadoc) Workaround for HTC Linkify issues
* @see android.app.Activity#startActivity(android.content.Intent)
*/
diff --git a/app/src/main/java/com/keepassdroid/LockingActivity.java b/app/src/main/java/com/keepassdroid/LockingActivity.java
index e87d9b3df..a004bcecd 100644
--- a/app/src/main/java/com/keepassdroid/LockingActivity.java
+++ b/app/src/main/java/com/keepassdroid/LockingActivity.java
@@ -20,23 +20,76 @@
package com.keepassdroid;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+
+import com.keepassdroid.app.App;
+import com.keepassdroid.settings.PrefsUtil;
import com.keepassdroid.stylish.StylishActivity;
import com.keepassdroid.timeout.TimeoutHelper;
+import com.kunzisoft.keepass.KeePass;
public abstract class LockingActivity extends StylishActivity {
- @Override
- protected void onPause() {
- super.onPause();
-
- TimeoutHelper.pause(this);
- }
+ private ScreenReceiver screenReceiver;
- @Override
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (PrefsUtil.isLockDatabaseWhenScreenShutOffEnable(this)) {
+ screenReceiver = new ScreenReceiver();
+ registerReceiver(screenReceiver, new IntentFilter((Intent.ACTION_SCREEN_OFF)));
+ } else
+ screenReceiver = null;
+ }
+
+ @Override
protected void onResume() {
super.onResume();
+ checkShutdown();
TimeoutHelper.resume(this);
}
+
+ private void checkShutdown() {
+ if ( App.isShutdown() && App.getDB().Loaded() ) {
+ setResult(KeePass.EXIT_LOCK);
+ finish();
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ TimeoutHelper.pause(this);
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if(screenReceiver != null)
+ unregisterReceiver(screenReceiver);
+ }
+
+ public class ScreenReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+
+ if(intent.getAction() != null) {
+ if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
+ if (PrefsUtil.isLockDatabaseWhenScreenShutOffEnable(LockingActivity.this)) {
+ App.setShutdown();
+ checkShutdown();
+ }
+ }
+ }
+ }
+ }
}
diff --git a/app/src/main/java/com/keepassdroid/settings/PrefsUtil.java b/app/src/main/java/com/keepassdroid/settings/PrefsUtil.java
index 58fa32a0a..1cd55ccf8 100644
--- a/app/src/main/java/com/keepassdroid/settings/PrefsUtil.java
+++ b/app/src/main/java/com/keepassdroid/settings/PrefsUtil.java
@@ -55,4 +55,10 @@ public class PrefsUtil {
return prefs.getBoolean(ctx.getString(R.string.clipboard_notifications_key),
ctx.getResources().getBoolean(R.bool.clipboard_notifications_default));
}
+
+ public static boolean isLockDatabaseWhenScreenShutOffEnable(Context ctx) {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
+ return prefs.getBoolean(ctx.getString(R.string.lock_database_screen_off_key),
+ ctx.getResources().getBoolean(R.bool.lock_database_screen_off_default));
+ }
}
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 9b4da6533..a09adbeff 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -208,6 +208,8 @@
Définir les caractères par défaut du générateur de mot de passe
Notifications du presse-papiers
Activer les notifications du presse-papiers pour copier le nom d\'utilisateur et le mot de passe
+ Verrouillage d\'écran
+ Verrouiller la base de données quand l\'écran est éteint
- 30 secondes
diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml
index 26180f6a0..d46cd5b35 100644
--- a/app/src/main/res/values/donottranslate.xml
+++ b/app/src/main/res/values/donottranslate.xml
@@ -53,6 +53,7 @@
storage_access_framework_key
setting_style_key
clipboard_notifications_key
+ lock_database_screen_off_key
true
true
@@ -61,7 +62,8 @@
true
false
true
-
+ true
+
300000
- 30000
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f28c8b79b..ca81b8fcd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -208,6 +208,9 @@
Set the default password generator characters
Clipboard Notifications
Enable clipboard notifications to copy username and password
+ Lock
+ Screen lock
+ Lock the database when the screen is off
- 30 seconds
diff --git a/app/src/main/res/xml/app_preferences.xml b/app/src/main/res/xml/app_preferences.xml
index 4d487798f..757d6fd5a 100644
--- a/app/src/main/res/xml/app_preferences.xml
+++ b/app/src/main/res/xml/app_preferences.xml
@@ -23,6 +23,26 @@
+
+
+
+
+
+
+
-
-
-
+ android:key="@string/lock_database_screen_off_key"
+ android:title="@string/lock_database_screen_off_title"
+ android:summary="@string/lock_database_screen_off_summary"
+ android:defaultValue="@bool/lock_database_screen_off_default"/>