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"/>