From 18fd88a441f1fcd92567fddc1a386f0e45a43b90 Mon Sep 17 00:00:00 2001 From: Alexander Bakker Date: Sun, 7 Apr 2019 18:18:50 +0200 Subject: [PATCH] Add an option to automatically lock the app This adds an option to automatically lock the app when: * The back button is pressed * The device is locked It's the first step towards implementing #7 --- .../aegis/AegisApplication.java | 23 +++++++++++++++++++ .../beemdevelopment/aegis/Preferences.java | 4 ++++ .../aegis/ui/MainActivity.java | 11 ++++++++- app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 7 +++++- 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/beemdevelopment/aegis/AegisApplication.java b/app/src/main/java/com/beemdevelopment/aegis/AegisApplication.java index 7d316626..4213f836 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/AegisApplication.java +++ b/app/src/main/java/com/beemdevelopment/aegis/AegisApplication.java @@ -1,7 +1,10 @@ package com.beemdevelopment.aegis; import android.app.Application; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.drawable.Icon; @@ -24,6 +27,10 @@ public class AegisApplication extends Application { _manager = new DatabaseManager(this); _prefs = new Preferences(this); + // listen for SCREEN_OFF events + ScreenOffReceiver receiver = new ScreenOffReceiver(); + registerReceiver(receiver, new IntentFilter(Intent.ACTION_SCREEN_OFF)); + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { initAppShortcuts(); } @@ -57,4 +64,20 @@ public class AegisApplication extends Application { shortcutManager.setDynamicShortcuts(Collections.singletonList(shortcut)); } + + public boolean isAutoLockEnabled() { + return _prefs.isAutoLockEnabled() && _manager.isEncryptionEnabled() && !_manager.isLocked(); + } + + private class ScreenOffReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + if (isAutoLockEnabled()) { + _manager.lock(); + Intent newIntent = new Intent(getApplicationContext(), MainActivity.class); + newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + startActivity(newIntent); + } + } + } } diff --git a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java index 0fdbb107..29f2cabd 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/Preferences.java +++ b/app/src/main/java/com/beemdevelopment/aegis/Preferences.java @@ -27,6 +27,10 @@ public class Preferences { return _prefs.getBoolean("pref_intro", false); } + public boolean isAutoLockEnabled() { + return _prefs.getBoolean("pref_auto_lock", true); + } + public void setIntroDone(boolean done) { _prefs.edit().putBoolean("pref_intro", done).apply(); } diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java index 8599712c..d81be4b1 100644 --- a/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java +++ b/app/src/main/java/com/beemdevelopment/aegis/ui/MainActivity.java @@ -363,6 +363,15 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene updateLockIcon(); } + @Override + public void onBackPressed() { + if (_app.isAutoLockEnabled()) { + lockDatabase(); + } + + super.onBackPressed(); + } + private BottomSheetDialog createBottomSheet(final DatabaseEntry entry) { BottomSheetDialog dialog = new BottomSheetDialog(this); dialog.setContentView(R.layout.bottom_sheet_edit_entry); @@ -428,6 +437,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene return true; case R.id.action_lock: lockDatabase(); + startAuthActivity(); return true; default: if (item.getGroupId() == R.id.action_filter_group) { @@ -475,7 +485,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene _entryListView.clearEntries(); _db.lock(); _loaded = false; - startAuthActivity(); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bed03f22..8f0197e0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,6 +30,8 @@ Tap to reveal Tokens will be hidden by default. Tap on the tokens to reveal code. Timeout for tap to reveal + Auto lock + Automatically lock when you close the app or lock your device. Encryption Encrypt the database and unlock it with a password or fingerprint Fingerprint diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d42bdf78..d1bde072 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -42,13 +42,18 @@ android:title="@string/pref_secure_screen_title" android:summary="@string/pref_secure_screen_summary" app:iconSpaceReserved="false"/> + -