mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-04-24 15:56:07 +00:00
Merge pull request #564 from alexbakker/improve-auto-lock
Improve auto lock and make it more customizable
This commit is contained in:
commit
52d2713482
28 changed files with 146 additions and 88 deletions
|
@ -115,6 +115,7 @@ dependencies {
|
|||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||
implementation "androidx.lifecycle:lifecycle-process:2.2.0"
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
implementation 'androidx.recyclerview:recyclerview:1.1.0'
|
||||
implementation "androidx.viewpager2:viewpager2:1.0.0"
|
||||
|
|
|
@ -12,7 +12,12 @@ import android.content.pm.ShortcutManager;
|
|||
import android.graphics.drawable.Icon;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
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.ui.MainActivity;
|
||||
|
@ -53,6 +58,9 @@ public class AegisApplication extends Application {
|
|||
intentFilter.addAction(CODE_LOCK_VAULT_ACTION);
|
||||
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) {
|
||||
initAppShortcuts();
|
||||
}
|
||||
|
@ -111,8 +119,8 @@ public class AegisApplication extends Application {
|
|||
return _prefs;
|
||||
}
|
||||
|
||||
public boolean isAutoLockEnabled() {
|
||||
return _prefs.isAutoLockEnabled() && !isVaultLocked() && _manager.isEncryptionEnabled() ;
|
||||
public boolean isAutoLockEnabled(int autoLockType) {
|
||||
return _prefs.isAutoLockTypeEnabled(autoLockType) && !isVaultLocked() && _manager.isEncryptionEnabled();
|
||||
}
|
||||
|
||||
public void registerLockListener(LockListener listener) {
|
||||
|
@ -123,10 +131,14 @@ public class AegisApplication extends Application {
|
|||
_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;
|
||||
for (LockListener listener : _lockListeners) {
|
||||
listener.onLocked();
|
||||
listener.onLocked(userInitiated);
|
||||
}
|
||||
|
||||
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
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (isAutoLockEnabled()) {
|
||||
lock();
|
||||
if (isAutoLockEnabled(Preferences.AUTO_LOCK_ON_DEVICE_LOCK)) {
|
||||
lock(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
package com.beemdevelopment.aegis;
|
||||
|
||||
public enum CancelAction {
|
||||
KILL,
|
||||
CLOSE
|
||||
}
|
||||
|
|
@ -12,6 +12,17 @@ import java.util.Locale;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
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;
|
||||
|
||||
public Preferences(Context context) {
|
||||
|
@ -73,8 +84,25 @@ public class Preferences {
|
|||
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() {
|
||||
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) {
|
||||
|
|
|
@ -6,7 +6,6 @@ import android.os.Bundle;
|
|||
import android.view.WindowManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
import com.beemdevelopment.aegis.AegisApplication;
|
||||
|
@ -20,9 +19,7 @@ import java.util.Locale;
|
|||
import java.util.Map;
|
||||
|
||||
public abstract class AegisActivity extends AppCompatActivity implements AegisApplication.LockListener {
|
||||
private boolean _resumed;
|
||||
private AegisApplication _app;
|
||||
private Theme _configuredTheme;
|
||||
|
||||
@Override
|
||||
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.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -58,24 +56,9 @@ public abstract class AegisActivity extends AppCompatActivity implements AegisAp
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
_resumed = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
_resumed = false;
|
||||
}
|
||||
|
||||
@CallSuper
|
||||
@Override
|
||||
public void onLocked() {
|
||||
if (isOrphan()) {
|
||||
setResult(RESULT_CANCELED, null);
|
||||
finish();
|
||||
}
|
||||
public void onLocked(boolean userInitiated) {
|
||||
setResult(RESULT_CANCELED, null);
|
||||
finishAndRemoveTask();
|
||||
}
|
||||
|
||||
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
|
||||
* the vault was locked by an external trigger while the Activity was still open.
|
||||
|
|
|
@ -23,7 +23,6 @@ import androidx.appcompat.app.AlertDialog;
|
|||
import androidx.biometric.BiometricPrompt;
|
||||
|
||||
import com.beemdevelopment.aegis.AegisApplication;
|
||||
import com.beemdevelopment.aegis.CancelAction;
|
||||
import com.beemdevelopment.aegis.Preferences;
|
||||
import com.beemdevelopment.aegis.R;
|
||||
import com.beemdevelopment.aegis.ThemeMap;
|
||||
|
@ -52,9 +51,7 @@ import javax.crypto.SecretKey;
|
|||
public class AuthActivity extends AegisActivity {
|
||||
private EditText _textPassword;
|
||||
|
||||
private CancelAction _cancelAction;
|
||||
private SlotList _slots;
|
||||
|
||||
private SecretKey _bioKey;
|
||||
private BiometricSlot _bioSlot;
|
||||
private BiometricPrompt _bioPrompt;
|
||||
|
@ -62,7 +59,7 @@ public class AuthActivity extends AegisActivity {
|
|||
private int _failedUnlockAttempts;
|
||||
|
||||
// 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 Preferences _prefs;
|
||||
|
@ -95,7 +92,6 @@ public class AuthActivity extends AegisActivity {
|
|||
} else {
|
||||
_inhibitBioPrompt = savedInstanceState.getBoolean("inhibitBioPrompt", false);
|
||||
}
|
||||
_cancelAction = (CancelAction) intent.getSerializableExtra("cancelAction");
|
||||
_slots = (SlotList) intent.getSerializableExtra("slots");
|
||||
_stateless = _slots != null;
|
||||
if (!_stateless) {
|
||||
|
@ -183,11 +179,10 @@ public class AuthActivity extends AegisActivity {
|
|||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
switch (_cancelAction) {
|
||||
case KILL:
|
||||
finishAffinity();
|
||||
case CLOSE:
|
||||
finish();
|
||||
if (_stateless) {
|
||||
super.onBackPressed();
|
||||
} else {
|
||||
finishAffinity();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ import androidx.appcompat.view.ActionMode;
|
|||
import androidx.appcompat.widget.SearchView;
|
||||
|
||||
import com.beemdevelopment.aegis.AegisApplication;
|
||||
import com.beemdevelopment.aegis.CancelAction;
|
||||
import com.beemdevelopment.aegis.Preferences;
|
||||
import com.beemdevelopment.aegis.R;
|
||||
import com.beemdevelopment.aegis.SortCategory;
|
||||
import com.beemdevelopment.aegis.ViewMode;
|
||||
|
@ -523,8 +523,8 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
|||
return;
|
||||
}
|
||||
|
||||
if (_app.isAutoLockEnabled()) {
|
||||
_app.lock();
|
||||
if (_app.isAutoLockEnabled(Preferences.AUTO_LOCK_ON_BACK_BUTTON)) {
|
||||
_app.lock(false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -596,7 +596,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
|||
return true;
|
||||
}
|
||||
case R.id.action_lock:
|
||||
_app.lock();
|
||||
_app.lock(true);
|
||||
return true;
|
||||
default:
|
||||
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) {
|
||||
if (!_isAuthenticating) {
|
||||
Intent intent = new Intent(this, AuthActivity.class);
|
||||
intent.putExtra("cancelAction", CancelAction.KILL);
|
||||
intent.putExtra("inhibitBioPrompt", inhibitBioPrompt);
|
||||
startActivityForResult(intent, CODE_DECRYPT);
|
||||
_isAuthenticating = true;
|
||||
|
@ -747,7 +746,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
|||
public void onListChange() { _fabScrollHelper.setVisible(true); }
|
||||
|
||||
@Override
|
||||
public void onLocked() {
|
||||
public void onLocked(boolean userInitiated) {
|
||||
if (_actionMode != null) {
|
||||
_actionMode.finish();
|
||||
}
|
||||
|
@ -755,11 +754,11 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
|||
_entryListView.clearEntries();
|
||||
_loaded = false;
|
||||
|
||||
if (isOpen()) {
|
||||
if (userInitiated) {
|
||||
startAuthActivity(true);
|
||||
} else {
|
||||
super.onLocked(userInitiated);
|
||||
}
|
||||
|
||||
super.onLocked();
|
||||
}
|
||||
|
||||
private void copyEntryCode(VaultEntry entry) {
|
||||
|
|
|
@ -20,7 +20,6 @@ import androidx.preference.SwitchPreferenceCompat;
|
|||
|
||||
import com.beemdevelopment.aegis.AegisApplication;
|
||||
import com.beemdevelopment.aegis.BuildConfig;
|
||||
import com.beemdevelopment.aegis.CancelAction;
|
||||
import com.beemdevelopment.aegis.Preferences;
|
||||
import com.beemdevelopment.aegis.R;
|
||||
import com.beemdevelopment.aegis.Theme;
|
||||
|
@ -237,7 +236,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
|
|||
_result.putExtra("needsRefresh", true);
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
Preference entryHighlightPreference = findPreference("pref_highlight_entry");
|
||||
entryHighlightPreference.setOnPreferenceChangeListener((preference, newValue) -> {
|
||||
_result.putExtra("needsRefresh", true);
|
||||
|
@ -256,7 +255,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
|
|||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
_result.putExtra("needsRecreate", true);
|
||||
Window window = getActivity().getWindow();
|
||||
if ((boolean)newValue) {
|
||||
if ((boolean) newValue) {
|
||||
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
||||
} else {
|
||||
window.clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
|
||||
|
@ -461,6 +460,35 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
|
|||
});
|
||||
|
||||
_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");
|
||||
}
|
||||
|
||||
|
@ -578,7 +606,6 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
|
|||
|
||||
Intent intent = new Intent(getActivity(), AuthActivity.class);
|
||||
intent.putExtra("slots", ((AegisImporter.EncryptedState) state).getSlots());
|
||||
intent.putExtra("cancelAction", CancelAction.CLOSE);
|
||||
startActivityForResult(intent, CODE_IMPORT_DECRYPT);
|
||||
} else {
|
||||
state.decrypt(getActivity(), new DatabaseImporter.DecryptListener() {
|
||||
|
@ -851,6 +878,28 @@ public class PreferencesFragment extends PreferenceFragmentCompat {
|
|||
_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 {
|
||||
@Override
|
||||
public void onSlotResult(Slot slot, Cipher cipher) {
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
<string name="pref_tap_to_reveal_summary">سيتم اخفاء الرموز افتراضيًا. انقر على الرموز لكشف الكود.</string>
|
||||
<string name="pref_tap_to_reveal_time_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_summary">قم بتشفير المخزن وفك قفله بكملة مرور أو مصادقة بيومترية</string>
|
||||
<string name="pref_biometrics_title">فتح القفل البيومتري</string>
|
||||
|
|
|
@ -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_time_title">Prodleva zobrazení kódu</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_summary">Šifrovat trezor a odemykat jej pomocí hesla, nebo biometrie</string>
|
||||
<string name="pref_biometrics_title">Biometrické odemknutí</string>
|
||||
|
|
|
@ -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_time_title">Zeitüberschreitung für Tippen zum Anzeigen</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_biometrics_title">Biometische Entsperrung</string>
|
||||
<string name="pref_biometrics_summary">Erlauben, die Datenbank mit biometrischer Authentifizierung zu entsperren</string>
|
||||
|
|
|
@ -36,7 +36,6 @@
|
|||
<string name="pref_tap_to_reveal_summary">Απόκρυψη αναγνωριστικών από προεπιλογή. Πατήστε στα αναγνωριστικά για προβολή κωδικού.</string>
|
||||
<string name="pref_tap_to_reveal_time_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_summary">Κρυπτογράφηση λίστας και ξεκλείδωμα με κωδικό ή βιομετρική μέθοδο</string>
|
||||
<string name="pref_biometrics_title">Βιομετρικό ξεκλείδωμα</string>
|
||||
|
|
|
@ -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_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_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_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>
|
||||
|
|
|
@ -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_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_summary">Lukitsee sovelluksen automaattisesti, kun suljet sen tai lukitset laitteesi.</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_biometrics_title">Biometrinen avaaminen</string>
|
||||
|
|
|
@ -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_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_summary">Verrouiller automatiquement lorsque vous fermez l\'application ou verrouillez votre appareil.</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_biometrics_title">Déverrouillage biométrique</string>
|
||||
|
|
|
@ -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_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_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_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>
|
||||
|
|
|
@ -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_time_title">Timeout visualizzazione codice OTP</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_summary">Cripta il database e sbloccalo con password o impronta digitale</string>
|
||||
<string name="pref_biometrics_title">Sblocco biometrico</string>
|
||||
|
|
|
@ -29,7 +29,6 @@
|
|||
<string name="pref_tap_to_reveal_summary">ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಟೋಕನ್ಗಳನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ. ಸಂಕೇತವನ್ನು ಬಹಿರಂಗಪಡಿಸುವುದಕ್ಕೆ ಟೋಕನ್ಗಳನ್ನು ಒತ್ತು.</string>
|
||||
<string name="pref_tap_to_reveal_time_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_set_password_title">ಗುಪ್ತಪದವನ್ನು ಬದಲಾಯಿಸು</string>
|
||||
<string name="pref_set_password_summary">ವೌಲ್ಟ್ ಅನ್ನು ತೆರೆಯಲು ಹೊಸಾ ಗುಪ್ತಪದವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</string>
|
||||
|
|
|
@ -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_time_title">Time-out voor aantikken om te onthullen</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_summary">Encrypt de kluis en ontgrendel deze met een wachtwoord of biometrie</string>
|
||||
<string name="pref_biometrics_title">Ontgrendelen met biometrie</string>
|
||||
|
|
|
@ -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_time_title">Limit czasu dla odkrycia</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_summary">Zaszyfruj sejf i odblokuj go za pomocą hasła lub autoryzacji biometrycznej</string>
|
||||
<string name="pref_biometrics_title">Autoryzacja biometryczna</string>
|
||||
|
|
|
@ -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_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_summary">Bloqueia automaticamente quando você fecha o app ou bloqueia seu dispositivo.</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_biometrics_title">Desbloqueio biométrico</string>
|
||||
|
|
|
@ -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_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_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_summary">Criptografe o cofre e desbloqueie-o com uma senha ou sua digital</string>
|
||||
<string name="pref_biometrics_title">Desbloqueio biométrico</string>
|
||||
|
|
|
@ -51,7 +51,6 @@
|
|||
<string name="pref_tap_to_reveal_summary">Коды будут скрыты по умолчанию. Нажмите на токен, чтобы показать код.</string>
|
||||
<string name="pref_tap_to_reveal_time_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_summary">Зашифруйте хранилище и разблокируйте его с помощью пароля или биометрии</string>
|
||||
<string name="pref_biometrics_title">Биометрическая разблокировка</string>
|
||||
|
|
|
@ -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_time_title">Gösterme için zaman aşımı</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_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>
|
||||
|
|
|
@ -52,7 +52,6 @@
|
|||
<string name="pref_tap_to_reveal_summary">默认情况下,令牌将被隐藏。为了显示验证码,需要点击令牌。</string>
|
||||
<string name="pref_tap_to_reveal_time_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_summary">加密数据库,并在解锁时要求密码或生物识别验证。</string>
|
||||
<string name="pref_biometrics_title">生物识别解锁</string>
|
||||
|
|
|
@ -84,5 +84,9 @@
|
|||
<item>@string/password_strength_strong</item>
|
||||
</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>
|
||||
|
||||
|
|
|
@ -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_time_title">Timeout for tap to reveal</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_summary">Encrypt the vault and unlock it with a password or biometrics</string>
|
||||
<string name="pref_biometrics_title">Biometric unlock</string>
|
||||
|
|
|
@ -137,10 +137,10 @@
|
|||
android:summary="@string/pref_pin_keyboard_summary"
|
||||
app:iconSpaceReserved="false"/>
|
||||
|
||||
<androidx.preference.SwitchPreferenceCompat
|
||||
android:defaultValue="true"
|
||||
<Preference
|
||||
android:key="pref_auto_lock"
|
||||
android:dependency="pref_encryption"
|
||||
android:persistent="false"
|
||||
android:title="@string/pref_auto_lock_title"
|
||||
android:summary="@string/pref_auto_lock_summary"
|
||||
app:iconSpaceReserved="false"/>
|
||||
|
|
Loading…
Add table
Reference in a new issue