Merge pull request #564 from alexbakker/improve-auto-lock

Improve auto lock and make it more customizable
This commit is contained in:
Michael Schättgen 2020-08-26 16:51:40 +02:00 committed by GitHub
commit 52d2713482
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 146 additions and 88 deletions

View file

@ -115,6 +115,7 @@ dependencies {
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.documentfile:documentfile:1.0.1' implementation 'androidx.documentfile:documentfile:1.0.1'
implementation "androidx.lifecycle:lifecycle-process:2.2.0"
implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.recyclerview:recyclerview:1.1.0' implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation "androidx.viewpager2:viewpager2:1.0.0" implementation "androidx.viewpager2:viewpager2:1.0.0"

View file

@ -12,7 +12,12 @@ import android.content.pm.ShortcutManager;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
import android.os.Build; import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleEventObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.ProcessLifecycleOwner;
import com.beemdevelopment.aegis.services.NotificationService; import com.beemdevelopment.aegis.services.NotificationService;
import com.beemdevelopment.aegis.ui.MainActivity; import com.beemdevelopment.aegis.ui.MainActivity;
@ -53,6 +58,9 @@ public class AegisApplication extends Application {
intentFilter.addAction(CODE_LOCK_VAULT_ACTION); intentFilter.addAction(CODE_LOCK_VAULT_ACTION);
registerReceiver(receiver, intentFilter); registerReceiver(receiver, intentFilter);
// lock the app if the user moves the application to the background
ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleObserver());
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) {
initAppShortcuts(); initAppShortcuts();
} }
@ -111,8 +119,8 @@ public class AegisApplication extends Application {
return _prefs; return _prefs;
} }
public boolean isAutoLockEnabled() { public boolean isAutoLockEnabled(int autoLockType) {
return _prefs.isAutoLockEnabled() && !isVaultLocked() && _manager.isEncryptionEnabled() ; return _prefs.isAutoLockTypeEnabled(autoLockType) && !isVaultLocked() && _manager.isEncryptionEnabled();
} }
public void registerLockListener(LockListener listener) { public void registerLockListener(LockListener listener) {
@ -123,10 +131,14 @@ public class AegisApplication extends Application {
_lockListeners.remove(listener); _lockListeners.remove(listener);
} }
public void lock() { /**
* Locks the vault and the app.
* @param userInitiated whether or not the user initiated the lock in MainActivity.
*/
public void lock(boolean userInitiated) {
_manager = null; _manager = null;
for (LockListener listener : _lockListeners) { for (LockListener listener : _lockListeners) {
listener.onLocked(); listener.onLocked(userInitiated);
} }
stopService(new Intent(AegisApplication.this, NotificationService.class)); stopService(new Intent(AegisApplication.this, NotificationService.class));
@ -168,16 +180,29 @@ public class AegisApplication extends Application {
} }
} }
public class ScreenOffReceiver extends BroadcastReceiver { private class AppLifecycleObserver implements LifecycleEventObserver {
@Override
public void onStateChanged(@NonNull LifecycleOwner source, @NonNull Lifecycle.Event event) {
if (event == Lifecycle.Event.ON_STOP && isAutoLockEnabled(Preferences.AUTO_LOCK_ON_MINIMIZE)) {
lock(false);
}
}
}
private class ScreenOffReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (isAutoLockEnabled()) { if (isAutoLockEnabled(Preferences.AUTO_LOCK_ON_DEVICE_LOCK)) {
lock(); lock(false);
} }
} }
} }
public interface LockListener { public interface LockListener {
void onLocked(); /**
* When called, the app/vault has been locked and the listener should perform its cleanup operations.
* @param userInitiated whether or not the user initiated the lock in MainActivity.
*/
void onLocked(boolean userInitiated);
} }
} }

View file

@ -1,7 +0,0 @@
package com.beemdevelopment.aegis;
public enum CancelAction {
KILL,
CLOSE
}

View file

@ -12,6 +12,17 @@ import java.util.Locale;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class Preferences { public class Preferences {
public static final int AUTO_LOCK_OFF = 1 << 0;
public static final int AUTO_LOCK_ON_BACK_BUTTON = 1 << 1;
public static final int AUTO_LOCK_ON_MINIMIZE = 1 << 2;
public static final int AUTO_LOCK_ON_DEVICE_LOCK = 1 << 3;
public static final int[] AUTO_LOCK_SETTINGS = {
AUTO_LOCK_ON_BACK_BUTTON,
AUTO_LOCK_ON_MINIMIZE,
AUTO_LOCK_ON_DEVICE_LOCK
};
private SharedPreferences _prefs; private SharedPreferences _prefs;
public Preferences(Context context) { public Preferences(Context context) {
@ -73,8 +84,25 @@ public class Preferences {
return _prefs.getBoolean("pref_intro", false); return _prefs.getBoolean("pref_intro", false);
} }
private int getAutoLockMask() {
final int def = AUTO_LOCK_ON_BACK_BUTTON | AUTO_LOCK_ON_DEVICE_LOCK;
if (!_prefs.contains("pref_auto_lock_mask")) {
return _prefs.getBoolean("pref_auto_lock", true) ? def : AUTO_LOCK_OFF;
}
return _prefs.getInt("pref_auto_lock_mask", def);
}
public boolean isAutoLockEnabled() { public boolean isAutoLockEnabled() {
return _prefs.getBoolean("pref_auto_lock", true); return getAutoLockMask() != AUTO_LOCK_OFF;
}
public boolean isAutoLockTypeEnabled(int autoLockType) {
return (getAutoLockMask() & autoLockType) == autoLockType;
}
public void setAutoLockMask(int autoLock) {
_prefs.edit().putInt("pref_auto_lock_mask", autoLock).apply();
} }
public void setIntroDone(boolean done) { public void setIntroDone(boolean done) {

View file

@ -6,7 +6,6 @@ import android.os.Bundle;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.CallSuper;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import com.beemdevelopment.aegis.AegisApplication; import com.beemdevelopment.aegis.AegisApplication;
@ -20,9 +19,7 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
public abstract class AegisActivity extends AppCompatActivity implements AegisApplication.LockListener { public abstract class AegisActivity extends AppCompatActivity implements AegisApplication.LockListener {
private boolean _resumed;
private AegisApplication _app; private AegisApplication _app;
private Theme _configuredTheme;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -39,6 +36,7 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
Intent intent = new Intent(this, MainActivity.class); Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent); startActivity(intent);
finish();
return; return;
} }
@ -58,24 +56,9 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
} }
@Override @Override
protected void onResume() { public void onLocked(boolean userInitiated) {
super.onResume();
_resumed = true;
}
@Override
protected void onPause() {
super.onPause();
_resumed = false;
}
@CallSuper
@Override
public void onLocked() {
if (isOrphan()) {
setResult(RESULT_CANCELED, null); setResult(RESULT_CANCELED, null);
finish(); finishAndRemoveTask();
}
} }
protected AegisApplication getApp() { protected AegisApplication getApp() {
@ -139,13 +122,6 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
} }
} }
/**
* Reports whether this Activity has been resumed. (i.e. onResume was called)
*/
protected boolean isOpen() {
return _resumed;
}
/** /**
* Reports whether this Activity instance has become an orphan. This can happen if * Reports whether this Activity instance has become an orphan. This can happen if
* the vault was locked by an external trigger while the Activity was still open. * the vault was locked by an external trigger while the Activity was still open.

View file

@ -23,7 +23,6 @@ import androidx.appcompat.app.AlertDialog;
import androidx.biometric.BiometricPrompt; import androidx.biometric.BiometricPrompt;
import com.beemdevelopment.aegis.AegisApplication; import com.beemdevelopment.aegis.AegisApplication;
import com.beemdevelopment.aegis.CancelAction;
import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.ThemeMap; import com.beemdevelopment.aegis.ThemeMap;
@ -52,9 +51,7 @@ import javax.crypto.SecretKey;
public class AuthActivity extends AegisActivity { public class AuthActivity extends AegisActivity {
private EditText _textPassword; private EditText _textPassword;
private CancelAction _cancelAction;
private SlotList _slots; private SlotList _slots;
private SecretKey _bioKey; private SecretKey _bioKey;
private BiometricSlot _bioSlot; private BiometricSlot _bioSlot;
private BiometricPrompt _bioPrompt; private BiometricPrompt _bioPrompt;
@ -62,7 +59,7 @@ public class AuthActivity extends AegisActivity {
private int _failedUnlockAttempts; private int _failedUnlockAttempts;
// the first time this activity is resumed after creation, it's possible to inhibit showing the // the first time this activity is resumed after creation, it's possible to inhibit showing the
// biometric prompt by setting 'inhibitBioPrompt' to false through the intent // biometric prompt by setting 'inhibitBioPrompt' to true through the intent
private boolean _inhibitBioPrompt; private boolean _inhibitBioPrompt;
private Preferences _prefs; private Preferences _prefs;
@ -95,7 +92,6 @@ public class AuthActivity extends AegisActivity {
} else { } else {
_inhibitBioPrompt = savedInstanceState.getBoolean("inhibitBioPrompt", false); _inhibitBioPrompt = savedInstanceState.getBoolean("inhibitBioPrompt", false);
} }
_cancelAction = (CancelAction) intent.getSerializableExtra("cancelAction");
_slots = (SlotList) intent.getSerializableExtra("slots"); _slots = (SlotList) intent.getSerializableExtra("slots");
_stateless = _slots != null; _stateless = _slots != null;
if (!_stateless) { if (!_stateless) {
@ -183,11 +179,10 @@ public class AuthActivity extends AegisActivity {
@Override @Override
public void onBackPressed() { public void onBackPressed() {
switch (_cancelAction) { if (_stateless) {
case KILL: super.onBackPressed();
} else {
finishAffinity(); finishAffinity();
case CLOSE:
finish();
} }
} }

View file

@ -25,7 +25,7 @@ import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.SearchView;
import com.beemdevelopment.aegis.AegisApplication; import com.beemdevelopment.aegis.AegisApplication;
import com.beemdevelopment.aegis.CancelAction; import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.SortCategory; import com.beemdevelopment.aegis.SortCategory;
import com.beemdevelopment.aegis.ViewMode; import com.beemdevelopment.aegis.ViewMode;
@ -523,8 +523,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
return; return;
} }
if (_app.isAutoLockEnabled()) { if (_app.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_BACK_BUTTON)) {
_app.lock(); _app.lock(false);
return; return;
} }
@ -596,7 +596,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
return true; return true;
} }
case R.id.action_lock: case R.id.action_lock:
_app.lock(); _app.lock(true);
return true; return true;
default: default:
if (item.getGroupId() == R.id.action_filter_group) { if (item.getGroupId() == R.id.action_filter_group) {
@ -655,7 +655,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
private void startAuthActivity(boolean inhibitBioPrompt) { private void startAuthActivity(boolean inhibitBioPrompt) {
if (!_isAuthenticating) { if (!_isAuthenticating) {
Intent intent = new Intent(this, AuthActivity.class); Intent intent = new Intent(this, AuthActivity.class);
intent.putExtra("cancelAction", CancelAction.KILL);
intent.putExtra("inhibitBioPrompt", inhibitBioPrompt); intent.putExtra("inhibitBioPrompt", inhibitBioPrompt);
startActivityForResult(intent, CODE_DECRYPT); startActivityForResult(intent, CODE_DECRYPT);
_isAuthenticating = true; _isAuthenticating = true;
@ -747,7 +746,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
public void onListChange() { _fabScrollHelper.setVisible(true); } public void onListChange() { _fabScrollHelper.setVisible(true); }
@Override @Override
public void onLocked() { public void onLocked(boolean userInitiated) {
if (_actionMode != null) { if (_actionMode != null) {
_actionMode.finish(); _actionMode.finish();
} }
@ -755,11 +754,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
_entryListView.clearEntries(); _entryListView.clearEntries();
_loaded = false; _loaded = false;
if (isOpen()) { if (userInitiated) {
startAuthActivity(true); startAuthActivity(true);
} else {
super.onLocked(userInitiated);
} }
super.onLocked();
} }
private void copyEntryCode(VaultEntry entry) { private void copyEntryCode(VaultEntry entry) {

View file

@ -20,7 +20,6 @@ import androidx.preference.SwitchPreferenceCompat;
import com.beemdevelopment.aegis.AegisApplication; import com.beemdevelopment.aegis.AegisApplication;
import com.beemdevelopment.aegis.BuildConfig; import com.beemdevelopment.aegis.BuildConfig;
import com.beemdevelopment.aegis.CancelAction;
import com.beemdevelopment.aegis.Preferences; import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R; import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.Theme; import com.beemdevelopment.aegis.Theme;
@ -461,6 +460,35 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
}); });
_autoLockPreference = findPreference("pref_auto_lock"); _autoLockPreference = findPreference("pref_auto_lock");
_autoLockPreference.setSummary(getAutoLockSummary());
_autoLockPreference.setOnPreferenceClickListener((preference) -> {
final int[] items = Preferences.AUTO_LOCK_SETTINGS;
final String[] textItems = getResources().getStringArray(R.array.pref_auto_lock_types);
final boolean[] checkedItems = new boolean[items.length];
for (int i = 0; i < items.length; i++) {
checkedItems[i] = _prefs.isAutoLockTypeEnabled(items[i]);
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setTitle(R.string.pref_auto_lock_prompt)
.setMultiChoiceItems(textItems, checkedItems, (dialog, index, isChecked) -> checkedItems[index] = isChecked)
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
int autoLock = Preferences.AUTO_LOCK_OFF;
for (int i = 0; i < checkedItems.length; i++) {
if (checkedItems[i]) {
autoLock |= items[i];
}
}
_prefs.setAutoLockMask(autoLock);
_autoLockPreference.setSummary(getAutoLockSummary());
})
.setNegativeButton(android.R.string.cancel, null);
Dialogs.showSecureDialog(builder.create());
return false;
});
_passwordReminderPreference = findPreference("pref_password_reminder"); _passwordReminderPreference = findPreference("pref_password_reminder");
} }
@ -578,7 +606,6 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
Intent intent = new Intent(getActivity(), AuthActivity.class); Intent intent = new Intent(getActivity(), AuthActivity.class);
intent.putExtra("slots", ((AegisImporter.EncryptedState) state).getSlots()); intent.putExtra("slots", ((AegisImporter.EncryptedState) state).getSlots());
intent.putExtra("cancelAction", CancelAction.CLOSE);
startActivityForResult(intent, CODE_IMPORT_DECRYPT); startActivityForResult(intent, CODE_IMPORT_DECRYPT);
} else { } else {
state.decrypt(getActivity(), new DatabaseImporter.DecryptListener() { state.decrypt(getActivity(), new DatabaseImporter.DecryptListener() {
@ -851,6 +878,28 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
_pinKeyboardPreference.setChecked(enable); _pinKeyboardPreference.setChecked(enable);
} }
private String getAutoLockSummary() {
final int[] settings = Preferences.AUTO_LOCK_SETTINGS;
final String[] descriptions = getResources().getStringArray(R.array.pref_auto_lock_types);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < settings.length; i++) {
if (_prefs.isAutoLockTypeEnabled(settings[i])) {
if (builder.length() != 0) {
builder.append(", ");
}
builder.append(descriptions[i].toLowerCase());
}
}
if (builder.length() == 0) {
return getString(R.string.pref_auto_lock_summary_disabled);
}
return getString(R.string.pref_auto_lock_summary, builder.toString());
}
private class SetPasswordListener implements Dialogs.SlotListener { private class SetPasswordListener implements Dialogs.SlotListener {
@Override @Override
public void onSlotResult(Slot slot, Cipher cipher) { public void onSlotResult(Slot slot, Cipher cipher) {

View file

@ -48,7 +48,6 @@
<string name="pref_tap_to_reveal_summary">سيتم اخفاء الرموز افتراضيًا. انقر على الرموز لكشف الكود.</string> <string name="pref_tap_to_reveal_summary">سيتم اخفاء الرموز افتراضيًا. انقر على الرموز لكشف الكود.</string>
<string name="pref_tap_to_reveal_time_title">مهلة النقر للكشف</string> <string name="pref_tap_to_reveal_time_title">مهلة النقر للكشف</string>
<string name="pref_auto_lock_title">القفل التلقائي</string> <string name="pref_auto_lock_title">القفل التلقائي</string>
<string name="pref_auto_lock_summary">القفل التلقائي عند إغلاق التطبيق أو قفل الجهاز</string>
<string name="pref_encryption_title">التشفير</string> <string name="pref_encryption_title">التشفير</string>
<string name="pref_encryption_summary">قم بتشفير المخزن وفك قفله بكملة مرور أو مصادقة بيومترية</string> <string name="pref_encryption_summary">قم بتشفير المخزن وفك قفله بكملة مرور أو مصادقة بيومترية</string>
<string name="pref_biometrics_title">فتح القفل البيومتري</string> <string name="pref_biometrics_title">فتح القفل البيومتري</string>

View file

@ -49,7 +49,6 @@
<string name="pref_tap_to_reveal_summary">Ve výchozím stavu budou kódy skryté. Kód zobrazíte klepnutím na token.</string> <string name="pref_tap_to_reveal_summary">Ve výchozím stavu budou kódy skryté. Kód zobrazíte klepnutím na token.</string>
<string name="pref_tap_to_reveal_time_title">Prodleva zobrazení kódu</string> <string name="pref_tap_to_reveal_time_title">Prodleva zobrazení kódu</string>
<string name="pref_auto_lock_title">Automatické uzamknutí</string> <string name="pref_auto_lock_title">Automatické uzamknutí</string>
<string name="pref_auto_lock_summary">Automaticky uzamknout trezor při zavření aplikace, nebo uzamčení zařízení.</string>
<string name="pref_encryption_title">Šifrování</string> <string name="pref_encryption_title">Šifrování</string>
<string name="pref_encryption_summary">Šifrovat trezor a odemykat jej pomocí hesla, nebo biometrie</string> <string name="pref_encryption_summary">Šifrovat trezor a odemykat jej pomocí hesla, nebo biometrie</string>
<string name="pref_biometrics_title">Biometrické odemknutí</string> <string name="pref_biometrics_title">Biometrické odemknutí</string>

View file

@ -41,7 +41,6 @@
<string name="pref_tap_to_reveal_summary">Schlüssel werden standardmäßig ausgeblendet. Tippe auf die Schlüssel, um den Code anzuzeigen.</string> <string name="pref_tap_to_reveal_summary">Schlüssel werden standardmäßig ausgeblendet. Tippe auf die Schlüssel, um den Code anzuzeigen.</string>
<string name="pref_tap_to_reveal_time_title">Zeitüberschreitung für Tippen zum Anzeigen</string> <string name="pref_tap_to_reveal_time_title">Zeitüberschreitung für Tippen zum Anzeigen</string>
<string name="pref_auto_lock_title">Automatische Sperre</string> <string name="pref_auto_lock_title">Automatische Sperre</string>
<string name="pref_auto_lock_summary">Automatische Sperre, wenn die App geschlossen oder dein Gerät gesperrt wird.</string>
<string name="pref_encryption_title">Verschlüsselung</string> <string name="pref_encryption_title">Verschlüsselung</string>
<string name="pref_biometrics_title">Biometische Entsperrung</string> <string name="pref_biometrics_title">Biometische Entsperrung</string>
<string name="pref_biometrics_summary">Erlauben, die Datenbank mit biometrischer Authentifizierung zu entsperren</string> <string name="pref_biometrics_summary">Erlauben, die Datenbank mit biometrischer Authentifizierung zu entsperren</string>

View file

@ -36,7 +36,6 @@
<string name="pref_tap_to_reveal_summary">Απόκρυψη αναγνωριστικών από προεπιλογή. Πατήστε στα αναγνωριστικά για προβολή κωδικού.</string> <string name="pref_tap_to_reveal_summary">Απόκρυψη αναγνωριστικών από προεπιλογή. Πατήστε στα αναγνωριστικά για προβολή κωδικού.</string>
<string name="pref_tap_to_reveal_time_title">Χρονικό όριο πατήματος προβολής</string> <string name="pref_tap_to_reveal_time_title">Χρονικό όριο πατήματος προβολής</string>
<string name="pref_auto_lock_title">Αυτόματο κλείδωμα</string> <string name="pref_auto_lock_title">Αυτόματο κλείδωμα</string>
<string name="pref_auto_lock_summary">Αυτόματο κλείδωμα στο κλείσιμο της εφαρμογής ή στο κλείδωμα της συσκευή σας.</string>
<string name="pref_encryption_title">Κρυπτογράφηση</string> <string name="pref_encryption_title">Κρυπτογράφηση</string>
<string name="pref_encryption_summary">Κρυπτογράφηση λίστας και ξεκλείδωμα με κωδικό ή βιομετρική μέθοδο</string> <string name="pref_encryption_summary">Κρυπτογράφηση λίστας και ξεκλείδωμα με κωδικό ή βιομετρική μέθοδο</string>
<string name="pref_biometrics_title">Βιομετρικό ξεκλείδωμα</string> <string name="pref_biometrics_title">Βιομετρικό ξεκλείδωμα</string>

View file

@ -46,7 +46,6 @@
<string name="pref_tap_to_reveal_summary">Los tokens se ocultarán por defecto. Pulse sobre ellos para revelar el código.</string> <string name="pref_tap_to_reveal_summary">Los tokens se ocultarán por defecto. Pulse sobre ellos para revelar el código.</string>
<string name="pref_tap_to_reveal_time_title">Tiempo de espera de pulsar para mostrar</string> <string name="pref_tap_to_reveal_time_title">Tiempo de espera de pulsar para mostrar</string>
<string name="pref_auto_lock_title">Bloqueo automático</string> <string name="pref_auto_lock_title">Bloqueo automático</string>
<string name="pref_auto_lock_summary">Bloquear automáticamente cuando cierre la aplicación o bloquee su dispositivo.</string>
<string name="pref_encryption_title">Cifrado</string> <string name="pref_encryption_title">Cifrado</string>
<string name="pref_encryption_summary">Cifra la base de datos y la desbloquea mediante una contraseña o biometría</string> <string name="pref_encryption_summary">Cifra la base de datos y la desbloquea mediante una contraseña o biometría</string>
<string name="pref_biometrics_title">Desbloqueo biométrico</string> <string name="pref_biometrics_title">Desbloqueo biométrico</string>

View file

@ -45,7 +45,6 @@
<string name="pref_tap_to_reveal_summary">Todennustunnukset piilotetaan oletuksena. Napauta todennustunnusta paljastaaksesi sen koodi.</string> <string name="pref_tap_to_reveal_summary">Todennustunnukset piilotetaan oletuksena. Napauta todennustunnusta paljastaaksesi sen koodi.</string>
<string name="pref_tap_to_reveal_time_title">Kuinka kauan todennustunnus on näkyvissä napautuksen jälkeen</string> <string name="pref_tap_to_reveal_time_title">Kuinka kauan todennustunnus on näkyvissä napautuksen jälkeen</string>
<string name="pref_auto_lock_title">Lukitse automaattisesti</string> <string name="pref_auto_lock_title">Lukitse automaattisesti</string>
<string name="pref_auto_lock_summary">Lukitsee sovelluksen automaattisesti, kun suljet sen tai lukitset laitteesi.</string>
<string name="pref_encryption_title">Salaus</string> <string name="pref_encryption_title">Salaus</string>
<string name="pref_encryption_summary">Salaa holvi ja avaa se salasanalla tai biometriikalla</string> <string name="pref_encryption_summary">Salaa holvi ja avaa se salasanalla tai biometriikalla</string>
<string name="pref_biometrics_title">Biometrinen avaaminen</string> <string name="pref_biometrics_title">Biometrinen avaaminen</string>

View file

@ -45,7 +45,6 @@
<string name="pref_tap_to_reveal_summary">Les jetons seront masqués par défaut. Appuyer sur le jeton pour révéler le code.</string> <string name="pref_tap_to_reveal_summary">Les jetons seront masqués par défaut. Appuyer sur le jeton pour révéler le code.</string>
<string name="pref_tap_to_reveal_time_title">Délai pour appuyer pour révéler</string> <string name="pref_tap_to_reveal_time_title">Délai pour appuyer pour révéler</string>
<string name="pref_auto_lock_title">Verrouillage automatique</string> <string name="pref_auto_lock_title">Verrouillage automatique</string>
<string name="pref_auto_lock_summary">Verrouiller automatiquement lorsque vous fermez l\'application ou verrouillez votre appareil.</string>
<string name="pref_encryption_title">Chiffrement</string> <string name="pref_encryption_title">Chiffrement</string>
<string name="pref_encryption_summary">Chiffrer le coffre-fort et le déverrouiller avec un mot de passe ou la biométrie</string> <string name="pref_encryption_summary">Chiffrer le coffre-fort et le déverrouiller avec un mot de passe ou la biométrie</string>
<string name="pref_biometrics_title">Déverrouillage biométrique</string> <string name="pref_biometrics_title">Déverrouillage biométrique</string>

View file

@ -46,7 +46,6 @@
<string name="pref_tap_to_reveal_summary">A tokenek alapból rejtve lesznek. Koppintson a tokenekre, hogy megjelenjen a kód.</string> <string name="pref_tap_to_reveal_summary">A tokenek alapból rejtve lesznek. Koppintson a tokenekre, hogy megjelenjen a kód.</string>
<string name="pref_tap_to_reveal_time_title">Értintésre történő megjelenítés időtúllépése</string> <string name="pref_tap_to_reveal_time_title">Értintésre történő megjelenítés időtúllépése</string>
<string name="pref_auto_lock_title">Automatikus zárolás</string> <string name="pref_auto_lock_title">Automatikus zárolás</string>
<string name="pref_auto_lock_summary">Automatikus zárolás, ha bezárja az alkalmazást vagy zárolja a képernyőt.</string>
<string name="pref_encryption_title">Titkosítás</string> <string name="pref_encryption_title">Titkosítás</string>
<string name="pref_encryption_summary">A széf titkosítása, és jelszavas vagy biometrikus feloldás beállítása</string> <string name="pref_encryption_summary">A széf titkosítása, és jelszavas vagy biometrikus feloldás beállítása</string>
<string name="pref_biometrics_title">Biometrikus feloldás</string> <string name="pref_biometrics_title">Biometrikus feloldás</string>

View file

@ -53,7 +53,6 @@
<string name="pref_tap_to_reveal_summary">I token saranno nascosti. Toccandone uno viene mostrato il codice.</string> <string name="pref_tap_to_reveal_summary">I token saranno nascosti. Toccandone uno viene mostrato il codice.</string>
<string name="pref_tap_to_reveal_time_title">Timeout visualizzazione codice OTP</string> <string name="pref_tap_to_reveal_time_title">Timeout visualizzazione codice OTP</string>
<string name="pref_auto_lock_title">Blocco automatico</string> <string name="pref_auto_lock_title">Blocco automatico</string>
<string name="pref_auto_lock_summary">Blocca automaticamente quando chiudi l\'app o blocca il dispositivo.</string>
<string name="pref_encryption_title">Crittografia</string> <string name="pref_encryption_title">Crittografia</string>
<string name="pref_encryption_summary">Cripta il database e sbloccalo con password o impronta digitale</string> <string name="pref_encryption_summary">Cripta il database e sbloccalo con password o impronta digitale</string>
<string name="pref_biometrics_title">Sblocco biometrico</string> <string name="pref_biometrics_title">Sblocco biometrico</string>

View file

@ -29,7 +29,6 @@
<string name="pref_tap_to_reveal_summary">ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಟೋಕನ್ಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ. ಸಂಕೇತವನ್ನು ಬಹಿರಂಗಪಡಿಸುವುದಕ್ಕೆ ಟೋಕನ್ಗಳನ್ನು ಒತ್ತು.</string> <string name="pref_tap_to_reveal_summary">ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಟೋಕನ್ಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ. ಸಂಕೇತವನ್ನು ಬಹಿರಂಗಪಡಿಸುವುದಕ್ಕೆ ಟೋಕನ್ಗಳನ್ನು ಒತ್ತು.</string>
<string name="pref_tap_to_reveal_time_title">\'ನೋಡುವುದಕ್ಕೆ ಟ್ಯಾಪ್ ಮಾಡಿ\'ಗೆ ಸಮಯದ ಅವಧಿ</string> <string name="pref_tap_to_reveal_time_title">\'ನೋಡುವುದಕ್ಕೆ ಟ್ಯಾಪ್ ಮಾಡಿ\'ಗೆ ಸಮಯದ ಅವಧಿ</string>
<string name="pref_auto_lock_title">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬೀಗ ಹಾಕು</string> <string name="pref_auto_lock_title">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬೀಗ ಹಾಕು</string>
<string name="pref_auto_lock_summary">ನೀವು ಅಪ್ಲಿಕೇಶನವನ್ನು ಮುಚ್ಚಿದಾಗ ಅಥವ ಡಿವೈಸಿಗೆ ಬೀಗ ಹಾಕಿದಾಗ, ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಬೀಗ ಹಾಕು.</string>
<string name="pref_encryption_title">ಗೂಢಲಿಪೀಕರಣ</string> <string name="pref_encryption_title">ಗೂಢಲಿಪೀಕರಣ</string>
<string name="pref_set_password_title">ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸು</string> <string name="pref_set_password_title">ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸು</string>
<string name="pref_set_password_summary">ವೌಲ್ಟ್ ಅನ್ನು ತೆರೆಯಲು ಹೊಸಾ ಗುಪ್ತಪದವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string> <string name="pref_set_password_summary">ವೌಲ್ಟ್ ಅನ್ನು ತೆರೆಯಲು ಹೊಸಾ ಗುಪ್ತಪದವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>

View file

@ -45,7 +45,6 @@
<string name="pref_tap_to_reveal_summary">Codes zullen standaard worden verborgen. Tik een uitgever aan om de code te onthullen.</string> <string name="pref_tap_to_reveal_summary">Codes zullen standaard worden verborgen. Tik een uitgever aan om de code te onthullen.</string>
<string name="pref_tap_to_reveal_time_title">Time-out voor aantikken om te onthullen</string> <string name="pref_tap_to_reveal_time_title">Time-out voor aantikken om te onthullen</string>
<string name="pref_auto_lock_title">Automatisch vergrendelen</string> <string name="pref_auto_lock_title">Automatisch vergrendelen</string>
<string name="pref_auto_lock_summary">Kluis automatisch vergrendelen wanneer je de app sluit of je toestel vergrendelt.</string>
<string name="pref_encryption_title">Encryptie</string> <string name="pref_encryption_title">Encryptie</string>
<string name="pref_encryption_summary">Encrypt de kluis en ontgrendel deze met een wachtwoord of biometrie</string> <string name="pref_encryption_summary">Encrypt de kluis en ontgrendel deze met een wachtwoord of biometrie</string>
<string name="pref_biometrics_title">Ontgrendelen met biometrie</string> <string name="pref_biometrics_title">Ontgrendelen met biometrie</string>

View file

@ -55,7 +55,6 @@
<string name="pref_tap_to_reveal_summary">Tokeny zostaną domyślnie ukryte. Kliknij na token, aby pokazać kod.</string> <string name="pref_tap_to_reveal_summary">Tokeny zostaną domyślnie ukryte. Kliknij na token, aby pokazać kod.</string>
<string name="pref_tap_to_reveal_time_title">Limit czasu dla odkrycia</string> <string name="pref_tap_to_reveal_time_title">Limit czasu dla odkrycia</string>
<string name="pref_auto_lock_title">Automatyczna blokada</string> <string name="pref_auto_lock_title">Automatyczna blokada</string>
<string name="pref_auto_lock_summary">Automatycznie zablokuj aplikację po jej zamknięciu lub zablokowaniu urządzenia.</string>
<string name="pref_encryption_title">Szyfrowanie</string> <string name="pref_encryption_title">Szyfrowanie</string>
<string name="pref_encryption_summary">Zaszyfruj sejf i odblokuj go za pomocą hasła lub autoryzacji biometrycznej</string> <string name="pref_encryption_summary">Zaszyfruj sejf i odblokuj go za pomocą hasła lub autoryzacji biometrycznej</string>
<string name="pref_biometrics_title">Autoryzacja biometryczna</string> <string name="pref_biometrics_title">Autoryzacja biometryczna</string>

View file

@ -47,7 +47,6 @@
<string name="pref_tap_to_reveal_summary">Tokens ficarão ocultos por padrão. Toque nos tokens para revelar o código.</string> <string name="pref_tap_to_reveal_summary">Tokens ficarão ocultos por padrão. Toque nos tokens para revelar o código.</string>
<string name="pref_tap_to_reveal_time_title">Tempo de espera para tocar para revelar</string> <string name="pref_tap_to_reveal_time_title">Tempo de espera para tocar para revelar</string>
<string name="pref_auto_lock_title">Bloqueio Automático</string> <string name="pref_auto_lock_title">Bloqueio Automático</string>
<string name="pref_auto_lock_summary">Bloqueia automaticamente quando você fecha o app ou bloqueia seu dispositivo.</string>
<string name="pref_encryption_title">Criptografia</string> <string name="pref_encryption_title">Criptografia</string>
<string name="pref_encryption_summary">Encripta o cofre e o desbloqueia com uma senha ou biometria</string> <string name="pref_encryption_summary">Encripta o cofre e o desbloqueia com uma senha ou biometria</string>
<string name="pref_biometrics_title">Desbloqueio biométrico</string> <string name="pref_biometrics_title">Desbloqueio biométrico</string>

View file

@ -45,7 +45,6 @@
<string name="pref_tap_to_reveal_summary">Tokens serão ocultados por padrão. Toque nos tokens para revelar código.</string> <string name="pref_tap_to_reveal_summary">Tokens serão ocultados por padrão. Toque nos tokens para revelar código.</string>
<string name="pref_tap_to_reveal_time_title">Tempo limite para o tocar e mostrar</string> <string name="pref_tap_to_reveal_time_title">Tempo limite para o tocar e mostrar</string>
<string name="pref_auto_lock_title">Bloqueio automático</string> <string name="pref_auto_lock_title">Bloqueio automático</string>
<string name="pref_auto_lock_summary">Bloquear automaticamente quando você fechar o app ou bloquear seu dispositivo.</string>
<string name="pref_encryption_title">Encriptação</string> <string name="pref_encryption_title">Encriptação</string>
<string name="pref_encryption_summary">Criptografe o cofre e desbloqueie-o com uma senha ou sua digital</string> <string name="pref_encryption_summary">Criptografe o cofre e desbloqueie-o com uma senha ou sua digital</string>
<string name="pref_biometrics_title">Desbloqueio biométrico</string> <string name="pref_biometrics_title">Desbloqueio biométrico</string>

View file

@ -51,7 +51,6 @@
<string name="pref_tap_to_reveal_summary">Коды будут скрыты по умолчанию. Нажмите на токен, чтобы показать код.</string> <string name="pref_tap_to_reveal_summary">Коды будут скрыты по умолчанию. Нажмите на токен, чтобы показать код.</string>
<string name="pref_tap_to_reveal_time_title">Тайм-аут для отображения по нажатию</string> <string name="pref_tap_to_reveal_time_title">Тайм-аут для отображения по нажатию</string>
<string name="pref_auto_lock_title">Автоматическая блокировка</string> <string name="pref_auto_lock_title">Автоматическая блокировка</string>
<string name="pref_auto_lock_summary">Автоматическая блокировка при закрытии приложения и блокировке устройства.</string>
<string name="pref_encryption_title">Шифрование</string> <string name="pref_encryption_title">Шифрование</string>
<string name="pref_encryption_summary">Зашифруйте хранилище и разблокируйте его с помощью пароля или биометрии</string> <string name="pref_encryption_summary">Зашифруйте хранилище и разблокируйте его с помощью пароля или биометрии</string>
<string name="pref_biometrics_title">Биометрическая разблокировка</string> <string name="pref_biometrics_title">Биометрическая разблокировка</string>

View file

@ -46,7 +46,6 @@
<string name="pref_tap_to_reveal_summary">Kodlar varsayılan olarak gizlenir. Kodu görmek için üstüne dokunun</string> <string name="pref_tap_to_reveal_summary">Kodlar varsayılan olarak gizlenir. Kodu görmek için üstüne dokunun</string>
<string name="pref_tap_to_reveal_time_title">Gösterme için zaman aşımı</string> <string name="pref_tap_to_reveal_time_title">Gösterme için zaman aşımı</string>
<string name="pref_auto_lock_title">Otomatik kilitleme</string> <string name="pref_auto_lock_title">Otomatik kilitleme</string>
<string name="pref_auto_lock_summary">Cihazı kilitlediğimde veya uygulamayı kapattığımda otomatik olarak kilitle.</string>
<string name="pref_encryption_title">Şifreleme</string> <string name="pref_encryption_title">Şifreleme</string>
<string name="pref_encryption_summary">Kasayı şifrele ve açmak için bir parola veya biyometrik doğrulama kullan</string> <string name="pref_encryption_summary">Kasayı şifrele ve açmak için bir parola veya biyometrik doğrulama kullan</string>
<string name="pref_biometrics_title">Biyometrik kilit açma</string> <string name="pref_biometrics_title">Biyometrik kilit açma</string>

View file

@ -52,7 +52,6 @@
<string name="pref_tap_to_reveal_summary">默认情况下,令牌将被隐藏。为了显示验证码,需要点击令牌。</string> <string name="pref_tap_to_reveal_summary">默认情况下,令牌将被隐藏。为了显示验证码,需要点击令牌。</string>
<string name="pref_tap_to_reveal_time_title">点击令牌后,验证码的显示时间</string> <string name="pref_tap_to_reveal_time_title">点击令牌后,验证码的显示时间</string>
<string name="pref_auto_lock_title">自动锁定</string> <string name="pref_auto_lock_title">自动锁定</string>
<string name="pref_auto_lock_summary">关闭应用或锁定设备时自动锁定</string>
<string name="pref_encryption_title">加密</string> <string name="pref_encryption_title">加密</string>
<string name="pref_encryption_summary">加密数据库,并在解锁时要求密码或生物识别验证。</string> <string name="pref_encryption_summary">加密数据库,并在解锁时要求密码或生物识别验证。</string>
<string name="pref_biometrics_title">生物识别解锁</string> <string name="pref_biometrics_title">生物识别解锁</string>

View file

@ -84,5 +84,9 @@
<item>@string/password_strength_strong</item> <item>@string/password_strength_strong</item>
</string-array> </string-array>
<string-array name="pref_auto_lock_types">
<item>@string/pref_auto_lock_type_back_button</item>
<item>@string/pref_auto_lock_type_minimize</item>
<item>@string/pref_auto_lock_type_device_lock</item>
</string-array>
</resources> </resources>

View file

@ -57,7 +57,12 @@
<string name="pref_tap_to_reveal_summary">Tokens will be hidden by default. Tap on the tokens to reveal code.</string> <string name="pref_tap_to_reveal_summary">Tokens will be hidden by default. Tap on the tokens to reveal code.</string>
<string name="pref_tap_to_reveal_time_title">Timeout for tap to reveal</string> <string name="pref_tap_to_reveal_time_title">Timeout for tap to reveal</string>
<string name="pref_auto_lock_title">Auto lock</string> <string name="pref_auto_lock_title">Auto lock</string>
<string name="pref_auto_lock_summary">Automatically lock when you close the app or lock your device.</string> <string name="pref_auto_lock_summary">When %s</string>
<string name="pref_auto_lock_summary_disabled">Disabled</string>
<string name="pref_auto_lock_prompt">Automatically lock Aegis when</string>
<string name="pref_auto_lock_type_back_button">The back button is pressed</string>
<string name="pref_auto_lock_type_minimize">The app is minimized</string>
<string name="pref_auto_lock_type_device_lock">The device is locked</string>
<string name="pref_encryption_title">Encryption</string> <string name="pref_encryption_title">Encryption</string>
<string name="pref_encryption_summary">Encrypt the vault and unlock it with a password or biometrics</string> <string name="pref_encryption_summary">Encrypt the vault and unlock it with a password or biometrics</string>
<string name="pref_biometrics_title">Biometric unlock</string> <string name="pref_biometrics_title">Biometric unlock</string>

View file

@ -137,10 +137,10 @@
android:summary="@string/pref_pin_keyboard_summary" android:summary="@string/pref_pin_keyboard_summary"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>
<androidx.preference.SwitchPreferenceCompat <Preference
android:defaultValue="true"
android:key="pref_auto_lock" android:key="pref_auto_lock"
android:dependency="pref_encryption" android:dependency="pref_encryption"
android:persistent="false"
android:title="@string/pref_auto_lock_title" android:title="@string/pref_auto_lock_title"
android:summary="@string/pref_auto_lock_summary" android:summary="@string/pref_auto_lock_summary"
app:iconSpaceReserved="false"/> app:iconSpaceReserved="false"/>