diff --git a/.github/ISSUE_TEMPLATE/thumbnail-request.md b/.github/ISSUE_TEMPLATE/thumbnail-request.md
index 1dd56474..cae56f17 100644
--- a/.github/ISSUE_TEMPLATE/thumbnail-request.md
+++ b/.github/ISSUE_TEMPLATE/thumbnail-request.md
@@ -7,7 +7,7 @@ assignees: flocke, RichyHBM, ziegenberg
---
-Please fill in **all the information below** to help speed up the process!
+
**Name**:
**Website**:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bc570ef0..3a1b7126 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,7 @@
* Bug fix: Crash when clicking on an entry multiple times (Issue #631, PR #634 by @jsoberg)
* Bug fix: Crash during settings changes (Issue #639, PR #640 by @jsoberg)
* Bug fix: Don't use regionalized language codes (Issue #567)
+ * Bug fix: Report backup failure correctly (Issue #671)
* Internal: Update Gradle, build tools and dependencies
* Internal: Min API Level set to 22 (Lollipop 5.1)
* Internal: Refactoring and reducing build warnings
diff --git a/README.md b/README.md
index c184e65e..ccec411a 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# andOTP - Android OTP Authenticator
[![Build Status](https://travis-ci.org/andOTP/andOTP.svg?branch=master)](https://travis-ci.org/andOTP/andOTP)
-[![Current release](https://img.shields.io/github/release/andOTP/andOTP/all.svg)](https://github.com/andOTP/andOTP/releases/download/v0.8.0-beta2/andOTP_v0.8.0-beta2.apk)
+[![Current release](https://img.shields.io/github/release/andOTP/andOTP/all.svg)](https://github.com/andOTP/andOTP/releases/download/v0.8.0/andOTP_v0.8.0.apk)
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/andotp/localized.svg)](https://crowdin.com/project/andotp)
[![Chat - Telegram](https://img.shields.io/badge/chat-Telegram-blue.svg)](https://t.me/andOTP)
[![Chat - Matrix](https://img.shields.io/badge/chat-Matrix-blue.svg)](https://matrix.to/#/#andOTP:privacytools.io)
diff --git a/app/build.gradle b/app/build.gradle
index 3284f7c6..57f121a5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
applicationId "org.shadowice.flocke.andotp"
minSdkVersion 22
targetSdkVersion 29
- versionCode 34
- versionName "0.8.0-beta2"
+ versionCode 35
+ versionName "0.8.0"
vectorDrawables.useSupportLibrary = true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -57,12 +57,12 @@ android {
dependencies {
def lifecycle_version = "2.2.0"
- implementation 'androidx.media:media:1.2.0'
+ implementation 'androidx.media:media:1.2.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation "androidx.lifecycle:lifecycle-process:${lifecycle_version}"
implementation "androidx.lifecycle:lifecycle-common-java8:${lifecycle_version}"
implementation 'com.google.android.material:material:1.2.1'
@@ -71,13 +71,14 @@ dependencies {
implementation "commons-codec:commons-codec:1.15"
implementation "com.github.aakira:expandable-layout:1.6.0"
implementation "com.heinrichreimersoftware:material-intro:2.0.0"
- implementation "com.journeyapps:zxing-android-embedded:3.6.0"
+ implementation("com.journeyapps:zxing-android-embedded:4.1.0"){ transitive = false }
+ implementation "com.google.zxing:core:3.3.0" // Keep pinned to 3.3.0 to support SDK versions below 24
implementation "com.vanniktech:vntnumberpickerpreference:1.0.0"
implementation "me.zhanghai.android.materialprogressbar:library:1.6.1"
implementation "org.sufficientlysecure:openpgp-api:12.0"
implementation "com.leinardi.android:speed-dial:3.1.1"
- implementation "com.mikepenz:aboutlibraries:6.2.3"
+ implementation "com.mikepenz:aboutlibraries:6.2.3" // Supporting a newer version will need some work
androidTestImplementation "androidx.test.espresso:espresso-core:3.3.0"
- coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1'
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bbc7ed07..96a1996a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,8 @@
android:installLocation="auto"
package="org.shadowice.flocke.andotp">
+
+
{
+ if (settings.getRelockOnScreenOff()) {
+ cancelBackgroundTask();
+ }
+ });
+
+ observer = new ProcessLifecycleObserver();
+ ProcessLifecycleOwner.get().getLifecycle()
+ .addObserver(observer);
+
+ getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ }
+
+ private void initToolbar() {
Toolbar toolbar = findViewById(R.id.container_toolbar);
toolbar.setNavigationIcon(null);
setSupportActionBar(toolbar);
+ }
+ private void initPasswordViews() {
ViewStub stub = findViewById(R.id.container_stub);
stub.setLayoutResource(R.layout.content_authenticate);
View v = stub.inflate();
- Intent callingIntent = getIntent();
- int labelMsg = callingIntent.getIntExtra(Constants.EXTRA_AUTH_MESSAGE, R.string.auth_msg_authenticate);
- newEncryption = callingIntent.getStringExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION);
+ initPasswordLabelView(v);
+ initPasswordLayoutView(v);
+ initPasswordInputView(v);
+ initUnlockViews(v);
+ }
+ private void initPasswordLabelView(View v) {
+ int labelMsg = getIntent().getIntExtra(Constants.EXTRA_AUTH_MESSAGE, R.string.auth_msg_authenticate);
TextView passwordLabel = v.findViewById(R.id.passwordLabel);
- TextInputLayout passwordLayout = v.findViewById(R.id.passwordLayout);
- passwordInput = v.findViewById(R.id.passwordEdit);
-
- if (settings.getBlockAccessibility())
- passwordLayout.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && settings.getBlockAutofill())
- passwordLayout.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
-
passwordLabel.setText(labelMsg);
+ }
- authMethod = settings.getAuthMethod();
- password = settings.getAuthCredentials();
-
- if (password.isEmpty()) {
- password = settings.getOldCredentials(authMethod);
- oldPassword = true;
+ private void initPasswordLayoutView(View v) {
+ passwordLayout = v.findViewById(R.id.passwordLayout);
+ int hintResId = (authMethod == AuthMethod.PASSWORD) ? R.string.auth_hint_password : R.string.auth_hint_pin;
+ passwordLayout.setHint(getString(hintResId));
+ if (settings.getBlockAccessibility()) {
+ passwordLayout.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS);
}
-
- if (authMethod == AuthMethod.PASSWORD) {
- if (password.isEmpty()) {
- Toast.makeText(this, R.string.auth_toast_password_missing, Toast.LENGTH_LONG).show();
- finishWithResult(true, null);
- } else {
- passwordLayout.setHint(getString(R.string.auth_hint_password));
- passwordInput.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- }
- } else if (authMethod == AuthMethod.PIN) {
- if (password.isEmpty()) {
- Toast.makeText(this, R.string.auth_toast_pin_missing, Toast.LENGTH_LONG).show();
- finishWithResult(true, null);
- } else {
- passwordLayout.setHint(getString(R.string.auth_hint_pin));
- passwordInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
- }
- } else {
- finishWithResult(true, null);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && settings.getBlockAutofill()) {
+ passwordLayout.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS);
}
+ }
+ private void initPasswordInputView(View v) {
+ passwordInput = v.findViewById(R.id.passwordEdit);
+ int inputType = (authMethod == AuthMethod.PASSWORD)
+ ? (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD)
+ : (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
+ passwordInput.setInputType(inputType);
passwordInput.setTransformationMethod(new PasswordTransformationMethod());
passwordInput.setOnEditorActionListener(this);
+ }
- Button unlockButton = v.findViewById(R.id.buttonUnlock);
+ private void initUnlockViews(View v) {
+ unlockButton = v.findViewById(R.id.buttonUnlock);
unlockButton.setOnClickListener(this);
+ unlockProgress = v.findViewById(R.id.unlockProgress);
+ }
- getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
+ private void cancelBackgroundTask() {
+ TaskFragment taskFragment = findTaskFragment();
+ if (taskFragment != null) {
+ taskFragment.task.cancel();
+ }
+ setupUiForTaskState(false);
+ }
+
+ private class ProcessLifecycleObserver implements DefaultLifecycleObserver {
+ @Override
+ public void onStop(LifecycleOwner owner) {
+ if (settings.getRelockOnBackground()) {
+ cancelBackgroundTask();
+ }
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ checkBackgroundTask();
+ }
+
+ private void checkBackgroundTask() {
+ TaskFragment taskFragment = findTaskFragment();
+ if (taskFragment != null) {
+ if (taskFragment.task.isCanceled()) {
+ // The task was canceled, so remove the task fragment and reset password input.
+ getFragmentManager().beginTransaction()
+ .remove(taskFragment)
+ .commit();
+ resetPasswordInput();
+ } else {
+ taskFragment.task.setCallback(this::handleResult);
+ setupUiForTaskState(true);
+ }
+ }
+ }
+
+ private void resetPasswordInput() {
+ passwordInput.setText("");
+ passwordInput.requestFocus();
+ InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
+ keyboard.showSoftInput(passwordInput, 0);
+ }
+
+ @Nullable
+ private TaskFragment findTaskFragment() {
+ return (TaskFragment) getFragmentManager().findFragmentByTag(TAG_TASK_FRAGMENT);
+ }
+
+ private void setupUiForTaskState(boolean isTaskRunning) {
+ passwordLayout.setEnabled(!isTaskRunning);
+ passwordInput.setEnabled(!isTaskRunning);
+ unlockButton.setEnabled(!isTaskRunning);
+ unlockButton.setVisibility(isTaskRunning? View.INVISIBLE : View.VISIBLE);
+ unlockProgress.setVisibility(isTaskRunning ? View.VISIBLE : View.GONE);
}
@Override
public void onClick(View view) {
- checkPassword(passwordInput.getText().toString());
+ Editable text = passwordInput.getText();
+ startAuthTask(text != null ? text.toString() : "");
}
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (EditorActionHelper.isActionDoneOrKeyboardEnter(actionId, event)) {
- checkPassword(v.getText().toString());
+ startAuthTask(v.getText().toString());
return true;
}
-
return false;
}
- public void checkPassword(String plainPassword) {
- if (! oldPassword) {
- try {
- EncryptionHelper.PBKDF2Credentials credentials = EncryptionHelper.generatePBKDF2Credentials(plainPassword, settings.getSalt(), settings.getIterations());
- byte[] passwordArray = Base64.decode(password, Base64.URL_SAFE);
+ private void startAuthTask(String plainPassword) {
+ TaskFragment taskFragment = findTaskFragment();
+ // Don't start a task if we already have an active task running.
+ if (taskFragment == null || taskFragment.task.isCanceled()) {
+ AuthenticationTask task = new AuthenticationTask(this, isAuthUpgrade, existingAuthCredentials, plainPassword);
+ task.setCallback(this::handleResult);
- if (Arrays.equals(passwordArray, credentials.password)) {
- finishWithResult(true, credentials.key);
- } else {
- finishWithResult(false, null);
- }
- } catch (NoSuchAlgorithmException | InvalidKeySpecException | IllegalArgumentException e) {
- e.printStackTrace();
- finishWithResult(false, null);
- }
- } else {
- String hashedPassword = new String(Hex.encodeHex(DigestUtils.sha256(plainPassword)));
-
- if (hashedPassword.equals(password)) {
- byte[] key = settings.setAuthCredentials(plainPassword);
-
- if (key == null)
- Toast.makeText(this, R.string.settings_toast_auth_upgrade_failed, Toast.LENGTH_LONG).show();
-
- if (authMethod == AuthMethod.PASSWORD)
- settings.removeAuthPasswordHash();
- else if (authMethod == AuthMethod.PIN)
- settings.removeAuthPINHash();
-
- finishWithResult(true, key);
- } else {
- finishWithResult(false, null);
+ if (taskFragment == null) {
+ taskFragment = new TaskFragment();
+ getFragmentManager()
+ .beginTransaction()
+ .add(taskFragment, TAG_TASK_FRAGMENT)
+ .commit();
}
+ taskFragment.startTask(task);
+ setupUiForTaskState(true);
}
}
- // End with a result
- public void finishWithResult(boolean success, byte[] key) {
+ private void handleResult(Result result) {
+ if (result.authUpgradeFailed) {
+ Toast.makeText(this, R.string.settings_toast_auth_upgrade_failed, Toast.LENGTH_LONG).show();
+ }
+ finishWithResult(result.encryptionKey != null, result.encryptionKey);
+ }
+
+ private void finishWithResult(boolean success, byte[] encryptionKey) {
Intent data = new Intent();
-
- if (newEncryption != null && ! newEncryption.isEmpty())
+ if (newEncryption != null && !newEncryption.isEmpty())
data.putExtra(Constants.EXTRA_AUTH_NEW_ENCRYPTION, newEncryption);
-
- if (key != null)
- data.putExtra(Constants.EXTRA_AUTH_PASSWORD_KEY, key);
-
+ if (encryptionKey != null)
+ data.putExtra(Constants.EXTRA_AUTH_PASSWORD_KEY, encryptionKey);
if (success)
setResult(RESULT_OK, data);
-
finish();
}
- // Go back to the main activity
@Override
public void onBackPressed() {
finishWithResult(false, null);
super.onBackPressed();
}
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ // We don't want the task to callback to a dead activity and cause a memory leak, so null it here.
+ TaskFragment taskFragment = findTaskFragment();
+ if (taskFragment != null) {
+ taskFragment.task.setCallback(null);
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ ProcessLifecycleOwner.get().getLifecycle()
+ .removeObserver(observer);
+ super.onDestroy();
+ }
+
+ @Override
+ protected boolean shouldDestroyOnScreenOff() {
+ return false;
+ }
+
+ /** Retained instance fragment to hold a running {@link AuthenticationTask} between configuration changes.*/
+ public static class TaskFragment extends Fragment {
+
+ AuthenticationTask task;
+
+ public TaskFragment() {
+ super();
+ setRetainInstance(true);
+ }
+
+ public void startTask(@NonNull AuthenticationTask task) {
+ this.task = task;
+ task.execute();
+ }
+ }
}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/BackupActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/BackupActivity.java
index 7cab245c..9bef95c7 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/BackupActivity.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/BackupActivity.java
@@ -23,6 +23,7 @@
package org.shadowice.flocke.andotp.Activities;
import android.app.AlertDialog;
+import android.app.Fragment;
import android.app.PendingIntent;
import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
@@ -30,17 +31,25 @@ import android.content.Intent;
import android.content.IntentSender;
import android.net.Uri;
import android.os.Bundle;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewStub;
-import android.widget.LinearLayout;
-import android.widget.Switch;
+import android.widget.AdapterView;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.ProgressBar;
+import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
+import com.google.android.material.switchmaterial.SwitchMaterial;
+
import org.openintents.openpgp.OpenPgpError;
import org.openintents.openpgp.OpenPgpSignatureResult;
import org.openintents.openpgp.util.OpenPgpApi;
@@ -48,26 +57,35 @@ import org.openintents.openpgp.util.OpenPgpServiceConnection;
import org.shadowice.flocke.andotp.Database.Entry;
import org.shadowice.flocke.andotp.Dialogs.PasswordEntryDialog;
import org.shadowice.flocke.andotp.R;
+import org.shadowice.flocke.andotp.Tasks.EncryptedBackupTask;
+import org.shadowice.flocke.andotp.Tasks.EncryptedRestoreTask;
+import org.shadowice.flocke.andotp.Tasks.GenericBackupTask;
+import org.shadowice.flocke.andotp.Tasks.GenericRestoreTask;
+import org.shadowice.flocke.andotp.Tasks.PGPBackupTask;
+import org.shadowice.flocke.andotp.Tasks.PGPRestoreTask;
+import org.shadowice.flocke.andotp.Tasks.PlainTextBackupTask;
+import org.shadowice.flocke.andotp.Tasks.PlainTextRestoreTask;
import org.shadowice.flocke.andotp.Utilities.BackupHelper;
import org.shadowice.flocke.andotp.Utilities.Constants;
import org.shadowice.flocke.andotp.Utilities.DatabaseHelper;
import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
-import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
import org.shadowice.flocke.andotp.Utilities.Tools;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
-import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
-import java.util.Arrays;
import javax.crypto.SecretKey;
public class BackupActivity extends BaseActivity {
private final static String TAG = BackupActivity.class.getSimpleName();
+ private static final String TAG_BACKUP_TASK_FRAGMENT = "BackupActivity.BackupTaskFragmentTag";
+ private static final String TAG_RESTORE_TASK_FRAGMENT = "BackupActivity.RestoreTaskFragmentTag";
+
+ private Constants.BackupType backupType = Constants.BackupType.ENCRYPTED;
private SecretKey encryptionKey = null;
private OpenPgpServiceConnection pgpServiceConnection;
@@ -76,9 +94,17 @@ public class BackupActivity extends BaseActivity {
private Uri encryptTargetFile;
private Uri decryptSourceFile;
- private Switch replace;
+ private Button btnBackup;
+ private Button btnRestore;
+ private TextView txtBackupLabel;
+ private TextView txtBackupWarning;
+ private SwitchMaterial swReplace;
+ private CheckBox chkOldFormat;
+ private ProgressBar progressBackup;
+ private ProgressBar progressRestore;
private boolean reload = false;
+ private boolean allowExit = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -98,96 +124,119 @@ public class BackupActivity extends BaseActivity {
byte[] keyMaterial = callingIntent.getByteArrayExtra(Constants.EXTRA_BACKUP_ENCRYPTION_KEY);
encryptionKey = EncryptionHelper.generateSymmetricKey(keyMaterial);
- // Plain-text
+ Spinner spBackupType = v.findViewById(R.id.backupType);
+ btnBackup = v.findViewById(R.id.buttonBackup);
+ btnRestore = v.findViewById(R.id.buttonRestore);
+ txtBackupLabel = v.findViewById(R.id.backupLabel);
+ txtBackupWarning = v.findViewById(R.id.backupErrorLabel);
+ swReplace = v.findViewById(R.id.backup_replace);
+ chkOldFormat = v.findViewById(R.id.restoreOldCrypt);
+ progressBackup = v.findViewById(R.id.progressBarBackup);
+ progressRestore = v.findViewById(R.id.progressBarRestore);
- LinearLayout backupPlain = v.findViewById(R.id.button_backup_plain);
- LinearLayout restorePlain = v.findViewById(R.id.button_restore_plain);
+ setupBackupType(settings.getDefaultBackupType());
+ spBackupType.setSelection(backupType.ordinal());
- backupPlain.setOnClickListener(new View.OnClickListener() {
+ spBackupType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
- public void onClick(View view) {
- backupPlainWithWarning();
+ public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
+ Constants.BackupType type = Constants.BackupType.values()[i];
+ setupBackupType(type);
}
+
+ @Override
+ public void onNothingSelected(AdapterView> adapterView) { }
});
- restorePlain.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_PLAIN);
- }
- });
-
- // Password
-
- TextView cryptSetup = v.findViewById(R.id.msg_crypt_setup);
- LinearLayout backupCrypt = v.findViewById(R.id.button_backup_crypt);
- LinearLayout restoreCrypt = v.findViewById(R.id.button_restore_crypt);
- LinearLayout restoreCryptOld = v.findViewById(R.id.button_restore_crypt_old);
-
- if (settings.getBackupPasswordEnc().isEmpty()) {
- cryptSetup.setVisibility(View.VISIBLE);
- } else {
- cryptSetup.setVisibility(View.GONE);
- }
-
- backupCrypt.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- showSaveFileSelector(Constants.BACKUP_MIMETYPE_CRYPT, Constants.BackupType.ENCRYPTED, Constants.INTENT_BACKUP_SAVE_DOCUMENT_CRYPT);
- }
- });
-
- restoreCrypt.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT);
- }
- });
-
- restoreCryptOld.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT_OLD);
- }
- });
-
- // OpenPGP
-
- String PGPProvider = settings.getOpenPGPProvider();
- pgpEncryptionUserIDs = settings.getOpenPGPEncryptionUserIDs();
-
- TextView setupPGP = v.findViewById(R.id.msg_openpgp_setup);
- LinearLayout backupPGP = v.findViewById(R.id.button_backup_openpgp);
- LinearLayout restorePGP = v.findViewById(R.id.button_restore_openpgp);
-
- if (TextUtils.isEmpty(PGPProvider)) {
- setupPGP.setVisibility(View.VISIBLE);
- backupPGP.setVisibility(View.GONE);
- restorePGP.setVisibility(View.GONE);
- } else if (TextUtils.isEmpty(pgpEncryptionUserIDs)){
- setupPGP.setVisibility(View.VISIBLE);
- setupPGP.setText(R.string.backup_desc_openpgp_keyid);
- backupPGP.setVisibility(View.GONE);
- } else {
- pgpServiceConnection = new OpenPgpServiceConnection(BackupActivity.this.getApplicationContext(), PGPProvider);
- pgpServiceConnection.bindToService();
-
- backupPGP.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
+ btnBackup.setOnClickListener(view -> {
+ switch (backupType) {
+ case PLAIN_TEXT:
+ backupPlainWithWarning();
+ break;
+ case ENCRYPTED:
+ showSaveFileSelector(Constants.BACKUP_MIMETYPE_CRYPT, Constants.BackupType.ENCRYPTED, Constants.INTENT_BACKUP_SAVE_DOCUMENT_CRYPT);
+ break;
+ case OPEN_PGP:
showSaveFileSelector(Constants.BACKUP_MIMETYPE_PGP, Constants.BackupType.OPEN_PGP, Constants.INTENT_BACKUP_SAVE_DOCUMENT_PGP);
- }
- });
+ break;
+ }
+ });
- restorePGP.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
+ btnRestore.setOnClickListener(view -> {
+ switch (backupType) {
+ case PLAIN_TEXT:
+ showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_PLAIN);
+ break;
+ case ENCRYPTED:
+ if (chkOldFormat.isChecked())
+ showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT_OLD);
+ else
+ showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_CRYPT);
+ break;
+ case OPEN_PGP:
showOpenFileSelector(Constants.INTENT_BACKUP_OPEN_DOCUMENT_PGP);
+ break;
+ }
+ });
+ }
+
+ private void setupBackupType(Constants.BackupType type) {
+ switch (type) {
+ case PLAIN_TEXT:
+ txtBackupLabel.setText(R.string.backup_label_warning_plain);
+
+ chkOldFormat.setVisibility(View.GONE);
+ txtBackupWarning.setVisibility(View.GONE);
+
+ btnBackup.setEnabled(true);
+ btnRestore.setEnabled(true);
+
+ break;
+ case ENCRYPTED:
+ txtBackupLabel.setText(R.string.backup_label_crypt);
+
+ chkOldFormat.setVisibility(View.VISIBLE);
+ txtBackupWarning.setVisibility(View.GONE);
+
+ btnBackup.setEnabled(true);
+ btnRestore.setEnabled(true);
+
+ break;
+ case OPEN_PGP:
+ txtBackupLabel.setText(R.string.backup_label_pgp);
+
+ chkOldFormat.setVisibility(View.GONE);
+
+ String PGPProvider = settings.getOpenPGPProvider();
+ pgpEncryptionUserIDs = settings.getOpenPGPEncryptionUserIDs();
+
+ if (TextUtils.isEmpty(PGPProvider)) {
+ txtBackupWarning.setText(R.string.backup_desc_openpgp_provider);
+ txtBackupWarning.setVisibility(View.VISIBLE);
+
+ btnBackup.setEnabled(false);
+ btnRestore.setEnabled(false);
+ } else if (TextUtils.isEmpty(pgpEncryptionUserIDs)){
+ txtBackupWarning.setText(R.string.backup_desc_openpgp_keyid);
+ txtBackupWarning.setVisibility(View.VISIBLE);
+
+ btnBackup.setEnabled(false);
+ btnRestore.setEnabled(false);
+ } else {
+ txtBackupWarning.setVisibility(View.GONE);
+
+ btnBackup.setEnabled(true);
+ btnRestore.setEnabled(true);
+
+ pgpServiceConnection = new OpenPgpServiceConnection(BackupActivity.this.getApplicationContext(), PGPProvider);
+ pgpServiceConnection.bindToService();
}
- });
+
+ break;
}
- replace = v.findViewById(R.id.backup_replace);
+ backupType = type;
+ settings.setDefaultBackupType(type);
}
// End with a result
@@ -201,14 +250,18 @@ public class BackupActivity extends BaseActivity {
// Go back to the main activity
@Override
public boolean onSupportNavigateUp() {
- finishWithResult();
+ if (allowExit)
+ finishWithResult();
+
return true;
}
@Override
public void onBackPressed() {
- finishWithResult();
- super.onBackPressed();
+ if (allowExit) {
+ finishWithResult();
+ super.onBackPressed();
+ }
}
@Override
@@ -219,6 +272,85 @@ public class BackupActivity extends BaseActivity {
pgpServiceConnection.unbindFromService();
}
+ // TODO: Show more information about the finished backup (e.g. a notification with the file name)
+ private void notifyBackupState(int msgId) {
+ Toast.makeText(this, msgId, Toast.LENGTH_LONG).show();
+ }
+
+ private void handleBackupTaskResult(GenericBackupTask.BackupTaskResult result) {
+ showBackupProgress(false);
+
+ if (result.messageId != 0)
+ notifyBackupState(result.messageId);
+ else
+ if (!result.success)
+ notifyBackupState(R.string.backup_toast_export_failed);
+
+ // Clean up the task fragment
+ BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
+ if (backupTaskFragment != null) {
+ getFragmentManager().beginTransaction()
+ .remove(backupTaskFragment)
+ .commit();
+ }
+
+ if (result.success)
+ finishWithResult();
+ }
+
+ private void handleRestoreTaskResult(GenericRestoreTask.RestoreTaskResult result) {
+ if (result.success) {
+ if (result.isPGP) {
+ InputStream is = new ByteArrayInputStream(result.payload.getBytes(StandardCharsets.UTF_8));
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ OpenPgpApi api = new OpenPgpApi(this, pgpServiceConnection.getService());
+ Intent resultIntent = api.executeApi(result.decryptIntent, is, os);
+
+ handleOpenPGPResult(resultIntent, os, result.uri, Constants.INTENT_BACKUP_DECRYPT_PGP);
+ } else {
+ restoreEntries(result.payload, false);
+ }
+ } else {
+ if (result.messageId != 0)
+ notifyBackupState(result.messageId);
+ else
+ notifyBackupState(R.string.backup_toast_import_failed);
+ }
+
+ showRestoreProgress(false);
+
+ // Clean up the task fragment
+ RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
+ if (restoreTaskFragment != null) {
+ getFragmentManager().beginTransaction()
+ .remove(restoreTaskFragment)
+ .commit();
+ }
+
+ if (result.success && !result.isPGP)
+ finishWithResult();
+ }
+
+ private void toggleInProgressMode(boolean running) {
+ allowExit = !running;
+
+ btnBackup.setEnabled(!running);
+ btnRestore.setEnabled(!running);
+ chkOldFormat.setEnabled(!running);
+ swReplace.setEnabled(!running);
+ }
+
+ private void showBackupProgress(boolean running) {
+ toggleInProgressMode(running);
+ progressBackup.setVisibility(running ? View.VISIBLE : View.GONE);
+ }
+
+ private void showRestoreProgress(boolean running) {
+ toggleInProgressMode(running);
+ progressRestore.setVisibility(running ? View.VISIBLE : View.GONE);
+ }
+
// Get the result from external activities
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
@@ -291,26 +423,11 @@ public class BackupActivity extends BaseActivity {
} else {
if (settings.isBackupLocationSet()) {
if (intentId == Constants.INTENT_BACKUP_SAVE_DOCUMENT_PLAIN) {
- BackupHelper.BackupFile plainBackupFile = BackupHelper.backupFile(this, settings.getBackupLocation(), Constants.BackupType.PLAIN_TEXT);
-
- if (plainBackupFile.file != null)
- doBackupPlain(plainBackupFile.file.getUri());
- else
- Toast.makeText(this, plainBackupFile.errorMessage, Toast.LENGTH_LONG).show();
+ doBackupPlain(null);
} else if (intentId == Constants.INTENT_BACKUP_SAVE_DOCUMENT_CRYPT) {
- BackupHelper.BackupFile cryptBackupFile = BackupHelper.backupFile(this, settings.getBackupLocation(), Constants.BackupType.ENCRYPTED);
-
- if (cryptBackupFile.file != null)
- doBackupCrypt(cryptBackupFile.file.getUri());
- else
- Toast.makeText(this, cryptBackupFile.errorMessage, Toast.LENGTH_LONG).show();
+ doBackupCrypt(null);
} else if (intentId == Constants.INTENT_BACKUP_SAVE_DOCUMENT_PGP) {
- BackupHelper.BackupFile pgpBackupFile = BackupHelper.backupFile(this, settings.getBackupLocation(), Constants.BackupType.OPEN_PGP);
-
- if (pgpBackupFile.file != null)
- backupEncryptedWithPGP(pgpBackupFile.file.getUri(), null);
- else
- Toast.makeText(this, pgpBackupFile.errorMessage, Toast.LENGTH_LONG).show();
+ backupEncryptedWithPGP(null, null);
}
} else {
Toast.makeText(this, R.string.backup_toast_no_location, Toast.LENGTH_LONG).show();
@@ -318,11 +435,11 @@ public class BackupActivity extends BaseActivity {
}
}
- private void restoreEntries(String text) {
+ private void restoreEntries(String text, boolean finish) {
ArrayList entries = DatabaseHelper.stringToEntries(text);
if (entries.size() > 0) {
- if (! replace.isChecked()) {
+ if (! swReplace.isChecked()) {
ArrayList currentEntries = DatabaseHelper.loadDatabase(this, encryptionKey);
entries.removeAll(currentEntries);
@@ -332,7 +449,9 @@ public class BackupActivity extends BaseActivity {
if (DatabaseHelper.saveDatabase(this, entries, encryptionKey)) {
reload = true;
Toast.makeText(this, R.string.backup_toast_import_success, Toast.LENGTH_LONG).show();
- finishWithResult();
+
+ if (finish)
+ finishWithResult();
} else {
Toast.makeText(this, R.string.backup_toast_import_save_failed, Toast.LENGTH_LONG).show();
}
@@ -345,9 +464,10 @@ public class BackupActivity extends BaseActivity {
private void doRestorePlain(Uri uri) {
if (Tools.isExternalStorageReadable()) {
- String content = StorageAccessHelper.loadFileString(this, uri);
+ PlainTextRestoreTask task = new PlainTextRestoreTask(this, uri);
+ task.setCallback(this::handleRestoreTaskResult);
- restoreEntries(content);
+ startRestoreTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
@@ -357,15 +477,13 @@ public class BackupActivity extends BaseActivity {
if (Tools.isExternalStorageWritable()) {
ArrayList entries = DatabaseHelper.loadDatabase(this, encryptionKey);
- if (StorageAccessHelper.saveFile(this, uri, DatabaseHelper.entriesToString(entries)))
- Toast.makeText(this, R.string.backup_toast_export_success, Toast.LENGTH_LONG).show();
- else
- Toast.makeText(this, R.string.backup_toast_export_failed, Toast.LENGTH_LONG).show();
+ PlainTextBackupTask task = new PlainTextBackupTask(this, entries, uri);
+ task.setCallback(this::handleBackupTaskResult);
+
+ startBackupTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
-
- finishWithResult();
}
private void backupPlainWithWarning() {
@@ -408,39 +526,10 @@ public class BackupActivity extends BaseActivity {
private void doRestoreCryptWithPassword(Uri uri, String password, boolean old_format) {
if (Tools.isExternalStorageReadable()) {
- boolean success = true;
- String decryptedString = "";
+ EncryptedRestoreTask task = new EncryptedRestoreTask(this, uri, password, old_format);
+ task.setCallback(this::handleRestoreTaskResult);
- try {
- byte[] data = StorageAccessHelper.loadFile(this, uri);
-
- if (old_format) {
- SecretKey key = EncryptionHelper.generateSymmetricKeyFromPassword(password);
- byte[] decrypted = EncryptionHelper.decrypt(key, data);
-
- decryptedString = new String(decrypted, StandardCharsets.UTF_8);
- } else {
- byte[] iterBytes = Arrays.copyOfRange(data, 0, Constants.INT_LENGTH);
- byte[] salt = Arrays.copyOfRange(data, Constants.INT_LENGTH, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH);
- byte[] encrypted = Arrays.copyOfRange(data, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH, data.length);
-
- int iter = ByteBuffer.wrap(iterBytes).getInt();
-
- SecretKey key = EncryptionHelper.generateSymmetricKeyPBKDF2(password, iter, salt);
-
- byte[] decrypted = EncryptionHelper.decrypt(key, encrypted);
- decryptedString = new String(decrypted, StandardCharsets.UTF_8);
- }
- } catch (Exception e) {
- success = false;
- e.printStackTrace();
- }
-
- if (success) {
- restoreEntries(decryptedString);
- } else {
- Toast.makeText(this,R.string.backup_toast_import_decryption_failed, Toast.LENGTH_LONG).show();
- }
+ startRestoreTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
@@ -464,19 +553,15 @@ public class BackupActivity extends BaseActivity {
private void doBackupCryptWithPassword(Uri uri, String password) {
if (Tools.isExternalStorageWritable()) {
+ ArrayList entries = DatabaseHelper.loadDatabase(this, encryptionKey);
- boolean success = BackupHelper.backupToFile(this, uri, password, encryptionKey);
+ EncryptedBackupTask task = new EncryptedBackupTask(this, entries, password, uri);
+ task.setCallback(this::handleBackupTaskResult);
- if (success) {
- Toast.makeText(this, R.string.backup_toast_export_success, Toast.LENGTH_LONG).show();
- } else {
- Toast.makeText(this, R.string.backup_toast_export_failed, Toast.LENGTH_LONG).show();
- }
+ startBackupTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
-
- finishWithResult();
}
/* OpenPGP backup functions */
@@ -485,28 +570,21 @@ public class BackupActivity extends BaseActivity {
if (decryptIntent == null)
decryptIntent = new Intent(OpenPgpApi.ACTION_DECRYPT_VERIFY);
- String input = StorageAccessHelper.loadFileString(this, uri);
+ PGPRestoreTask task = new PGPRestoreTask(this, uri, decryptIntent);
+ task.setCallback(this::handleRestoreTaskResult);
- InputStream is = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
- ByteArrayOutputStream os = new ByteArrayOutputStream();
- OpenPgpApi api = new OpenPgpApi(this, pgpServiceConnection.getService());
- Intent result = api.executeApi(decryptIntent, is, os);
- handleOpenPGPResult(result, os, uri, Constants.INTENT_BACKUP_DECRYPT_PGP);
+ startRestoreTask(task);
}
private void doBackupEncrypted(Uri uri, String data) {
if (Tools.isExternalStorageWritable()) {
- boolean success = StorageAccessHelper.saveFile(this, uri, data);
+ PGPBackupTask task = new PGPBackupTask(this, data, uri);
+ task.setCallback(this::handleBackupTaskResult);
- if (success)
- Toast.makeText(this, R.string.backup_toast_export_success, Toast.LENGTH_LONG).show();
- else
- Toast.makeText(this, R.string.backup_toast_export_failed, Toast.LENGTH_LONG).show();
+ startBackupTask(task);
} else {
Toast.makeText(this, R.string.backup_toast_storage_not_accessible, Toast.LENGTH_LONG).show();
}
-
- finishWithResult();
}
private void backupEncryptedWithPGP(Uri uri, Intent encryptIntent) {
@@ -549,12 +627,12 @@ public class BackupActivity extends BaseActivity {
OpenPgpSignatureResult sigResult = result.getParcelableExtra(OpenPgpApi.RESULT_SIGNATURE);
if (sigResult.getResult() == OpenPgpSignatureResult.RESULT_VALID_KEY_CONFIRMED) {
- restoreEntries(outputStreamToString(os));
+ restoreEntries(outputStreamToString(os), true);
} else {
Toast.makeText(this, R.string.backup_toast_openpgp_not_verified, Toast.LENGTH_LONG).show();
}
} else {
- restoreEntries(outputStreamToString(os));
+ restoreEntries(outputStreamToString(os), true);
}
}
}
@@ -578,4 +656,145 @@ public class BackupActivity extends BaseActivity {
Toast.makeText(this, String.format(getString(R.string.backup_toast_openpgp_error), error.getMessage()), Toast.LENGTH_LONG).show();
}
}
+
+ @Nullable
+ private BackupTaskFragment findBackupTaskFragment() {
+ return (BackupTaskFragment) getFragmentManager().findFragmentByTag(TAG_BACKUP_TASK_FRAGMENT);
+ }
+
+ @Nullable
+ private RestoreTaskFragment findRestoreTaskFragment() {
+ return (RestoreTaskFragment) getFragmentManager().findFragmentByTag(TAG_RESTORE_TASK_FRAGMENT);
+ }
+
+ private void startBackupTask(GenericBackupTask task) {
+ BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
+ RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
+
+ // Don't start a task if we already have an active task running (backup or restore).
+ if ((backupTaskFragment == null || backupTaskFragment.task.isCanceled()) && (restoreTaskFragment == null || restoreTaskFragment.task.isCanceled())) {
+ if (backupTaskFragment == null) {
+ backupTaskFragment = new BackupTaskFragment();
+ getFragmentManager()
+ .beginTransaction()
+ .add(backupTaskFragment, TAG_BACKUP_TASK_FRAGMENT)
+ .commit();
+ }
+
+ backupTaskFragment.startTask(task);
+
+ showBackupProgress(true);
+ }
+ }
+
+ private void startRestoreTask(GenericRestoreTask task) {
+ BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
+ RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
+
+ // Don't start a task if we already have an active task running (backup or restore).
+ if ((backupTaskFragment == null || backupTaskFragment.task.isCanceled()) && (restoreTaskFragment == null || restoreTaskFragment.task.isCanceled())) {
+ if (restoreTaskFragment == null) {
+ restoreTaskFragment = new RestoreTaskFragment();
+ getFragmentManager()
+ .beginTransaction()
+ .add(restoreTaskFragment, TAG_RESTORE_TASK_FRAGMENT)
+ .commit();
+ }
+
+ restoreTaskFragment.startTask(task);
+
+ showRestoreProgress(true);
+ }
+ }
+
+ private void checkBackgroundBackupTask() {
+ BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
+
+ if (backupTaskFragment != null) {
+ if (backupTaskFragment.task.isCanceled()) {
+ // The task was canceled or has finished, so remove the task fragment.
+ getFragmentManager().beginTransaction()
+ .remove(backupTaskFragment)
+ .commit();
+ } else {
+ backupTaskFragment.task.setCallback(this::handleBackupTaskResult);
+ showBackupProgress(true);
+ }
+ }
+
+ }
+
+ private void checkBackgroundRestoreTask() {
+ RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
+
+ if (restoreTaskFragment != null) {
+ if (restoreTaskFragment.task.isCanceled()) {
+ // The task was canceled or has finished, so remove the task fragment.
+ getFragmentManager().beginTransaction()
+ .remove(restoreTaskFragment)
+ .commit();
+ } else {
+ restoreTaskFragment.task.setCallback(this::handleRestoreTaskResult);
+ showRestoreProgress(true);
+ }
+ }
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+
+ // We don't want the task to callback to a dead activity and cause a memory leak, so null it here.
+ BackupTaskFragment backupTaskFragment = findBackupTaskFragment();
+ RestoreTaskFragment restoreTaskFragment = findRestoreTaskFragment();
+
+ if (backupTaskFragment != null)
+ backupTaskFragment.task.setCallback(null);
+
+ if (restoreTaskFragment != null)
+ restoreTaskFragment.task.setCallback(null);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ checkBackgroundBackupTask();
+ checkBackgroundRestoreTask();
+ }
+
+ @Override
+ protected boolean shouldDestroyOnScreenOff() {
+ return allowExit; // Don't destroy the backup activity as long as a backup task is running
+ }
+
+ /** Retained instance fragment to hold a running {@link GenericBackupTask} between configuration changes.*/
+ public static class BackupTaskFragment extends Fragment {
+ GenericBackupTask task;
+
+ public BackupTaskFragment() {
+ super();
+ setRetainInstance(true);
+ }
+
+ public void startTask(@NonNull GenericBackupTask task) {
+ this.task = task;
+ this.task.execute();
+ }
+ }
+
+ /** Retained instance fragment to hold a running {@link GenericRestoreTask} between configuration changes.*/
+ public static class RestoreTaskFragment extends Fragment {
+ GenericRestoreTask task;
+
+ public RestoreTaskFragment() {
+ super();
+ setRetainInstance(true);
+ }
+
+ public void startTask(@NonNull GenericRestoreTask task) {
+ this.task = task;
+ this.task.execute();
+ }
+ }
}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/BaseActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/BaseActivity.java
index 108adca3..1a3c7a71 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/BaseActivity.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/BaseActivity.java
@@ -43,15 +43,9 @@ public abstract class BaseActivity extends ThemedActivity {
@Override
protected void onDestroy() {
unregisterReceiver(screenOffReceiver);
-
super.onDestroy();
}
- private void destroyIfNotMain() {
- if (getClass() != MainActivity.class)
- finish();
- }
-
public void setBroadcastCallback(BroadcastReceivedCallback cb) {
this.broadcastReceivedCallback = cb;
}
@@ -62,14 +56,20 @@ public abstract class BaseActivity extends ThemedActivity {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
- if (broadcastReceivedCallback != null)
+ if (broadcastReceivedCallback != null) {
broadcastReceivedCallback.onReceivedScreenOff();
-
- destroyIfNotMain();
+ }
+ if (shouldDestroyOnScreenOff()) {
+ finish();
+ }
}
}
}
+ protected boolean shouldDestroyOnScreenOff() {
+ return true;
+ }
+
interface BroadcastReceivedCallback {
void onReceivedScreenOff();
}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/IntroScreenActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/IntroScreenActivity.java
index aa26e08c..793b2b20 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/IntroScreenActivity.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/IntroScreenActivity.java
@@ -42,6 +42,7 @@ import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
+import android.widget.Switch;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -66,6 +67,7 @@ public class IntroScreenActivity extends IntroActivity {
private EncryptionFragment encryptionFragment;
private AuthenticationFragment authenticationFragment;
+ private AndroidSyncFragment androidSyncFragment;
private void saveSettings() {
Constants.EncryptionType encryptionType = encryptionFragment.getEncryptionType();
@@ -73,6 +75,7 @@ public class IntroScreenActivity extends IntroActivity {
settings.setEncryption(encryptionType);
settings.setAuthMethod(authMethod);
+ settings.setAndroidBackupServiceEnabled(androidSyncFragment.getSyncEnabled());
if (authMethod == Constants.AuthMethod.PASSWORD || authMethod == Constants.AuthMethod.PIN) {
String password = authenticationFragment.getPassword();
@@ -89,6 +92,7 @@ public class IntroScreenActivity extends IntroActivity {
encryptionFragment = new EncryptionFragment();
authenticationFragment = new AuthenticationFragment();
+ androidSyncFragment = new AndroidSyncFragment(encryptionFragment);
encryptionFragment.setEncryptionChangedCallback(newEncryptionType -> authenticationFragment.updateEncryptionType(newEncryptionType));
@@ -121,6 +125,13 @@ public class IntroScreenActivity extends IntroActivity {
.build()
);
+ addSlide(new FragmentSlide.Builder()
+ .background(R.color.colorPrimary)
+ .backgroundDark(R.color.colorPrimaryDark)
+ .fragment(androidSyncFragment)
+ .build()
+ );
+
addSlide(new SimpleSlide.Builder()
.title(R.string.intro_slide4_title)
.description(R.string.intro_slide4_desc)
@@ -130,6 +141,7 @@ public class IntroScreenActivity extends IntroActivity {
.build()
);
+
addOnNavigationBlockedListener((position, direction) -> {
if (position == 2)
authenticationFragment.flashWarning();
@@ -138,7 +150,7 @@ public class IntroScreenActivity extends IntroActivity {
addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
- if (position == 3)
+ if (position == getSlides().size() - 1)
saveSettings();
}
@@ -223,6 +235,39 @@ public class IntroScreenActivity extends IntroActivity {
}
}
+ public static class AndroidSyncFragment extends SlideFragment {
+ private Switch introAndroidSync;
+ private EncryptionFragment encryptionFragment;
+
+ public AndroidSyncFragment(EncryptionFragment encryptionFragment) {
+ this.encryptionFragment = encryptionFragment;
+ }
+
+ public boolean getSyncEnabled()
+ {
+ return introAndroidSync.isChecked();
+ }
+
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View root = inflater.inflate(R.layout.component_intro_android_sync, container, false);
+
+ introAndroidSync = root.findViewById(R.id.introAndroidSync);
+ introAndroidSync.setOnCheckedChangeListener((compoundButton, b) -> {
+ compoundButton.setText( b ?
+ R.string.settings_toast_android_sync_enabled :
+ R.string.settings_toast_android_sync_disabled
+ );
+ });
+
+ introAndroidSync.setChecked(encryptionFragment.getEncryptionType() != Constants.EncryptionType.KEYSTORE);
+ introAndroidSync.setEnabled(encryptionFragment.getEncryptionType() != Constants.EncryptionType.KEYSTORE);
+
+ return root;
+ }
+ }
+
public static class AuthenticationFragment extends SlideFragment implements TextView.OnEditorActionListener {
private Constants.EncryptionType encryptionType = Constants.EncryptionType.KEYSTORE;
@@ -232,6 +277,7 @@ public class IntroScreenActivity extends IntroActivity {
private String lengthWarning = "";
private String noPasswordWarning = "";
private String confirmPasswordWarning = "";
+ private String passwordMismatchWarning = "";
private TextView desc = null;
private Spinner selection = null;
@@ -389,6 +435,7 @@ public class IntroScreenActivity extends IntroActivity {
lengthWarning = getString(R.string.settings_label_short_password, minLength);
noPasswordWarning = getString(R.string.intro_slide3_warn_no_password);
confirmPasswordWarning = getString(R.string.intro_slide3_warn_confirm_password);
+ passwordMismatchWarning = getString(R.string.intro_slide3_warn_password_mismatch);
focusOnPasswordInput();
}
@@ -415,6 +462,7 @@ public class IntroScreenActivity extends IntroActivity {
lengthWarning = getString(R.string.settings_label_short_pin, minLength);
noPasswordWarning = getString(R.string.intro_slide3_warn_no_pin);
confirmPasswordWarning = getString(R.string.intro_slide3_warn_confirm_pin);
+ passwordMismatchWarning = getString(R.string.intro_slide3_warn_pin_mismatch);
focusOnPasswordInput();
}
@@ -479,6 +527,9 @@ public class IntroScreenActivity extends IntroActivity {
if (! confirm.isEmpty() && confirm.equals(password)) {
hideWarning();
return true;
+ } else if (! confirm.isEmpty() && ! confirm.equals(password)) {
+ updateWarning(passwordMismatchWarning);
+ return false;
} else {
updateWarning(confirmPasswordWarning);
return false;
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java
index e4e96dd7..82e1ff7a 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/MainActivity.java
@@ -34,6 +34,8 @@ import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.preference.PreferenceManager;
+
+import androidx.annotation.Nullable;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.appcompat.app.ActionBarDrawerToggle;
@@ -56,6 +58,7 @@ import android.widget.AdapterView;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.ProgressBar;
+import android.widget.TextView;
import android.widget.Toast;
import com.google.zxing.integration.android.IntentIntegrator;
@@ -114,6 +117,8 @@ public class MainActivity extends BaseActivity
private String filterString;
private CountDownTimer countDownTimer;
+ private ProgressBar progressBar;
+ private TextView emptyListView;
// QR code scanning
private void scanQRCode(){
@@ -245,8 +250,8 @@ public class MainActivity extends BaseActivity
}
});
- final ProgressBar progressBar = findViewById(R.id.progressBar);
- progressBar.setVisibility(settings.isHideGlobalTimeoutEnabled() ? View.GONE : View.VISIBLE);
+ progressBar = findViewById(R.id.progressBar);
+ emptyListView = findViewById(R.id.emptyListView);
RecyclerView recList = findViewById(R.id.cardList);
recList.setHasFixedSize(true);
@@ -256,6 +261,43 @@ public class MainActivity extends BaseActivity
tagsDrawerAdapter = new TagsAdapter(this, new HashMap());
adapter = new EntriesCardAdapter(this, tagsDrawerAdapter);
+ adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
+ @Override
+ public void onChanged() {
+ super.onChanged();
+ hideProgressBar();
+ }
+
+ @Override
+ public void onItemRangeChanged(int positionStart, int itemCount) {
+ super.onItemRangeChanged(positionStart, itemCount);
+ hideProgressBar();
+ }
+
+ @Override
+ public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) {
+ super.onItemRangeChanged(positionStart, itemCount, payload);
+ hideProgressBar();
+ }
+
+ @Override
+ public void onItemRangeInserted(int positionStart, int itemCount) {
+ super.onItemRangeInserted(positionStart, itemCount);
+ hideProgressBar();
+ }
+
+ @Override
+ public void onItemRangeRemoved(int positionStart, int itemCount) {
+ super.onItemRangeRemoved(positionStart, itemCount);
+ hideProgressBar();
+ }
+
+ @Override
+ public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
+ super.onItemRangeMoved(fromPosition, toPosition, itemCount);
+ hideProgressBar();
+ }
+ });
if (savedInstanceState != null) {
byte[] encKey = savedInstanceState.getByteArray("encKey");
@@ -586,6 +628,10 @@ public class MainActivity extends BaseActivity
}
});
+ if (settings.isFocusSearchOnStartEnabled()) {
+ searchItem.expandActionView();
+ }
+
return true;
}
@@ -894,4 +940,20 @@ public class MainActivity extends BaseActivity
settings.unregisterPreferenceChangeListener(this);
super.onDestroy();
}
-}
\ No newline at end of file
+
+ /**
+ * This function will hide the progress bar if the token list is empty along with
+ * showing a view which has instruction on how to add the tokens
+ * */
+ private void hideProgressBar(){
+ int itemCount = adapter.getItemCount();
+ progressBar.setVisibility((settings.isHideGlobalTimeoutEnabled() || itemCount <= 0) ? View.GONE : View.VISIBLE);
+ emptyListView.setVisibility(itemCount > 0 ? View.GONE : View.VISIBLE);
+
+ }
+
+ @Override
+ protected boolean shouldDestroyOnScreenOff() {
+ return false;
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Activities/SettingsActivity.java b/app/src/main/java/org/shadowice/flocke/andotp/Activities/SettingsActivity.java
index 9ee85cfa..236bb05d 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Activities/SettingsActivity.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Activities/SettingsActivity.java
@@ -40,6 +40,7 @@ import android.preference.PreferenceManager;
import androidx.appcompat.widget.Toolbar;
import android.provider.DocumentsContract;
+import android.util.Log;
import android.view.ViewStub;
import android.widget.Toast;
@@ -168,6 +169,13 @@ public class SettingsActivity extends BaseActivity
if (fragment.useAndroidSync != null)
fragment.useAndroidSync.setEnabled(true);
}
+ } else if(key.equals(getString(R.string.settings_key_enable_android_backup_service)))
+ {
+ Log.d(SettingsActivity.class.getSimpleName(), "onSharedPreferenceChanged called modifying settings_key_enable_android_backup_service service is now: " +
+ (settings.getAndroidBackupServiceEnabled() ? "enabled" : "disabled"));
+
+ int message = settings.getAndroidBackupServiceEnabled() ? R.string.settings_toast_android_sync_enabled : R.string.settings_toast_android_sync_disabled;
+ Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
fragment.updateAutoBackup();
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Preferences/CredentialsPreference.java b/app/src/main/java/org/shadowice/flocke/andotp/Preferences/CredentialsPreference.java
index 00eeddbb..b53445de 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Preferences/CredentialsPreference.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Preferences/CredentialsPreference.java
@@ -30,7 +30,6 @@ import android.preference.DialogPreference;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
-import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
@@ -69,7 +68,7 @@ public class CredentialsPreference extends DialogPreference
boolean testEncryptionChange(byte[] newKey);
}
- private List entries;
+ private final List entries;
private static final List entryValues = Arrays.asList(
AuthMethod.NONE,
AuthMethod.PASSWORD,
@@ -79,7 +78,7 @@ public class CredentialsPreference extends DialogPreference
private int minLength = 0;
- private Settings settings;
+ private final Settings settings;
private AuthMethod value = AuthMethod.NONE;
private EncryptionChangeCallback encryptionChangeCallback = null;
@@ -233,77 +232,65 @@ public class CredentialsPreference extends DialogPreference
if (password.length() >= minLength) {
toShortWarning.setVisibility(View.GONE);
-
String confirm = passwordConfirm.getEditableText().toString();
- if (!password.isEmpty() && !confirm.isEmpty() && password.equals(confirm)) {
- btnSave.setEnabled(true);
- } else {
- btnSave.setEnabled(false);
- }
+ boolean canSave = !password.isEmpty() && !confirm.isEmpty() && password.equals(confirm);
+ btnSave.setEnabled(canSave);
} else {
toShortWarning.setVisibility(View.VISIBLE);
}
}
private void updateLayout() {
- if (value == AuthMethod.NONE) {
+ if (value == AuthMethod.NONE || value == AuthMethod.DEVICE) {
credentialsLayout.setVisibility(View.GONE);
-
- if (getDialog() != null)
- UIHelper.hideKeyboard(getContext(), getDialog().getCurrentFocus());
-
- btnSave.setEnabled(true);
- } else if (value == AuthMethod.PASSWORD) {
- credentialsLayout.setVisibility(View.VISIBLE);
-
- passwordLayout.setHint(getContext().getString(R.string.settings_hint_password));
- passwordConfirm.setHint(R.string.settings_hint_password_confirm);
-
- ConfirmedPasswordTransformationHelper.setup(passwordLayout, passwordInput, passwordConfirm);
-
- passwordInput.setTransformationMethod(new PasswordTransformationMethod());
- passwordConfirm.setTransformationMethod(new PasswordTransformationMethod());
-
- minLength = Constants.AUTH_MIN_PASSWORD_LENGTH;
- toShortWarning.setText(getContext().getString(R.string.settings_label_short_password, minLength));
-
- passwordInput.requestFocus();
- UIHelper.showKeyboard(getContext(), passwordInput);
-
- btnSave.setEnabled(false);
- } else if (value == AuthMethod.PIN) {
- credentialsLayout.setVisibility(View.VISIBLE);
-
- passwordLayout.setHint(getContext().getString(R.string.settings_hint_pin));
- passwordConfirm.setHint(R.string.settings_hint_pin_confirm);
-
- passwordInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
- passwordConfirm.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
-
- ConfirmedPasswordTransformationHelper.setup(passwordLayout, passwordInput, passwordConfirm);
-
- minLength = Constants.AUTH_MIN_PIN_LENGTH;
- toShortWarning.setText(getContext().getString(R.string.settings_label_short_pin, minLength));
-
- passwordInput.requestFocus();
- UIHelper.showKeyboard(getContext(), passwordInput);
-
- btnSave.setEnabled(false);
- } else if (value == AuthMethod.DEVICE) {
- credentialsLayout.setVisibility(View.GONE);
-
- if (getDialog() != null)
- UIHelper.hideKeyboard(getContext(), getDialog().getCurrentFocus());
-
+ if (getDialog() != null) {
+ UIHelper.hideKeyboard(getContext(), passwordInput);
+ }
btnSave.setEnabled(true);
+ } else if (value == AuthMethod.PASSWORD || value == AuthMethod.PIN) {
+ prepareAuthMethodInputFields();
}
}
+ private void prepareAuthMethodInputFields() {
+ if (value != AuthMethod.PIN && value != AuthMethod.PASSWORD) {
+ return;
+ }
+ boolean isPassword = value == AuthMethod.PASSWORD;
+
+ credentialsLayout.setVisibility(View.VISIBLE);
+ int layoutHintRes = isPassword ? R.string.settings_hint_password : R.string.settings_hint_pin;
+ passwordLayout.setHint(getContext().getString(layoutHintRes));
+ int confirmHintRes = isPassword ? R.string.settings_hint_password_confirm : R.string.settings_hint_pin_confirm;
+ passwordConfirm.setHint(confirmHintRes);
+
+ int inputType = isPassword ?
+ (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) :
+ (InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
+ passwordInput.setInputType(inputType);
+ passwordConfirm.setInputType(inputType);
+ ConfirmedPasswordTransformationHelper.setup(passwordLayout, passwordInput, passwordConfirm);
+
+ minLength = isPassword ? Constants.AUTH_MIN_PASSWORD_LENGTH : Constants.AUTH_MIN_PIN_LENGTH;
+ int shortWarningRes = isPassword ? R.string.settings_label_short_password : R.string.settings_label_short_pin;
+ toShortWarning.setText(getContext().getString(shortWarningRes, minLength));
+
+ passwordInput.requestFocus();
+ UIHelper.showKeyboard(getContext(), passwordInput);
+ btnSave.setEnabled(false);
+ }
+
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
value = entryValues.get(position);
updateLayout();
+ clearInputFields();
+ }
+
+ private void clearInputFields() {
+ passwordInput.setText(null);
+ passwordConfirm.setText(null);
}
@Override
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/AuthenticationTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/AuthenticationTask.java
new file mode 100644
index 00000000..13c2f069
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/AuthenticationTask.java
@@ -0,0 +1,114 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.util.Base64;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.shadowice.flocke.andotp.Tasks.AuthenticationTask.Result;
+import org.shadowice.flocke.andotp.Utilities.Constants.AuthMethod;
+import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
+import org.shadowice.flocke.andotp.Utilities.EncryptionHelper.PBKDF2Credentials;
+import org.shadowice.flocke.andotp.Utilities.Settings;
+
+import java.security.NoSuchAlgorithmException;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Arrays;
+
+public class AuthenticationTask extends UiBasedBackgroundTask {
+
+ private final Settings settings;
+
+ private final boolean isAuthUpgrade;
+ private final String existingAuthCredentials;
+ private final String plainPassword;
+
+ /**
+ * @param context Context to be used to query settings (the application Context will be used to avoid memory leaks).
+ * @param isAuthUpgrade true if this is an authentication upgrade and new credentials should be saved, false if this is just confirmation.
+ * @param existingAuthCredentials The existing hashed authentication credentials that we have stored.
+ * @param plainPassword The plaintext user-entered password to check authentication with. */
+ public AuthenticationTask(Context context, boolean isAuthUpgrade, String existingAuthCredentials, String plainPassword) {
+ super(Result.failure());
+ Context applicationContext = context.getApplicationContext();
+ this.settings = new Settings(applicationContext);
+
+ this.isAuthUpgrade = isAuthUpgrade;
+ this.existingAuthCredentials = existingAuthCredentials;
+ this.plainPassword = plainPassword;
+ }
+
+ @Override
+ @NonNull
+ protected Result doInBackground() {
+ if (isAuthUpgrade) {
+ return upgradeAuthentication();
+ } else {
+ return confirmAuthentication();
+ }
+ }
+
+ @NonNull
+ private Result upgradeAuthentication() {
+ String hashedPassword = new String(Hex.encodeHex(DigestUtils.sha256(plainPassword)));
+ if (!hashedPassword.equals(existingAuthCredentials))
+ return Result.failure();
+
+ byte[] key = settings.setAuthCredentials(plainPassword);
+
+ AuthMethod authMethod = settings.getAuthMethod();
+ if (authMethod == AuthMethod.PASSWORD)
+ settings.removeAuthPasswordHash();
+ else if (authMethod == AuthMethod.PIN)
+ settings.removeAuthPINHash();
+
+ if (key == null)
+ return Result.upgradeFailure();
+ else
+ return Result.success(key);
+ }
+
+ @NonNull
+ private Result confirmAuthentication() {
+ try {
+ PBKDF2Credentials credentials = EncryptionHelper.generatePBKDF2Credentials(plainPassword, settings.getSalt(), settings.getIterations());
+ byte[] passwordArray = Base64.decode(existingAuthCredentials, Base64.URL_SAFE);
+
+ if (Arrays.equals(passwordArray, credentials.password)) {
+ return Result.success(credentials.key);
+ }
+ return Result.failure();
+ } catch (NoSuchAlgorithmException | InvalidKeySpecException | IllegalArgumentException e) {
+ Log.e("AuthenticationTask", "Problem decoding password", e);
+ return Result.failure();
+ }
+ }
+
+ public static class Result {
+ @Nullable
+ public final byte[] encryptionKey;
+ public final boolean authUpgradeFailed;
+
+ public Result(@Nullable byte[] encryptionKey, boolean authUpgradeFailed) {
+ this.encryptionKey = encryptionKey;
+ this.authUpgradeFailed = authUpgradeFailed;
+ }
+
+ public static Result success(byte[] encryptionKey) {
+ return new Result(encryptionKey, false);
+ }
+
+ public static Result upgradeFailure() {
+ return new Result(null, true);
+ }
+
+ public static Result failure() {
+ return new Result(null, false);
+ }
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/EncryptedBackupTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/EncryptedBackupTask.java
new file mode 100644
index 00000000..f810a34d
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/EncryptedBackupTask.java
@@ -0,0 +1,37 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.shadowice.flocke.andotp.Database.Entry;
+import org.shadowice.flocke.andotp.Utilities.BackupHelper;
+import org.shadowice.flocke.andotp.Utilities.Constants;
+import org.shadowice.flocke.andotp.Utilities.DatabaseHelper;
+
+import java.util.ArrayList;
+
+public class EncryptedBackupTask extends GenericBackupTask {
+ private final String password;
+ private final ArrayList entries;
+
+ public EncryptedBackupTask(Context context, ArrayList entries, String password, @Nullable Uri uri) {
+ super(context, uri);
+ this.entries = entries;
+ this.password = password;
+ }
+
+ @Override
+ @NonNull
+ protected Constants.BackupType getBackupType() {
+ return Constants.BackupType.ENCRYPTED;
+ }
+
+ @Override
+ protected boolean doBackup() {
+ String payload = DatabaseHelper.entriesToString(entries);
+ return BackupHelper.backupToFile(applicationContext, uri, password, payload);
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/EncryptedRestoreTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/EncryptedRestoreTask.java
new file mode 100644
index 00000000..bcd947e1
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/EncryptedRestoreTask.java
@@ -0,0 +1,66 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+
+import org.shadowice.flocke.andotp.R;
+import org.shadowice.flocke.andotp.Utilities.Constants;
+import org.shadowice.flocke.andotp.Utilities.EncryptionHelper;
+import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+import javax.crypto.SecretKey;
+
+public class EncryptedRestoreTask extends GenericRestoreTask {
+ private final String password;
+ private final boolean oldFormat;
+
+ public EncryptedRestoreTask(Context context, Uri uri, String password, boolean oldFormat) {
+ super(context, uri);
+ this.password = password;
+ this.oldFormat = oldFormat;
+ }
+
+ @Override
+ @NonNull
+ protected RestoreTaskResult doInBackground() {
+ boolean success = true;
+ String decryptedString = "";
+
+ try {
+ byte[] data = StorageAccessHelper.loadFile(applicationContext, uri);
+
+ if (oldFormat) {
+ SecretKey key = EncryptionHelper.generateSymmetricKeyFromPassword(password);
+ byte[] decrypted = EncryptionHelper.decrypt(key, data);
+
+ decryptedString = new String(decrypted, StandardCharsets.UTF_8);
+ } else {
+ byte[] iterBytes = Arrays.copyOfRange(data, 0, Constants.INT_LENGTH);
+ byte[] salt = Arrays.copyOfRange(data, Constants.INT_LENGTH, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH);
+ byte[] encrypted = Arrays.copyOfRange(data, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH, data.length);
+
+ int iter = ByteBuffer.wrap(iterBytes).getInt();
+
+ SecretKey key = EncryptionHelper.generateSymmetricKeyPBKDF2(password, iter, salt);
+
+ byte[] decrypted = EncryptionHelper.decrypt(key, encrypted);
+ decryptedString = new String(decrypted, StandardCharsets.UTF_8);
+ }
+ } catch (Exception e) {
+ success = false;
+ e.printStackTrace();
+ }
+
+ if (success) {
+ return RestoreTaskResult.success(decryptedString);
+ } else {
+ return RestoreTaskResult.failure(R.string.backup_toast_import_decryption_failed);
+ }
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/GenericBackupTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/GenericBackupTask.java
new file mode 100644
index 00000000..3d6f756b
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/GenericBackupTask.java
@@ -0,0 +1,72 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.shadowice.flocke.andotp.R;
+import org.shadowice.flocke.andotp.Utilities.BackupHelper;
+import org.shadowice.flocke.andotp.Utilities.Constants;
+import org.shadowice.flocke.andotp.Utilities.Settings;
+
+public abstract class GenericBackupTask extends UiBasedBackgroundTask {
+ protected final Context applicationContext;
+ protected final Settings settings;
+ protected final Constants.BackupType type;
+ protected Uri uri;
+
+ public GenericBackupTask(Context context, @Nullable Uri uri) {
+ super(BackupTaskResult.failure());
+
+ this.applicationContext = context.getApplicationContext();
+ this.settings = new Settings(applicationContext);
+
+ this.type = getBackupType();
+ this.uri = uri;
+ }
+
+ @Override
+ @NonNull
+ protected BackupTaskResult doInBackground() {
+ if (uri == null) {
+ BackupHelper.BackupFile backupFile = BackupHelper.backupFile(applicationContext, settings.getBackupLocation(), type);
+
+ if (backupFile.file == null)
+ return new BackupTaskResult(false, backupFile.errorMessage);
+
+ uri = backupFile.file.getUri();
+ }
+
+ boolean success = doBackup();
+
+ if (success)
+ return BackupTaskResult.success();
+ else
+ return BackupTaskResult.failure();
+ }
+
+ @NonNull
+ protected abstract Constants.BackupType getBackupType();
+ protected abstract boolean doBackup();
+
+
+ public static class BackupTaskResult {
+ public final boolean success;
+ public final int messageId;
+
+ public BackupTaskResult(boolean success, int messageId) {
+ this.success = success;
+ this.messageId = messageId;
+ }
+
+ public static BackupTaskResult success() {
+ return new BackupTaskResult(true, R.string.backup_toast_export_success);
+ }
+
+ public static BackupTaskResult failure() {
+ return new BackupTaskResult(false, R.string.backup_toast_export_failed);
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/GenericRestoreTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/GenericRestoreTask.java
new file mode 100644
index 00000000..c7b094c8
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/GenericRestoreTask.java
@@ -0,0 +1,63 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.shadowice.flocke.andotp.R;
+import org.shadowice.flocke.andotp.Utilities.Settings;
+
+public abstract class GenericRestoreTask extends UiBasedBackgroundTask {
+ protected final Context applicationContext;
+ protected final Settings settings;
+ protected Uri uri;
+
+ public GenericRestoreTask(Context context, @Nullable Uri uri) {
+ super(GenericRestoreTask.RestoreTaskResult.failure(R.string.backup_toast_import_failed));
+
+ this.applicationContext = context.getApplicationContext();
+ this.settings = new Settings(applicationContext);
+
+ this.uri = uri;
+ }
+
+ @Override
+ @NonNull
+ protected abstract RestoreTaskResult doInBackground();
+
+ public static class RestoreTaskResult {
+ public final boolean success;
+ public final String payload;
+ public final int messageId;
+
+ public boolean isPGP = false;
+ public Intent decryptIntent = null;
+ public Uri uri = null;
+
+ public RestoreTaskResult(boolean success, String payload, int messageId) {
+ this.success = success;
+ this.payload = payload;
+ this.messageId = messageId;
+ }
+
+ public RestoreTaskResult(boolean success, String payload, int messageId, boolean isPGP, Intent decryptIntent, Uri uri) {
+ this.success = success;
+ this.payload = payload;
+ this.messageId = messageId;
+ this.isPGP = isPGP;
+ this.decryptIntent = decryptIntent;
+ this.uri = uri;
+ }
+
+ public static RestoreTaskResult success(String payload) {
+ return new RestoreTaskResult(true, payload, 0);
+ }
+
+ public static RestoreTaskResult failure(int messageId) {
+ return new RestoreTaskResult(false, null, messageId);
+ }
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PGPBackupTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PGPBackupTask.java
new file mode 100644
index 00000000..1d900614
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PGPBackupTask.java
@@ -0,0 +1,30 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.shadowice.flocke.andotp.Utilities.Constants;
+import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
+
+public class PGPBackupTask extends GenericBackupTask {
+ private final String payload;
+
+ public PGPBackupTask(Context context, String payload, @Nullable Uri uri) {
+ super(context, uri);
+ this.payload = payload;
+ }
+
+ @Override
+ @NonNull
+ protected Constants.BackupType getBackupType() {
+ return Constants.BackupType.OPEN_PGP;
+ }
+
+ @Override
+ protected boolean doBackup() {
+ return StorageAccessHelper.saveFile(applicationContext, uri, payload);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PGPRestoreTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PGPRestoreTask.java
new file mode 100644
index 00000000..250a861f
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PGPRestoreTask.java
@@ -0,0 +1,26 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+
+import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
+
+public class PGPRestoreTask extends GenericRestoreTask {
+ private final Intent decryptIntent;
+
+ public PGPRestoreTask(Context context, Uri uri, Intent decryptIntent) {
+ super(context, uri);
+ this.decryptIntent = decryptIntent;
+ }
+
+ @Override
+ @NonNull
+ protected RestoreTaskResult doInBackground() {
+ String data = StorageAccessHelper.loadFileString(applicationContext, uri);
+
+ return new RestoreTaskResult(true, data, 0, true, decryptIntent, uri);
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PlainTextBackupTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PlainTextBackupTask.java
new file mode 100644
index 00000000..c4cab579
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PlainTextBackupTask.java
@@ -0,0 +1,35 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import org.shadowice.flocke.andotp.Database.Entry;
+import org.shadowice.flocke.andotp.Utilities.Constants;
+import org.shadowice.flocke.andotp.Utilities.DatabaseHelper;
+import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
+
+import java.util.ArrayList;
+
+public class PlainTextBackupTask extends GenericBackupTask {
+ private final ArrayList entries;
+
+ public PlainTextBackupTask(Context context, ArrayList entries, @Nullable Uri uri) {
+ super(context, uri);
+ this.entries = entries;
+ }
+
+ @Override
+ @NonNull
+ protected Constants.BackupType getBackupType() {
+ return Constants.BackupType.PLAIN_TEXT;
+ }
+
+ @Override
+ protected boolean doBackup() {
+ String payload = DatabaseHelper.entriesToString(entries);
+ return StorageAccessHelper.saveFile(applicationContext, uri, payload);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PlainTextRestoreTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PlainTextRestoreTask.java
new file mode 100644
index 00000000..200b9ac4
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/PlainTextRestoreTask.java
@@ -0,0 +1,21 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.annotation.NonNull;
+
+import org.shadowice.flocke.andotp.Utilities.StorageAccessHelper;
+
+public class PlainTextRestoreTask extends GenericRestoreTask {
+ public PlainTextRestoreTask(Context context, Uri uri) {
+ super(context, uri);
+ }
+
+ @Override
+ @NonNull
+ protected RestoreTaskResult doInBackground() {
+ String data = StorageAccessHelper.loadFileString(applicationContext, uri);
+ return RestoreTaskResult.success(data);
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Tasks/UiBasedBackgroundTask.java b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/UiBasedBackgroundTask.java
new file mode 100644
index 00000000..4293eb5a
--- /dev/null
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Tasks/UiBasedBackgroundTask.java
@@ -0,0 +1,109 @@
+package org.shadowice.flocke.andotp.Tasks;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.util.Log;
+
+import androidx.annotation.AnyThread;
+import androidx.annotation.MainThread;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/** Encapsulates a background task that needs to communicate back to the UI (on the main thread) to
+ * provide a result. */
+public abstract class UiBasedBackgroundTask {
+
+ private final Result failedResult;
+ private final ExecutorService executor;
+ private final Handler mainThreadHandler;
+
+ private final Object callbackLock = new Object();
+ @Nullable
+ private UiCallback callback;
+ @Nullable
+ private Result awaitedResult;
+
+ private volatile boolean isCanceled = false;
+
+ /** @param failedResult The result to return if the task fails (throws an exception or returns null). */
+ public UiBasedBackgroundTask(@NonNull Result failedResult) {
+ this.failedResult = failedResult;
+ this.executor = Executors.newSingleThreadExecutor();
+ this.mainThreadHandler = new Handler(Looper.getMainLooper());
+ }
+
+ /** @param callback If null, any results which may arrive from a currently executing task will
+ * be stored until a new callback is set. */
+ public void setCallback(@Nullable UiCallback callback) {
+ synchronized (callbackLock) {
+ // Don't bother doing anything if the task was canceled.
+ if (isCanceled()) {
+ return;
+ }
+ this.callback = callback;
+ // If we have an awaited result and are setting a new callback, publish the result immediately.
+ if (awaitedResult != null && callback != null) {
+ emitResultOnMainThread(callback, awaitedResult);
+ }
+ }
+ }
+
+ private void emitResultOnMainThread(@NonNull UiCallback callback, @NonNull Result result) {
+ mainThreadHandler.post(() -> callback.onResult(result));
+ this.callback = null;
+ this.awaitedResult = null;
+ }
+
+ /** Executed the task on a background thread. Safe to call from the main thread. */
+ @AnyThread
+ public void execute() {
+ executor.execute(this::runTask);
+ }
+
+ private void runTask() {
+ Result result = failedResult;
+ try {
+ result = doInBackground();
+ } catch (Exception e) {
+ Log.e("UiBasedBackgroundTask", "Problem running background task", e);
+ }
+
+ synchronized (callbackLock) {
+ // Don't bother issuing callback or storing result if this task is canceled.
+ if (isCanceled()) {
+ return;
+ }
+ if (callback != null) {
+ emitResultOnMainThread(callback, result);
+ } else {
+ awaitedResult = result;
+ }
+ }
+ }
+
+ /** Work to be done in a background thread.
+ * @return Return the result from this task's execution.
+ * @throws Exception If an Exception is thrown from this task's execution, it will be logged
+ * and the provided default Result will be returned. */
+ @NonNull
+ protected abstract Result doInBackground() throws Exception;
+
+ @AnyThread
+ public boolean isCanceled() {
+ return isCanceled;
+ }
+
+ @AnyThread
+ public void cancel() {
+ isCanceled = true;
+ }
+
+ @FunctionalInterface
+ public interface UiCallback {
+ @MainThread
+ void onResult(@NonNull Result result);
+ }
+}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupAgent.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupAgent.java
index ead9e95f..9d154eb9 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupAgent.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupAgent.java
@@ -29,6 +29,8 @@ import android.app.backup.BackupDataOutput;
import android.app.backup.FileBackupHelper;
import android.app.backup.SharedPreferencesBackupHelper;
import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
import java.io.IOException;
@@ -44,19 +46,29 @@ public class BackupAgent extends BackupAgentHelper {
@Override
public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException {
Settings settings = new Settings(this);
+ StringBuilder stringBuilder = new StringBuilder("onBackup called with the backup service set to ");
+ stringBuilder.append(settings.getAndroidBackupServiceEnabled() ? "enabled" : "disabled");
if(settings.getAndroidBackupServiceEnabled()) {
synchronized (DatabaseHelper.DatabaseFileLock) {
+ stringBuilder.append(" calling parent onBackup");
super.onBackup(oldState, data, newState);
}
}
+ Log.d(BackupAgent.class.getSimpleName(), stringBuilder.toString());
}
@Override
public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException {
+ Settings settings = new Settings(this);
+ StringBuilder stringBuilder = new StringBuilder("onRestore called with the backup service set to ");
+ stringBuilder.append(settings.getAndroidBackupServiceEnabled() ? "enabled" : "disabled");
+
synchronized (DatabaseHelper.DatabaseFileLock) {
+ stringBuilder.append(" but restore happens regardless, calling parent onRestore");
super.onRestore(data, appVersionCode, newState);
}
+ Log.d(BackupAgent.class.getSimpleName(), stringBuilder.toString());
}
@Override
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupHelper.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupHelper.java
index ade1bcc8..f6377303 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupHelper.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/BackupHelper.java
@@ -101,11 +101,17 @@ public class BackupHelper {
return Constants.BackupType.UNAVAILABLE;
}
- public static boolean backupToFile(Context context, Uri uri, String password, SecretKey encryptionKey)
- {
+ public static boolean backupToFile(Context context, Uri uri, String password, SecretKey encryptionKey) {
ArrayList entries = DatabaseHelper.loadDatabase(context, encryptionKey);
String plain = DatabaseHelper.entriesToString(entries);
+ return backupToFile(context, uri, password, plain);
+ }
+
+ public static boolean backupToFile(Context context, Uri uri, String password, String plain)
+ {
+ boolean success = true;
+
try {
int iter = EncryptionHelper.generateRandomIterations();
byte[] salt = EncryptionHelper.generateRandom(Constants.ENCRYPTION_IV_LENGTH);
@@ -120,12 +126,12 @@ public class BackupHelper {
System.arraycopy(salt, 0, data, Constants.INT_LENGTH, Constants.ENCRYPTION_IV_LENGTH);
System.arraycopy(encrypted, 0, data, Constants.INT_LENGTH + Constants.ENCRYPTION_IV_LENGTH, encrypted.length);
- StorageAccessHelper.saveFile(context, uri, data);
+ success = StorageAccessHelper.saveFile(context, uri, data);
} catch (Exception e) {
e.printStackTrace();
- return false;
+ success = false;
}
- return true;
+ return success;
}
}
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java
index dd27bb50..7c13a172 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/EntryThumbnail.java
@@ -79,6 +79,7 @@ public class EntryThumbnail {
AirBNB(R.drawable.thumb_airbnb),
Airbrake(R.drawable.thumb_airbrake),
AirTable(R.drawable.thumb_airtable),
+ AirVPN(R.drawable.thumb_airvpn),
AllegroPl(R.drawable.thumb_allegropl),
Alwaysdata(R.drawable.thumb_alwaysdata),
Amazon(R.drawable.thumb_amazon),
@@ -86,16 +87,19 @@ public class EntryThumbnail {
AngelList(R.drawable.thumb_angellist),
AnimeBytes(R.drawable.thumb_animebytes),
Anonaddy(R.drawable.thumb_anonaddy),
+ AnyDesk(R.drawable.thumb_anydesk),
Apache(R.drawable.thumb_apache),
Apple(R.drawable.thumb_apple),
Appveyor(R.drawable.thumb_appveyor),
ArenaNet(R.drawable.thumb_arenanet),
AtlanticNet(R.drawable.thumb_atlantic_net),
Atlassian(R.drawable.thumb_atlassian),
+ Autodesk(R.drawable.thumb_autodesk),
AutoDNS(R.drawable.thumb_autodns),
AVM(R.drawable.thumb_avm),
Backblaze(R.drawable.thumb_backblaze),
BattleNet(R.drawable.thumb_battlenet),
+ BestBuy(R.drawable.thumb_bestbuy),
Betterment(R.drawable.thumb_betterment),
Binance(R.drawable.thumb_binance),
BitBucket(R.drawable.thumb_bitbucket),
@@ -109,14 +113,18 @@ public class EntryThumbnail {
Bitwala(R.drawable.thumb_bitwala),
Bitwarden(R.drawable.thumb_bitwarden),
BlockchainInfo(R.drawable.thumb_blockchain_info),
+ Boxcryptor(R.drawable.thumb_boxcryptor),
+ BraveRewards(R.drawable.thumb_braverewards),
Bugcrowd(R.drawable.thumb_bugcrowd),
CEXio(R.drawable.thumb_cexio),
ChurchTools(R.drawable.thumb_church_tools),
Cisco(R.drawable.thumb_cisco),
+ Citrix(R.drawable.thumb_citrix),
CloudDownload(R.drawable.thumb_cloud_download),
Cloudflare(R.drawable.thumb_cloudflare),
Clubhouse(R.drawable.thumb_clubhouse),
Cobranded(R.drawable.thumb_cobranded),
+ Codeberg(R.drawable.thumb_codeberg),
Codegiant(R.drawable.thumb_codegiant),
Coinbase(R.drawable.thumb_coinbase),
CoinJar(R.drawable.thumb_coinjar),
@@ -124,12 +132,14 @@ public class EntryThumbnail {
ComputerBase(R.drawable.thumb_computerbase),
ConnectWiseManage(R.drawable.thumb_connectwise_manage),
CozyCloud(R.drawable.thumb_cozycloud),
+ CrowdSupply(R.drawable.thumb_crowd_supply),
Crowdin(R.drawable.thumb_crowdin),
Cyon(R.drawable.thumb_cyon),
Dashlane(R.drawable.thumb_dashlane),
Debian(R.drawable.thumb_debian),
Degiro(R.drawable.thumb_degiro),
Denic(R.drawable.thumb_denic),
+ Deribit(R.drawable.thumb_deribit),
Diaspora(R.drawable.thumb_diaspora),
Digidentity(R.drawable.thumb_digidentity),
DigitalOcean(R.drawable.thumb_digital_ocean),
@@ -152,6 +162,7 @@ public class EntryThumbnail {
FACEIT(R.drawable.thumb_faceit),
Fanatical(R.drawable.thumb_fanatical),
Fastmail(R.drawable.thumb_fastmail),
+ FidelityInvestments(R.drawable.thumb_fidelity_investments),
Figma(R.drawable.thumb_figma),
Fingerprint(R.drawable.thumb_fingerprint),
Finnair(R.drawable.thumb_finnair),
@@ -168,6 +179,7 @@ public class EntryThumbnail {
GitHub(R.drawable.thumb_github),
GitLab(R.drawable.thumb_gitlab),
GMX(R.drawable.thumb_gmx),
+ GoatCounter(R.drawable.thumb_goatcounter),
GoDaddy(R.drawable.thumb_godaddy),
Gogs(R.drawable.thumb_gogs),
Google(R.drawable.thumb_google),
@@ -180,12 +192,14 @@ public class EntryThumbnail {
HitBTC(R.drawable.thumb_hitbtc),
HMRC(R.drawable.thumb_hmrc),
HomeAssistant(R.drawable.thumb_home_assistant),
+ HostingDE(R.drawable.thumb_hosting_de),
Hover(R.drawable.thumb_hover),
HumbleBundle(R.drawable.thumb_humblebundle),
HurricaneElectric(R.drawable.thumb_hurricane_electric),
IBM(R.drawable.thumb_ibm),
Iconomi(R.drawable.thumb_iconomi),
IFTTT(R.drawable.thumb_ifttt),
+ ImmoScout24(R.drawable.thumb_immo_scout24),
Infomaniak(R.drawable.thumb_infomaniak),
Instagram(R.drawable.thumb_instagram),
INWX(R.drawable.thumb_inwx),
@@ -193,7 +207,9 @@ public class EntryThumbnail {
Jagex(R.drawable.thumb_jagex),
JetBrains(R.drawable.thumb_jetbrains),
Joomla(R.drawable.thumb_joomla),
+ KDE(R.drawable.thumb_kde),
Keeper(R.drawable.thumb_keeper),
+ Keycloak(R.drawable.thumb_keycloak),
Kickstarter(R.drawable.thumb_kickstarter),
Kraken(R.drawable.thumb_kraken),
Kucoin(R.drawable.thumb_kucoin),
@@ -209,17 +225,23 @@ public class EntryThumbnail {
LocalMonero(R.drawable.thumb_localmonero),
LoginGov(R.drawable.thumb_login_gov),
LogMeIn(R.drawable.thumb_logmein),
+ LuaDNS(R.drawable.thumb_luadns),
+ MailDE(R.drawable.thumb_mail_de),
Mailbox(R.drawable.thumb_mailbox),
Mailchimp(R.drawable.thumb_mailchimp),
Mailcow(R.drawable.thumb_mailcow),
Mailgun(R.drawable.thumb_mailgun),
Mailru(R.drawable.thumb_mailru),
+ Malwaretips(R.drawable.thumb_malwaretips),
+ Mangadex(R.drawable.thumb_mangadex),
Mapbox(R.drawable.thumb_mapbox),
Mastodon(R.drawable.thumb_mastodon),
Matomo(R.drawable.thumb_matomo),
+ Mattermost(R.drawable.thumb_mattermost),
Mediawiki(R.mipmap.thumb_mediawiki, AssetType.Bitmap),
Mega(R.drawable.thumb_mega),
MercadoLibre(R.drawable.thumb_mercadolibre),
+ Mercury(R.drawable.thumb_mercury),
Microsoft(R.drawable.thumb_microsoft),
MicrosoftTeams(R.drawable.thumb_microsoft_teams),
Migadu(R.drawable.thumb_migadu),
@@ -229,11 +251,14 @@ public class EntryThumbnail {
Mixer(R.drawable.thumb_mixer),
MongoDB(R.drawable.thumb_mongodb),
MVPSnet(R.drawable.thumb_mvpsnet),
+ MyGovAU(R.drawable.thumb_my_gov_au),
NameCheap(R.drawable.thumb_namecheap),
NameCom(R.drawable.thumb_namecom),
NAS(R.drawable.thumb_nas),
netcup(R.drawable.thumb_netcup),
+ netlify(R.drawable.thumb_netlify),
NextCloud(R.drawable.thumb_nextcloud),
+ NextDNS(R.drawable.thumb_nextdns),
Nintendo(R.drawable.thumb_nintendo),
NoStarchPress(R.drawable.thumb_no_starch_press),
NOYB(R.drawable.thumb_noyb),
@@ -257,8 +282,11 @@ public class EntryThumbnail {
PaySafe(R.drawable.thumb_paysafecard),
PayWithPrivacy(R.drawable.thumb_paywithprivacy),
PCloud(R.drawable.thumb_pcloud),
+ PeeringDB(R.drawable.thumb_peeringdb),
Phabricator(R.drawable.thumb_phabricator),
phpMyAdmin(R.drawable.thumb_phpmyadmin),
+ PlayStation(R.drawable.thumb_playstation),
+ Plex(R.drawable.thumb_plex),
Pluralsight(R.drawable.thumb_pluralsight),
Plurk(R.drawable.thumb_plurk),
Posteo(R.drawable.thumb_posteo),
@@ -281,15 +309,19 @@ public class EntryThumbnail {
RSS(R.drawable.thumb_rss),
Samsung(R.drawable.thumb_samsung),
SAP(R.drawable.thumb_sap),
+ Saxobank(R.drawable.thumb_saxobank),
Scaleway(R.drawable.thumb_scaleway),
School(R.drawable.thumb_school),
Sciebo(R.drawable.thumb_sciebo),
+ SelfWealth(R.drawable.thumb_selfwealth),
Seafile(R.mipmap.thumb_seafile, AssetType.Bitmap),
Sentry(R.drawable.thumb_sentry),
Sevdesk(R.drawable.thumb_sevdesk),
+ SimpleLogin(R.drawable.thumb_simple_login),
Skrill(R.drawable.thumb_skrill),
Slack(R.drawable.thumb_slack),
Snapchat(R.drawable.thumb_snapchat),
+ SOGo(R.drawable.thumb_sogo),
Sophos(R.drawable.thumb_sophos),
SourceForge(R.drawable.thumb_sourceforge),
Squarespace(R.drawable.thumb_squarespace),
@@ -297,14 +329,18 @@ public class EntryThumbnail {
StarCitizen(R.drawable.thumb_starcitizen),
Steam(R.drawable.thumb_steam),
Stripe(R.drawable.thumb_stripe),
+ Sumologic(R.drawable.thumb_sumologic),
Sync(R.drawable.thumb_sync),
Synology(R.drawable.thumb_synology),
TeaHub(R.drawable.thumb_teahub),
TeamViewer(R.drawable.thumb_teamviewer),
Terminal(R.drawable.thumb_terminal),
+ TeslaMotors(R.drawable.thumb_tesla_motors),
+ TMobile(R.drawable.thumb_t_mobile),
TransIP(R.drawable.thumb_transip),
Trello(R.drawable.thumb_trello),
Tumblr(R.drawable.thumb_tumblr),
+ TUBerlin(R.drawable.thumb_tu_berlin),
TurboTax(R.drawable.thumb_turbotax),
Tutanota(R.drawable.thumb_tutanota),
TUWien(R.drawable.thumb_tuwien_ac_at),
@@ -314,8 +350,8 @@ public class EntryThumbnail {
Uber(R.drawable.thumb_uber),
UbiquitiNetworks(R.drawable.thumb_ubnt),
Ubisoft(R.drawable.thumb_ubisoft),
- Unity(R.drawable.thumb_unity),
UbuntuOne(R.drawable.thumb_ubuntu_one),
+ Unity(R.drawable.thumb_unity),
Uphold(R.drawable.thumb_uphold),
USAA(R.drawable.thumb_usaa),
VagrantCloud(R.drawable.thumb_vagrant_cloud),
@@ -326,9 +362,10 @@ public class EntryThumbnail {
Wallet(R.drawable.thumb_wallet),
Wargaming(R.drawable.thumb_wargaming),
Wasabi(R.drawable.thumb_wasabi),
- Weclapp(R.drawable.thumb_weclapp),
WebDe(R.drawable.thumb_web_de),
+ Weclapp(R.drawable.thumb_weclapp),
Wikimedia(R.drawable.thumb_wikimedia),
+ Wildduck(R.drawable.thumb_wildduck),
Wordfence(R.drawable.thumb_wordfence),
Wordpress(R.drawable.thumb_wordpress),
Workplace(R.drawable.thumb_workplace),
@@ -341,8 +378,8 @@ public class EntryThumbnail {
Zoho(R.drawable.thumb_zoho),
Zoom(R.drawable.thumb_zoom);
- private int resource;
- private AssetType assetType;
+ private final int resource;
+ private final AssetType assetType;
EntryThumbnails(int resource) {
this.resource = resource;
diff --git a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java
index e57ee557..c8853c3e 100644
--- a/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java
+++ b/app/src/main/java/org/shadowice/flocke/andotp/Utilities/Settings.java
@@ -576,6 +576,10 @@ public class Settings {
return getBoolean(R.string.settings_key_show_individual_timeouts, false);
}
+ public boolean isFocusSearchOnStartEnabled() {
+ return getBoolean(R.string.settings_key_focus_search_on_start, false);
+ }
+
public Constants.TapMode getTapSingle() {
String singleTap = getString(R.string.settings_key_tap_single, R.string.settings_default_tap_single);
return Constants.TapMode.valueOf(singleTap.toUpperCase(Locale.ENGLISH));
@@ -601,4 +605,13 @@ public class Settings {
public boolean getBlockAutofill() {
return getBoolean(R.string.settings_key_block_autofill, false);
}
+
+ public void setDefaultBackupType(Constants.BackupType type) {
+ setString(R.string.settings_key_backup_default_type, type.name().toLowerCase(Locale.ENGLISH));
+ }
+
+ public Constants.BackupType getDefaultBackupType() {
+ String defaultType = getString(R.string.settings_key_backup_default_type, Constants.BackupType.ENCRYPTED.name());
+ return Constants.BackupType.valueOf(defaultType.toUpperCase(Locale.ENGLISH));
+ }
}
diff --git a/app/src/main/res/drawable/thumb_airvpn.xml b/app/src/main/res/drawable/thumb_airvpn.xml
new file mode 100644
index 00000000..58b98ff9
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_airvpn.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/thumb_anydesk.xml b/app/src/main/res/drawable/thumb_anydesk.xml
new file mode 100644
index 00000000..595eaeed
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_anydesk.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_autodesk.xml b/app/src/main/res/drawable/thumb_autodesk.xml
new file mode 100644
index 00000000..65a46b68
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_autodesk.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_bestbuy.xml b/app/src/main/res/drawable/thumb_bestbuy.xml
new file mode 100644
index 00000000..447964a4
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_bestbuy.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_boxcryptor.xml b/app/src/main/res/drawable/thumb_boxcryptor.xml
new file mode 100644
index 00000000..637dc6e3
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_boxcryptor.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_braverewards.xml b/app/src/main/res/drawable/thumb_braverewards.xml
new file mode 100644
index 00000000..a540f208
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_braverewards.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_citrix.xml b/app/src/main/res/drawable/thumb_citrix.xml
new file mode 100644
index 00000000..e3cc1035
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_citrix.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_codeberg.xml b/app/src/main/res/drawable/thumb_codeberg.xml
new file mode 100644
index 00000000..4f0bba55
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_codeberg.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_crowd_supply.xml b/app/src/main/res/drawable/thumb_crowd_supply.xml
new file mode 100644
index 00000000..04e65b37
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_crowd_supply.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_dashlane.xml b/app/src/main/res/drawable/thumb_dashlane.xml
index 6b7bea2c..7067e236 100644
--- a/app/src/main/res/drawable/thumb_dashlane.xml
+++ b/app/src/main/res/drawable/thumb_dashlane.xml
@@ -1,9 +1,24 @@
-
-
\ No newline at end of file
+ android:width="91.03dp"
+ android:height="122.87dp"
+ android:viewportWidth="91.03"
+ android:viewportHeight="122.87">
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_deribit.xml b/app/src/main/res/drawable/thumb_deribit.xml
new file mode 100644
index 00000000..73339e85
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_deribit.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/thumb_fidelity_investments.xml b/app/src/main/res/drawable/thumb_fidelity_investments.xml
new file mode 100644
index 00000000..7dddd7a5
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_fidelity_investments.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/thumb_goatcounter.xml b/app/src/main/res/drawable/thumb_goatcounter.xml
new file mode 100644
index 00000000..6c48dcc8
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_goatcounter.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_hosting_de.xml b/app/src/main/res/drawable/thumb_hosting_de.xml
new file mode 100644
index 00000000..6c3957f0
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_hosting_de.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_immo_scout24.xml b/app/src/main/res/drawable/thumb_immo_scout24.xml
new file mode 100644
index 00000000..2961240a
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_immo_scout24.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_kde.xml b/app/src/main/res/drawable/thumb_kde.xml
new file mode 100644
index 00000000..227859fa
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_kde.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_keycloak.xml b/app/src/main/res/drawable/thumb_keycloak.xml
new file mode 100644
index 00000000..f70d92ad
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_keycloak.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_luadns.xml b/app/src/main/res/drawable/thumb_luadns.xml
new file mode 100644
index 00000000..6575299c
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_luadns.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_mail_de.xml b/app/src/main/res/drawable/thumb_mail_de.xml
new file mode 100644
index 00000000..b019c420
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_mail_de.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_malwaretips.xml b/app/src/main/res/drawable/thumb_malwaretips.xml
new file mode 100644
index 00000000..7f5e7a08
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_malwaretips.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_mangadex.xml b/app/src/main/res/drawable/thumb_mangadex.xml
new file mode 100644
index 00000000..fcdb3329
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_mangadex.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_mattermost.xml b/app/src/main/res/drawable/thumb_mattermost.xml
new file mode 100644
index 00000000..8a0e2f88
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_mattermost.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_mercury.xml b/app/src/main/res/drawable/thumb_mercury.xml
new file mode 100644
index 00000000..32b2e5d7
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_mercury.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/thumb_my_gov_au.xml b/app/src/main/res/drawable/thumb_my_gov_au.xml
new file mode 100644
index 00000000..b06246a0
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_my_gov_au.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_netlify.xml b/app/src/main/res/drawable/thumb_netlify.xml
new file mode 100644
index 00000000..214cd98a
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_netlify.xml
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_nextdns.xml b/app/src/main/res/drawable/thumb_nextdns.xml
new file mode 100644
index 00000000..a729fc74
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_nextdns.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_peeringdb.xml b/app/src/main/res/drawable/thumb_peeringdb.xml
new file mode 100644
index 00000000..f37a8e09
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_peeringdb.xml
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_playstation.xml b/app/src/main/res/drawable/thumb_playstation.xml
new file mode 100644
index 00000000..51e2463a
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_playstation.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_plex.xml b/app/src/main/res/drawable/thumb_plex.xml
new file mode 100644
index 00000000..09c4b76b
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_plex.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_saxobank.xml b/app/src/main/res/drawable/thumb_saxobank.xml
new file mode 100644
index 00000000..c4d33497
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_saxobank.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_selfwealth.xml b/app/src/main/res/drawable/thumb_selfwealth.xml
new file mode 100644
index 00000000..5ecb1971
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_selfwealth.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_simple_login.xml b/app/src/main/res/drawable/thumb_simple_login.xml
new file mode 100644
index 00000000..e5d64b6a
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_simple_login.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_sogo.xml b/app/src/main/res/drawable/thumb_sogo.xml
new file mode 100644
index 00000000..ecff3302
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_sogo.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_sumologic.xml b/app/src/main/res/drawable/thumb_sumologic.xml
new file mode 100644
index 00000000..0df9164e
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_sumologic.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_t_mobile.xml b/app/src/main/res/drawable/thumb_t_mobile.xml
new file mode 100644
index 00000000..babb7f82
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_t_mobile.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_tesla_motors.xml b/app/src/main/res/drawable/thumb_tesla_motors.xml
new file mode 100644
index 00000000..06564e82
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_tesla_motors.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_tu_berlin.xml b/app/src/main/res/drawable/thumb_tu_berlin.xml
new file mode 100644
index 00000000..32a06cda
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_tu_berlin.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/thumb_wildduck.xml b/app/src/main/res/drawable/thumb_wildduck.xml
new file mode 100644
index 00000000..a1763514
--- /dev/null
+++ b/app/src/main/res/drawable/thumb_wildduck.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index adf47974..eef7e889 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -66,7 +66,19 @@
android:paddingTop="@dimen/activity_margin_xsmall"
android:paddingBottom="@dimen/fab_recyclerview_padding"
android:clipToPadding="false" />
-
+
diff --git a/app/src/main/res/layout/component_intro_android_sync.xml b/app/src/main/res/layout/component_intro_android_sync.xml
new file mode 100644
index 00000000..0bc7a73f
--- /dev/null
+++ b/app/src/main/res/layout/component_intro_android_sync.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_authenticate.xml b/app/src/main/res/layout/content_authenticate.xml
index 21f9006b..0075336f 100644
--- a/app/src/main/res/layout/content_authenticate.xml
+++ b/app/src/main/res/layout/content_authenticate.xml
@@ -34,12 +34,27 @@
-
+ android:layout_gravity="end">
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/content_backup.xml b/app/src/main/res/layout/content_backup.xml
index 76489466..a8fa7663 100644
--- a/app/src/main/res/layout/content_backup.xml
+++ b/app/src/main/res/layout/content_backup.xml
@@ -2,222 +2,78 @@
+ app:layout_behavior="@string/appbar_scrolling_view_behavior">
-
-
+ android:layout_height="wrap_content"
+ android:layout_marginHorizontal="@dimen/activity_margin"
+ android:layout_marginTop="@dimen/activity_margin_large"
+ android:gravity="center_horizontal">
+ android:orientation="horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ android:textColor="@color/colorAccent"
+ android:textStyle="bold"
+ android:textAppearance="@style/TextAppearance.AppCompat.Widget.TextView.SpinnerItem"
+ android:text="@string/backup_label_type"/>
-
-
-
-
-
-
-
-
-
+ android:entries="@array/backup_list_type_names" />
+ android:layout_marginTop="@dimen/activity_margin"
+ android:padding="@dimen/activity_margin"
+ android:text="@string/backup_label_warning_plain"/>
+ android:textColor="?attr/colorExpiring"
+ android:text="@string/backup_desc_openpgp_provider"
+ android:visibility="gone"/>
-
+ android:text="@string/backup_button_backup"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_marginTop="@dimen/activity_margin"
+ android:indeterminate="true"
+ style="?android:attr/progressBarStyle"
+ android:visibility="gone"/>
@@ -242,7 +98,7 @@
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ar/strings_about.xml b/app/src/main/res/values-ar/strings_about.xml
index 5706cb2f..66f49fcf 100644
--- a/app/src/main/res/values-ar/strings_about.xml
+++ b/app/src/main/res/values-ar/strings_about.xml
@@ -8,38 +8,37 @@
سِجل التغييراتالرخصةرخصة MIT
- مصدر الرمز
+ الكود المصدريالإصدارالأسئلة الشائعة
- الأسئلة المتداولة
+ الأسئلة الشائعةالمؤلفونالمطور الرئيسيالمطورمؤلف التطبيق الأصليالتطبيق الأصلي
- الموقع الإلكتروني
+ موقع الويبالتبرعالمساهمونالمترجمونتحذير على الصور المصغرة
- <b/>١.<b> جميع الصور المصغرة علامات تجارية
- تعود لمالكيها الشرعيين.
- <b/>٢.<b> إستخدام هذه العلامات التجارية لا تشير
- إلى تسويق andOTP لمالكين هذه العلامات التجارية.
+ ١. جميع الصور المصغرة علامات تجارية تعود لمالكيها الشرعيين.
+ ٢. إستخدام هذه العلامات التجارية لا تشير
+إلى تسويق andOTP لمالكين هذه العلامات التجارية، أو العكس.<b/>٣.<b> الصور المصغرة يجب أن تستعمل فقط
لتمثيل الشركة أو المنتج التي تشير إليها.
- <b/>٤. الرجاء عدم استخدام الصور المصغرة لأي سبب عدا تمثيل علامات تجارية معينة.<b>
+ ٤. الرجاء عدم استخدام الصور المصغرة لأي سبب عدا تمثيل علامات تجارية معينة.للمساهمة في تطوير التطبيق
- Find out how you can support the development of andOTP
+ اعرف كيف يمكنك دعم تطوير andOTPالميزات الخاصة
- هل أنت متأكد إنك تريد تمكين الميزات الخاصة؟
- معظمهم خوارزميات OTP غير معتمدة طبقوا على طلب خاص.
- إنهم ليس <b/>معتمدون رسميا<b> ويمكن أن يأتوا مع <b/>قيود معينة<b>.
- الرجاء قراءة وفهم صفحة \"Special features\" في GitHub لمزيد من المعلومات.
- تم تمكين الميزات الخاصة
- تم تمكين الميزات الخاصة من قبل
+ هل أنت متأكد إنك تريد تفعيل الميزات الخاصة؟
+معظمهم خوارزميات OTP غير معتمدة طُبّقوا بناء على طلب خاص.
+إنهم ليسوا معتمدين رسميا ويمكن أن يأتوا مع قيود معينة.
+الرجاء قراءة (وفهم) صفحة \"Special features\" في GitHub لمزيد من المعلومات قبل استخدامهم.
+ تم تفعيل الميزات الخاصة
+ تم تفعيل الميزات الخاصة من قبلتم نسخ رابط التبرع إلى الحافظة
diff --git a/app/src/main/res/values-ar/strings_auth.xml b/app/src/main/res/values-ar/strings_auth.xml
index ed107db4..e2edabdb 100644
--- a/app/src/main/res/values-ar/strings_auth.xml
+++ b/app/src/main/res/values-ar/strings_auth.xml
@@ -5,14 +5,14 @@
كلمة المروررمز PIN
- الرجاء قم بالمصادقة قبل تشغيل التطبيق!
- يرجى تأكيد المصادقة لخلق
- مفتاح التشفير الجديد!
+ الرجاء المصادقة لبدء andOTP!
+ يرجى تأكيد المصادقة لتوليد
+ مفتاح تشفيرك!
- فتح
+ فتح القفلالرجاء تعيين كلمة مرور في الإعدادات!الرجاء تعيين PIN في الإعدادات!
- كلمة المرور خاطئة، حاول مُجددًا من فضلك!
- رمز الـ PIN خاطئ، الرجاء إعادة المحاولة من مُجددًا!
+ كلمة المرور خاطئة، الرجاء المحاولة مُجددًا!
+ رمز PIN خاطئ، الرجاء المحاولة مُجددًا!
diff --git a/app/src/main/res/values-ar/strings_backup.xml b/app/src/main/res/values-ar/strings_backup.xml
index 60fb4d2e..0ad464aa 100644
--- a/app/src/main/res/values-ar/strings_backup.xml
+++ b/app/src/main/res/values-ar/strings_backup.xml
@@ -1,63 +1,63 @@
النُّسَخ الإحتياطية
- النُّسَخ الإحتياطية نص مجرّد
- النُّسَخ الإحتياطية المشفرة
- النُّسَخ الإحتياطية بأوبن بي جي بي
- النسخ الإحتياطي (نص مجرّد)
- النسخ الاحتياطي (مشفر)
- النسخ الاحتياطي (أوبن بي جي بي)
- إسترجاع (نص مجرّد)
- إسترجاع (مشفّر)
- Restore (encrypted, old encryption)
+ النُسَخ الاحتياطية نص مجرّد
+ النُسَخ الاحتياطية المشفّرة
+ النُسَخ الاحتياطية بأوبن بي جي بي
+ نسخ احتياطي (نص مجرّد)
+ نسخ احتياطي (مشفّر)
+ نسخ احتياطي (أوبن بي جي بي)
+ استعادة (نص مجرّد)
+ استعادة (مشفّر)
+ استعادة (مشفّر، التشفير القديم)إسترجاع (أوبن بي جي بي)
- إستبدال البيانات الموجودة
- أنسخ إحتياطيا لكافة الحسابات في ملف JSON نص مُجرَّد
- أنسخ إحتياطيا كافة الحسابات على شكل نص مُجرَّد مُؤمَّن بكلمة سرية في ملف JSON
- أنسخ إحتياطيا لكافة الحسابات في ملف JSON مشفّر بواسطة أوبن بي جي بي
- استعادة حسابات من ملف JSON نص مجرّد
- استعادة حسابات من ملف JSON محمي بكلمة مرور
- Restore accounts from a password-protected JSON file
- created with an andOTP version lower than 0.6.3
- استعادة حسابات من ملف JSON (مشفر بتقنية اوبن بي جي بي)
- فشل في تحميل كلمة مرور النسخ الاحتياطي من الإعدادات، هذا أما يعني إنه لم يتم تعيين أية كلمة مرور أو حدث خطأ ما. سيطلب منك إدخال كلمة المرور يدوياً عند إنشاء أو استيراد نسخة احتياطية.
-
- تحتاج الى تثبيت مزود اوبن بي جي بي وتمكينها في الإعدادات لتمكين هذه الخاصية.
- تحتاج إلى تحديد مفتاح أوبن بي جي بي في الإعدادات قبل أن يمكنك إنشاء نسخ احتياطية مشفرة.
-
- عند المكن, جميع الإدخالات القديمة سوف تستبدل بالنسخة التي تم إستيرادها. عند التعطيل, الإدخلات القديمة سوف تدمج مع مكونات النسخة.
+ استبدال العناصر الموجودة
+ انسخ احتياطيًا كافة الحسابات في ملف JSON نص مُجرَّد
+ انسخ احتياطيًا كافة الحسابات في ملف JSON محمي بكلمة مرور
+ انسخ احتياطيًا كافة الحسابات في ملف JSON مشفّر بواسطة أوبن بي جي بي
+ استعادة الحسابات من ملف JSON نص مجرّد
+ استعادة الحسابات من ملف JSON محمي بكلمة مرور
+ استعادة الحسابات من ملف JSON محمي بكلمة مرور
+ الذي تم إنشاؤه بواسطة إصدار andOTP أقل من 0.6.3
+ استعادة الحسابات من ملف JSON مشفر بأوبن بي جي بي
+ فشل في تحميل كلمة مرور النسخ الاحتياطي من الإعدادات،
+هذا يعني إما أنه لم يتم تعيين كلمة مرور أو حدث خطأ ما. سيطلب منك إدخال
+كلمة المرور يدويًا عند إنشاء أو استيراد نسخة احتياطية.
+ تحتاج إلى تثبيت مزود أوبن بي جي بي وتفعيله
+في الإعدادات لاستعمال هذه الخاصية.
+ تحتاج إلى تحديد مفتاح أوبن بي جي بي في الإعدادات
+قبل أن يمكنك إنشاء نسخ احتياطية مشفرة.
+ عند التفعيل, سوف تستبدل النسخة التي تم استيرادها بجميع الإدخالات القديمة. عند التعطيل, الإدخالات القديمة ستدمج مع محتويات النسخة.تحذير الأمان
- هل حقا تريد تصدير قاعدة البيانات كملف JSON نص مجرّد؟ الملف يحتوي جميع المفاتيح السرية. الرجاء الإحتفاظ عليها!
+ هل حقا تريد تصدير قاعدة البيانات كملف JSON نص مجرّد؟ الملف يحتوي جميع المفاتيح السرية. الرجاء الحفاظ عليها آمنة! فشل النسخ الاحتياطي
- نجحت عملية النسخ الإحتياطي
- التنسيخ المشفر غير مسموح حاليا. الرجاء تمكينهم من الإعدادات
- التنسيخ المشفر غير مسموح حاليا. الرجاء تمكينها في الإعدادات
- الإذن للقراءة لم يمنح. الرجاء تمكينها قبل محاولة النسخ
- الإذن للكتابة لم يمنح. الرجاء تمكينها قبل محاولة النسخ
- التشفير عبر كلمة المرور / PIN غير مدعومة مع البث الإحتياطي
- طريقة تشفير جديدة
- Since version 0.6.3 of andOTP, a new and improved
- encryption method is used for password-protected backups. The old backups can still be
- imported, but it is highly recommended to create new backups with the improved
- encryption.\n\nThis message will not be shown again.
+ نجحت عملية النسخ الاحتياطي
+ النسخ الاحتياطية نص-مجرّد غير مسموح بها حاليًا. الرجاء الذهاب إلى الإعدادات لتفعيلها
+ النسخ الاحتياطية المشفرة غير مسموح بها حاليًا. الرجاء الذهاب إلى الإعدادات لتفعيلها
+ إذن القراءة لم يمنح. الرجاء منحه قبل محاولة النسخ الاحتياطي
+ إذن الكتابة لم يمنح. الرجاء منحه قبل محاولة النسخ الاحتياطي
+ التشفير القائم على كلمة المرور/PIN غير مدعوم
+ مع النسخ الإحتياطي المبث
- فشل النسخ التلقائي
- نجح النسخ التلقائي
- هذه الإعلامات تظهر عندما يفشل النسخ التلقائي لسبب ما
- هذه الإعلامات تظهر عندما ينجح النسخ التلقائي
+ فشل النسخ الاحتياطي التلقائي
+ تم النسخ الاحتياطي التلقائي بنجاح
+ هذه الإشعارات تظهر عندما يفشل
+ النسخ الاحتياطي التلقائي لسبب ما
+ هذه الإشعارات تظهر عندما ينجح النسخ الاحتياطي التلقائي
- فشلت عملية إنشاء دليل للنسخ الإحتياطي
+ الرجاء تعيين موقع النسخ الاحتياطي الافتراضي في الإعدادات!
+ فشل الوصول إلى موقع النسخ الاحتياطي!
+ فشل في إنشاء ملف النسخة الاحتياطية!نجحت عملية التصدير إلى ذاكرة التخزين الخارجيةفشلت عملية التصدير إلى ذاكرة التخزين الخارجية
- نجحت عملية الإستعادة مِن ذاكرة التخزين الخارجية
+ نجحت عملية الاستيراد من ذاكرة التخزين الخارجيةفشلت عملية الإحتفاظ بالبيانات المسترجَعةفشلت عملية فك تشفير النسخة الإحتياطيةلم يتم العثور على أي عنصر في البيانات التي تم إستعادتها
- لا يمكن الوصول إلى الذاكرة الخارجية حاليا
- لا يوجد إذن للوصول إلى ذاكرة التخزين
+ لا يمكن الوصول إلى ذاكرة التخزين الخارجية حاليًاخلل في أوبن بي جي بي : %sلم يتم العثور على أي توقيع مُصادَق عليه
- لم يتم إدخال أية كلمة سرية، الرجاء التحقق من ذلك في الإعدادات
- Can\'t open file selection dialog!
+ لم يتم تعيين كلمة المرور، الرجاء التحقق من الإعدادات
+ لا يمكن فتح مربع حوار اختيار الملف!
diff --git a/app/src/main/res/values-ar/strings_intro.xml b/app/src/main/res/values-ar/strings_intro.xml
index 67aa8bc7..34a8cc16 100644
--- a/app/src/main/res/values-ar/strings_intro.xml
+++ b/app/src/main/res/values-ar/strings_intro.xml
@@ -1,24 +1,18 @@
دعنا نبدأ
- مرحبا بكم. التالي سوف يساعدكم في الإعداد الأولي.
-يرجى الإنتباه والقراءة جيدا وإلا من الممكن خسر معلومات!
-لا داع للقلق, يمكنك تغيير أي من الخيارات في الإعدادات لاحقا.
- لضمان أمن حساباتك, هذا التطبيق يحفظهم فقط في ملفات مشفرة. هنا يمكنك إختيار طريقة التشفير المتبعة.
- مخزنة المفاتيح نظام عضوي لأندرويد من أجل
- الحفظ الآمن على مفاتيح التشفير. هذه الطريقة سوف
- تحفظ المفاتيح خارجة الملفات المعلوماتية ويمكن تنسيخ إحتياطي عبر التشفير عبر الأجهزة (إذا جهازك يدعمها)
- لكن لأن المفاتيح ليست محفوظة في معلومات التطبيق, هذه الطريقة تمنع حلول النسخ الخارجي (مثل تطبيق Titanium).
- إذا إخترت هذه الطريقة, ستعتمد على وسائل النسخ المتاحة في التطبيق. إنتبه, مخزنة المفاتيح تسبب مشاكل عديدة.
- الرجاء إستعمالها فقط في حالة اللزوم. إذا لا تمانع إدخال كلمة المرور / كل مرة تدخل الى التطبيق, من المحبذ إستعمال
- التشفير عبر كلمة المرور.
-
- هذا الأسلوب سيتم تشفير البيانات الخاصة بك مع مفتاح
- متولدة من كلمة المرور أو رقم التعريف الشخصي (PIN). الميزة الرئيسية هنا هو أن هذا سوف يعمل مع حلول النسخ الاحتياطي الخارجي
- (مثل تطبيق \"Titanium\") وهو أقل عرضة للفشل من مخزن المفاتيح.
- مع ذلك، سيوجب عليك إدخال بيانات الاعتماد الخاصة بك كل مرة تشغل التطبيق.
- هنا من الممكن إقامة مطابقة لقفل التطبيق. لأنك حددت مخزن المفاتيح لأندرويد
-كنوع التشفير, التالي إختياري.
+ مرحبا بكم في andOTP. المساعد التالي سوف يساعدكم في الإعداد الأوّلي.
+يرجى الانتباه والقراءة جيدًا لتجنب خسارة البيانات!
+\n\nلا داعٍ للقلق، يمكنك تغيير أي من الخيارات لاحقًا في الإعدادات.
+ لضمان أمان حساباتك، يستعمل andOTP التشفير في تخزين بيانات الحساب. يمكنك هنا اختيار أية طريقة تشفير ستستعمل.
+ KeyStore هو مكون في نظام أندرويد يستعمل في حفظ مفاتيح التشفير بشكل آمن. ميزة استعمال KeyStore هي أن المفاتيح تحفظ بشكل منفصل عن بيانات andOTP، ويمكن دعمه بالتشفير المعتمد-على-العتاد (إن كان جهازك يدعمه).
+مع ذلك، لأن المفاتيح لن تحفظ ضمن بيانات andOTP، هذه الطريقة تمنع حلول النسخ الاحتياطي الخارجي (مثل تطبيق Titanium Backup) من العمل.
+إذا تم اختيار هذه الطريقة، سيتوجب الاعتماد على وسائل النسخ الاحتياطي المتاحة فيandOTP.
+\n\nتحذير، KeyStore يسبب مشاكل عديدة، يرجى استعماله فقط في حالة اللزوم.
+إذا لا تمانع إدخال كلمة المرور/PIN كل مرة تدخل andOTP، يُنصح بشدّة استعمال التشفير عبر-كلمة-المرور بدلًا من ذلك.
+ تلك الطريقة ستشفّر بياناتك بمفتاح تم توليده من كلمة مرور أو PIN. الميزة الرئيسية لاستخدام هذه الطريقة هي أن حلول النسخ الاحتياطي الخارجية (مثل تطبيق Titanium Backup) ستعمل كما يجب، وهي أقل عرضة للفشل من KeyStore. ولكن سيوجب عليك إدخال بيانات الإعتماد الخاصة بك كل مرة تفتح andOTP.
+ هنا من الممكن تعيين طريقة مصادقة لقَفل andOTP. لأنك اخترت أندرويد KeyStore
+كطريقة التشفير, هذه الخطوة اختيارية.هنا من الممكن إقامة عملية المطابقة لإقفال التطبيق.
لأنك حددت كلمة المرور / PIN كنوع التشفير, عليك تحديد
إما كلمة مرور أو PIN للمتابعة.
diff --git a/app/src/main/res/values-ar/strings_main.xml b/app/src/main/res/values-ar/strings_main.xml
index afe0c71c..2f62bed6 100644
--- a/app/src/main/res/values-ar/strings_main.xml
+++ b/app/src/main/res/values-ar/strings_main.xml
@@ -41,10 +41,17 @@
تسميةآخر استخدامالأكثر استخداما
- Edit
+ تعديلتغيير الصورةحذف
- Show QR Code
+ إظهار رمز QR
+
+ More options
+ More options for %1$s
+ Copy token
+ Copy %1$s token
+ Add new account
+ Close menuأخفقت المصادقة، الرجاء إعادة المحاولة !أخفقت عملية المصادقة، جارٍ إغلاق التطبيق!
@@ -52,44 +59,38 @@
هذا العنصر موجود من قبلرمز الكيو آر غير صالحتعذرت عملية تحميل مفتاح التشفير
- Invalid intent-provided code
- Intent-provided code added
+ الرمز المقدم غير صالح
+ تم إضافة الرمز المقدملا يمكن فتح الملفتعذر العثور على/تأكيد رمز كيو آر
- Checksum verification failed while decoding QR code
+ فشل تدقيق المجموع أثناء فك ترميز رمز QRنسق خاطئ في رمز الكيو آر
- QR Code not supported
- Failed to generate QR Code
+ رمز QR غير مدعوم
+ فشل في إنشاء رمز QR
- Invalid secret
+ سر غير صالحمصادقةأدخل التفاصيلحذفتعديل التسميةعداد
- Tokens usage
+ استخدام الرموزخطأ في مخزن المفاتيح
- QR Code
- Deprecation notice
+ رمز QRأدخل كلمة المرورأدخل كلمة المرورتأكيد كلمة المرورالرجاء إدخال بيانات الإعتماد الخاصة بجهازك لتشغيل التطبيق.هل أنت متأكد من أنك تريد إزالة الحساب ؟
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ سوف يتتبع andOTP استخدام الرموز المميزة الخاصة بك (باستخدام خاصية \"اضغط
+ للكشف\" أو نسخ إلى الحافظة) لتتمكن من فرزها بواسطة \"الأكثر استخداما\" أو
+ \"آخر مستخدم\".\n\nلن تظهر هذه الرسالة مرة أخرى.فشل تحميل مفتاح التشفير من مخزن المفاتيح.
الإدخالات المضافة سوف تحذف. لمزاولة التطبيق,
أبدل تشفيرة قاعدة البيانات الى كلمة مرور أو PIN في الإعدادات.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.
- مسح رمز الكيو آر
+ مسح رمز QRاستيراد رمز كيو آرأدخل التفاصيل
diff --git a/app/src/main/res/values-ar/strings_settings.xml b/app/src/main/res/values-ar/strings_settings.xml
index 0cdad027..6caa1a20 100644
--- a/app/src/main/res/values-ar/strings_settings.xml
+++ b/app/src/main/res/values-ar/strings_settings.xml
@@ -14,17 +14,18 @@
تشفير قاعدة البياناتزر الذعرالإقفال عند إغلاق الجهاز
- Re-lock when going into the background
- Re-lock on inactivity
- Delay for inactivity re-lock
- Block accessibility services
+ إعادة قفل عند الذهاب إلى الخلفية
+ إعادة قفل عند عدم النشاط
+ تأخير إعادة قفل عدم النشاط
+ حظر إمكانية الوصول
+ حظر التعبئة التلقائيةاللغةالمظهرتصميم البطاقةحجم خط إسم العلاماتتسمية التمرير
- Single-tap
- Double-tap
+ نقرة
+ نقر مزدوجحجم الصور المصغرةتقسيم تذكرة أمان النفاذ بمسافة بيضاءسلوك إختيار العلامة
@@ -35,7 +36,7 @@
Show individual timeoutsإلحاق تاريخ اليوم باسم الملفإسأل عن إسم الملف
- مجلد النسخ الإحتياطي
+ Default backup locationكلمة المرور للنسخة الإحتياطيةنسخ احتياطي تلقائي للإدخالات الجديدةالنسخ الاحتياطي المبث
@@ -60,6 +61,10 @@
require reauthenticationHide sensitive fields from the accessibility
services. DO NOT enable this if you rely on the accessibility services!
+ Block autofill services from accessing password
+ fields inside the app
+ This feature requires an Android version
+ above 8.0 (Oreo)قم بتمرير علامات متجاورة بدلاً من اقتطاعهاApp will be minimized when you copy the OTP to clipboardSpecify which values should be included when searching
@@ -69,9 +74,13 @@
This can slow down the app, only enable if really necessary.إلحاق بالتاريخ الحالي والوقت إلى اسم الملف النسخ الاحتياطي المقترحاسأل عن اسم الملف كل مرة يتم إنشاء نسخة احتياطية أو نسخة مستعادة
+ Choose a default backup location
+ Backup location has been chosenإختر كلمة المرور التي سوف تستخدم لتشفير النسخ الإحتياطيةCreates a new encrypted backup when new
entries are added, or edited, if settings conditions are met
+ Set a default backup location and a
+ backup password to enable this optionحدد أنواع النسخ الإحتياطي التي يمكن تشغيلها بواسطة تطبيقات البثعنوان البريد الإلكتروني للمفتاح المستخدَم لتشفير النسخ الإحتياطيةالنسخ المشفرة تسترد فقط إذا وقعوا بمفتاح صالح
@@ -81,7 +90,7 @@
تمكين التطبيق أن يستعمل خدمة النسخ الموجودة في أندرويد لنسخ المفاتيح والتفضيلاتحذف مفتاح التعمية من مخزن المفاتيح
- هذه الخاصة تتطلب ضبط القفل الآمن
+ هذه الخاصة تتطلب ضبط القفل الآمن
(الإعدادت -> شاشة القفل والحماية -> ضبط القفل الآمن) كلمة مرور فارغة مرفوضة. إختر نوع المصادقة كفارغة لتعطيلها!محاولة تغيير تشفيرة قاعدة البيانات،
diff --git a/app/src/main/res/values-ast/strings_about.xml b/app/src/main/res/values-ast/strings_about.xml
new file mode 100644
index 00000000..ab96db8b
--- /dev/null
+++ b/app/src/main/res/values-ast/strings_about.xml
@@ -0,0 +1,47 @@
+
+
+ Tocante a
+ Autenticación en dos pasos de códigu llibre p\'Android
+ Tocante a
+ Biblioteques
+
+ Rexistru de cambeos
+ Llicencia
+ Llicencia MIT
+ Códigu fonte
+ Versión
+ FAQ
+ Entrugues frecuentes
+
+ Autores
+ Densendolcador principal
+ Desendolcador
+ Autor de l\'aplicación orixinal
+ Aplicación orixinal
+ Sitiu web
+ Donar
+ Collaboradores
+ Traductores
+
+ Avisu de renuncia de les miniatures
+ 1. Toles miniatures son marques rexistraes
+ de los sos respeutivos miembros.
+ 2. L\'usu d\'estes marques rexistraes nun
+ indiquen rellación col dueñu de los drechos d\'autor y andOTP o viceversa.
+ 3. Les miniatures namás deberíen usase
+ pa representar la compaña o serviciu qu\'indiquen.
+ 4. Nun uses les miniatures pa otru
+ propósitu que nun seya\'l de representar una marca o serviciu en particular.
+
+ Sofita\'l desendolcu
+ Descubri cómo pues sofitar el desendolcu d\'andOTP
+ Carauterístiques especiales
+ ¿De xuru que quies activar les carauterístiques
+ especiales? La mayoría d\'elles son algoritmos OTP que nun son estándares y
+ s\'implementaron so petición. Nun tán sofitaes oficialmente y puen venir con
+ ciertes llendes, llei (y entiendi) la páxina «Carauterístiques especiales» na wiki de
+ GitHub pa deprender más enantes d\'usales.
+ Activáronse les carauterístiques especial
+ Les carauterístiques especiales yá s\'activaron
+ L\'enllaz de donación copióse al cartafueyu
+
diff --git a/app/src/main/res/values-ast/strings_auth.xml b/app/src/main/res/values-ast/strings_auth.xml
new file mode 100644
index 00000000..b81fa9b1
--- /dev/null
+++ b/app/src/main/res/values-ast/strings_auth.xml
@@ -0,0 +1,18 @@
+
+
+ Autenticación
+
+ Contraseña
+ PIN
+
+ ¡Autentícate p\'aniciar andOTP!
+ ¡Confirma l\'autenticación pa xenerar la clave
+ de cifráu!
+
+ Desbloquiar
+
+ ¡Afita una contraseña n\'Axustes!
+ ¡Afita un PIN n\'Axustes!
+ Contraseña incorreuta, ¡volvi tentalo!
+ PIN incorreutu, ¡volvi tentalo!
+
diff --git a/app/src/main/res/values-ast/strings_backup.xml b/app/src/main/res/values-ast/strings_backup.xml
new file mode 100644
index 00000000..b6bf8a4f
--- /dev/null
+++ b/app/src/main/res/values-ast/strings_backup.xml
@@ -0,0 +1,78 @@
+
+
+ Copies de seguranza
+ Copies de seguranza en testu planu
+ Copies de seguranza cifraes
+ Copies de seguranza n\'OpenPGP
+ Copia de seguranza (testu planu)
+ Copia de seguranza (cifrada)
+ Copia de seguranza (OpenPGP)
+ Restauración (testu planu)
+ Restauración (cifrada)
+ Restauración (cifrada, cifráu vieyu)
+ Restauración (OpenPGP)
+ Trocar les entraes esistentes
+ Fai una copia de seguranza de toles cuentes nun ficheru JSON
+ Fai una copia de seguranza de toles cuentes nun ficheru JSON protexíu por contraseña
+ Fai una copia de seguranza de toles cuentes nun ficheru JSON cifráu con OpenPGP
+ Restaura les cuentes d\'un ficheru JSON
+ Restaura les cuentes d\'un ficheru JSON protexíu por contraseña
+ Restaura cuentes dende un ficheru JSON protexíu con contraseña
+ y creáu con una versión d\'andOTP menor a la 0.6.3
+ Restaura les cuentes d\'un ficheru JSON cifráu con OpenPGP
+ Fallu al cargar la contraseña de la copia de seguranza dende Axustes,
+ esto significa que nun s\'afitó nenguna contraseña o asocedió daqué malo. Va pidísete qu\'introduzas
+ la contraseña a mano al crear o importar una copia de seguranza.
+
+ Precises instalar un fornidor OpenPGP y activalu
+ n\'Axustes pa usar esta carauterística.
+
+ Precises esbillar una clave OpenPGP n\'Axustes
+ enantes que pueas crear copies de seguranza cifraes.
+
+ Si s\'activa, toles entraes vieyes van trocase al importar
+ una copia de seguranza y namás si esta ta presente. Si se desactiva, les entraes vieyes y el
+ conteníu de les copies de seguranza mécense.
+
+ Alvertencia de seguranza
+ ¿De xuru que quies esportar la base de datos
+ como ficheru JSON en testu planu? Esti ficheru contién toles claves
+ secretes polo que guárdalu con curiáu
+ Falló la copia de seguranza
+ La copia de seguranza tuvo ésitu
+ Anguaño nun se permiten les copies de
+ seguranza en testu planu, vete a Axustes
+ p\'activales
+ Anguaño les copies de seguranza cifraes nun
+ tán permitíes, vete a axustes p\'activales
+ Nun se concedió\'l permisu de llectura,
+ concédelu enantes de crear esta
+ copia de seguranza
+ Nun se concedió\'l permisu d\'escritura,
+ concédelu enantes de crear una
+ copia de seguranza
+ El cifráu según contraseña/PIN nun
+ sofita cola copia de seguranza remota
+
+ Falló la copia de seguranza automática
+ La copia de seguranza automática tuvo ésitu
+ Estos avisos amuésense cuando una
+ copia de seguranza falló por dalguna razón
+ Estos avisos amuésense cuando una
+ copia de seguranza tuvo ésitu
+
+ ¡Afita un allugamientu predetermináu nos axustes!
+ ¡Fallu al acceder al allugamientu de les copies de seguranza!
+ ¡Fallu al crear el ficheru del copia de seguranza!
+ La esportación al almacenamientu esternu tuvo ésitu
+ Falló la esportación al almacenamientu esternu
+ La importación al almacenamientu esternu tuvo ésitu
+ Fallu al guardar les entraes restauraes
+ Falló\'l descifráu de la copia de seguranza
+ Nun s\'alcontraron entraes nos datos importaos
+ Anguaño nun pue accedese al almacenamientu esternu
+ Fallu d\'OpenPGP: %s
+ Nun se deteutó nenguna robla verificada
+ Nun s\'afitó la contraseña, comprueba los axustes
+ ¡Nun pue abrise\'l diálogu d\'esbilla de ficheros!
+
diff --git a/app/src/main/res/values-ast/strings_intro.xml b/app/src/main/res/values-ast/strings_intro.xml
new file mode 100644
index 00000000..64f091da
--- /dev/null
+++ b/app/src/main/res/values-ast/strings_intro.xml
@@ -0,0 +1,37 @@
+
+
+ Vamos entamar
+ Afáyate n\'andOTP, esti encontu va guiate pente la
+ configuración inicial. ¡Llei con procuru darréu que podríes perder datos!
+ \n\nNun t\'esmolezas, entá pues camudar cualesquier opción más sero n\'Axustes.
+ P\'asegurar la seguranza de les cuentes, andOTP
+ namás les atroxa en ficheros cifraos. Equí pues escoyer el métodu de cifráu que va usase.
+ L\'almacenamientu de claves ye un componente del sistema Android
+ p\'atroxar de mou seguru les claves criptográfiques. La ventaya d\'esti métodu ye que les claves
+ atróxense separtaes de los ficheros de datos y la criptografía del hardware pue facer copies
+ de seguranza (si\'l preséu lo sofita). Por embargu y darréu que les claves nun s\'atroxen colos
+ datos de les aplicaciones, esti métodu evita que funcionen les soluciones de copies de
+ seguranza (como Titanum). Si escueyes esti métodu vas tener d\'encontate nes funciones
+ de copies de seguranza internes d\'andOTP.\n\nAlvertencia: L\'almacenamientu
+ de claves tien l\'enclín a causar munchos problemes, úsalu namás si lu precises daveres. Si nun
+ t\'importa introducir una contraseña / PIN cada vegada qu\'anicies andOTP, aconséyase
+ muncho usar el cifráu basáu en contraseña.
+ Esti métodu va cifrar los datos con una clave
+ xenerada de magar una contraseña o PIN. La ventaya principal equí ye qu\'esto va
+ funcionar con soluciones esternes de copies de seguranza (como Titanium), y nun falla
+ tanto como l\'almacén de claves. Por embargu, vas tener d\'introducir les credenciales
+ cada vegada qu\'anicies andOTP.
+ Equí pues configurar una autenticación pa bloquiar
+ andOTP. Darréu qu\'escoyesti Almacén de claves d\'Android como métodu de
+ cifráu, esto ye opcional.
+ Equí pues configurar una autenticación pa bloquiar
+ andOTP. Darréu qu\'escoyesti Contraseña / PIN como métodu de cifráu, precises
+ afitar una contraseña o un PIN pa siguir.
+ ¡Afita una contraseña pa siguir!
+ ¡Afita un PIN pa siguir!
+ ¡Confirma la contraseña pa siguir!
+ ¡Confirma\'l PIN pa siguir!
+ Finesti
+ Guardáronse los axutes, ¡yá tas preparáu pa
+ usar andOTP!
+
diff --git a/app/src/main/res/values-ast/strings_main.xml b/app/src/main/res/values-ast/strings_main.xml
new file mode 100644
index 00000000..250a1805
--- /dev/null
+++ b/app/src/main/res/values-ast/strings_main.xml
@@ -0,0 +1,96 @@
+
+
+
+ Encaboxar
+ Amestar a mano
+ Escaniar códigu QR
+ Guardar
+ Etiqueta nueva
+ Axustes
+ Toles etiquetes
+ Ensin etiquetes
+ Códigu QR a partir d\'una imaxe
+
+ %d s
+
+ Etiqueta
+ Secretu
+
+ Anubrióse
+ Triba
+ Secretu
+ Periodu
+ Díxitos
+ Contador
+ Emisor
+ Etiqueta
+ Algoritmu
+ Etiquetes
+ Opciones avanzaes
+
+ Amosar etiquetes
+ Anubrir etiquetes
+
+ Tocante a
+ Copia seguranza
+ Guetar
+ Axustes
+ Ordenar
+ Ensin ordenar
+ Emisor
+ Etiqueta
+ Últimu usu
+ Lo más usao
+ Editar
+ Camudar imaxe
+ Desaniciar
+ Amosar el códigu QR
+
+ Más opciones
+ Más opciones de %1$s
+ Copiar el pase
+ Copiar el pase de %1$s
+ Amestar una cuenta
+ Zarrar el menú
+
+ Falló l\'autenticación, ¡volvi tentalo!
+ Falló l\'autenticación, ¡zarrando andOTP!
+ Copióse al cartafueyu
+ Esta entrada yá esiste
+ El códigu QR nun ye válidu
+ Nun se cargó la clave de cifráu
+ El códigu propuestu nun ye válidu
+ Amestóse\'l códigu propuestu
+ Nun pudo abrise\'l ficheru
+ Nun pudo alcontrase/confirmase\'l códigu QR
+ Falló la verificación de la suma de comprobación mentanso se descifraba\'l códigu QR
+ Fallu de formatu nel códigu QR
+ El códigu QR nun se sofita
+ Fallu al xenerar el códigu QR
+
+ El secretu nun ye válidu
+
+ Autenticación
+ Amestar a mano
+ Desaniciar
+ Renomáu
+ Contador
+ Usu de pases
+ Fallu del almacén de claves
+ Códigu QR
+ Introducción de contraseña
+ Introduz la contraseña
+ Confirma la contraseña
+ Introduz les credenciales del preséu p\'aniciar andOTP, por favor.
+ ¿De xuru que quies desaniciar la cuenta «%1$s»?
+ andOTP va saber cuándo uses los pases (col usu de la
+ carauterística «Tocar p\'amosar» o copiar al cartafueyu) pa ser a ordenalos por «Más
+ usu» o «Últimu usu».\n\nEsti mensaxe nun va amosase de nueves.
+ Falló la carga de la clave de cifráu del almacén de claves.
+ Va perdese cualesquier entrada que s\'amieste.\n\nPa ser entá a usar andOTP, pues
+ dir a Axustes y cambiar el cifráu de labase de datos o la Contraseña / PIN.
+
+ Escaniar códigu QR
+ Importar un códigu QR
+ Amestar a mano
+
diff --git a/app/src/main/res/values-ast/strings_settings.xml b/app/src/main/res/values-ast/strings_settings.xml
new file mode 100644
index 00000000..2f824b94
--- /dev/null
+++ b/app/src/main/res/values-ast/strings_settings.xml
@@ -0,0 +1,228 @@
+
+
+ Axustes
+
+ Seguranza
+ Interfaz d\'usuariu
+ Copies de seguranza
+
+ Tocar pa descubrir
+ Escosa del tiempu d\'espera del toque pa descubrir
+ Autenticación
+ Contraseña
+ PIN
+ Cifráu de la base de datos
+ Botón de pánicu
+ Volver bloquiar al apagar la pantalla
+ Volver a bloquiar al tar en segundu planu
+ Volver bloquiar na inactividá
+ Retrasu pal bloquéu por inactividá
+ Bloquiar tolos servicios d\'accesibilidá
+ Bloquiar el rellenu automáticu
+ Llingua
+ Estilu
+ Diseñu de les tarxetes
+ Tamañu de la fonte de les etiquetes
+ Desplazar nes etiquetes
+ Un toque
+ Dos toques
+ Tamañu de miniatures
+ Dixebra de los códigos
+ Comportamientu de la esbilla d\'etiquetes
+ Minimizar l\'aplicación dempués de compiar el códigu OTP
+ Comportamientu de la gueta
+ Rescamplar los pases que caduquen
+ Anubrir la barra d\'escosa de tiempu
+ Amosar les escoses de tiempu individuales
+ Amestar la data al nome del ficheru
+ Pidir un nome de ficheru
+ Allugamientu predetermináu de les copies
+ Contraseña pa les copies de seguranza
+ Facer copies de seguranza al amestar entraes
+ Espardimientu de copies de seguranza
+ Fornidor OpenPGP
+ Clave de cifráu OpenPGP
+ Clave de cifráu OpenPGP (opcional)
+ Verificar les copies de seguranza cifraes
+ Activar les carauterístiques especiales
+ Activar captures de pantalla
+ Activar la sincronización d\'Android
+ Llimpiar l\'almacén de claves
+
+ Anubre por defeutu los pases OTP riquiendo que se
+ descubran a mano
+ Esbilla\'l tiempu (en segundos) tres el que
+ van volver anubrise les entraes
+ revelaes
+ Decidi lo qu\'asocede cuando s\'activa\'l botón de pánicu
+ Rique l\'autenticación dempués de que la
+ pantalla del preséu s\'apague
+ Rique l\'autenticación dempués de que l\'aplicación se
+ mandare al segundu planu (por exemplu, primiendo\'l
+ botón d\'Aniciu)
+ Rique l\'autenticación dempués de que\'l preséu tea
+ inactivu
+ Esbilla\'l tiempu (en segundos) tres el
+ que va volver riquise l\'autenticación
+ Anubre los campos sensibles a los
+ servicios d\'accesibilidá. ¡NUN actives esto si uses los servicios
+d\'accesibilidá!
+ Bloquia que los servicios de rellenu automáticu
+ accedan a los campos de contraseña de
+ dientro de l\'aplicación
+ Esta carauterística rique Android
+ 8.0 (Oreo) o mayor
+ Desplazar les etiquetes llargues en cuentes de truncales
+ L\'aplicación va minimizase cuando copies el códigu OTP nel cartafueyu
+ Especifica los valores que deberíen incluyise al guetar
+ Rescampla los pases si caduquen en 8 segundos
+ Anubre la barra d\'escosa de tiempu global de lo cimero de la pantalla
+ Amuesa la barra d\'escosa de tiempu en cada entrada.
+ Esto pue facer que l\'aplicación vaiga lenta, activa esta opción
+ namás si ye preciso.
+ Amiesta la data actual al nome suxeríu de la copia
+ de seguranza
+ Pide\'l nome de ficheru cada vegada que se crea o
+ restaura una copia de seguranza
+ Escueyi un allugamientu predetermináu pa copies de seguranza
+ Escoyóse l\'allugamientu de les copies de seguranza
+ Afita la contraseña que s\'usa pa cifrar les
+ copies de seguranza
+ Crea una copia de seguranza cifrada cuando
+ s\'amiesten o editen entraes, si se cumplen les condiciones
+ Afita un allugamientu y una contraseña
+ predeterminaos pa les copies de
+ seguranza p\'activar esta opción
+ Esbilla les tribes de copies de seguranza que
+ puen aicionase pente aplicaciones de
+ terceros col usu d\'Espardimientu
+ La direición de corréu de la clave OpenPGP usada
+ pa cifrar les copies de seguranza
+ Les copies de seguranza cifraes namás s\'importen
+ si tán roblaes con una clave válida
+ Toca pa volver desactivar les carauterístiques especiales
+ Permite la fechura de captures de pantalla de
+ la pantalla principal (desactívase por
+ defeutu por razones de seguranza)
+ Permite qu\'andOTP use\'l serviciu
+ integráu de copies de seguranza d\'Android pa facer
+ copies de seguranza de claves y preferencies
+ Desanicia la clave de cifráu del almacén de claves
+
+ Esta carauterística rique una pantalla de
+ desbloquéu configurada (Axustes -> Seguranza -> Pantalla de bloquéu)
+ Nun se permite una contraseña balera,
+ afita l\'autenticación a Nenguna pa desactivala.
+ Tentando de camudar el cifráu de la base
+ de datos, espera
+ ¡El cifráu de la base de datos camudó
+ con ésitu!
+ Fallu al camudar el cifráu de la base
+ de datos, volviendo al estáu orixinal
+ Fallu al crear una copia de
+ seguranza interna, ¡albortando!
+ Fallu al consiguir la clave de cifráu, ¡albortando!
+ ¡Falló l\'autenticación!
+ Fallu al anovar dafurto la contraseña / PIN
+ al cifráu nuevu, volvi afitala manualmente n\'axustes.
+ Alvertencia
+ Fallu
+ ¿Llimpiar l\'almacén de claves?
+ Sincronización d\'Android
+ Agora andOTP va tentar de camudar el cifráu
+ de la base de datos. En casu de fallu, una copia de seguranza va restaurase y
+ el cifráu nun va camudar.\n\nPor embargu, siempres ye una bona idea tener una
+ copia en casu de qu\'asoceda daqué inesperao.
+ ¡Namás pues usar una contraseña o un PIN
+ mentanto\'l cifráu de la base de datos tea afitáu a «Contraseña/PIN»!
+ ¡Primero precises afitar
+ l\'autenticación a «Contraseña» o «PIN»!
+ ¡Primero precises afitar
+ una contraseña o un PIN enantes de camudar el
+ cifráu!
+ En dalgunos casos, llimpiar l\'almacén
+ de claves pue ayudar a iguar problemes. ¡Namás deberíes siguir si sabes lo que tas faciendo!\n\nDarréu
+ que\'l cifráu de la base de datos s\'afitó a Contraseña/PIN, nun deberíes
+ nengún datu (pero nun ta demás tener una copia de seguranza).\n\n¿De xuru que quies
+ llimpiar l\'almacén de claves?
+ En dalgunos casos, llimpiar l\'almacén
+ de claves pue ayudar a iguar problemes. ¡Namás deberíes siguir si sabes lo que tas faciendo!\n\nAlvertencia:
+ Darréu que\'l cifráu de la base de datos s\'afitó a Almacén de claves d\'Android,
+ vas perder toles cuentes. ¡Asegúrate de que tienes una copia de seguranza!\n\n¿De xuru que
+ quies llimpiar l\'almacén de claves?
+ La sincronización d\'Android nun pue usase col
+ cifráu del almacén de claves, deberíes facer una
+ copia de seguranza manual!
+
+
+ Nenguna
+ Contraseña
+ PIN
+ Credenciales del preséu
+
+
+ Almacén de claves d\'Android
+ Contraseña / PIN
+
+
+ Llimpiar toles cuentes
+ Reafitar los axustes de l\'aplicación
+
+
+ Compautu
+ Por defeutu
+ Completu
+
+
+ Nada
+ Amosar/anubrir
+ Copiar
+ Copiar y dir al segundu planu
+
+
+ Nomes
+ Emisor
+ Etiquetes
+
+
+ Non
+ Entraes nueves
+ Cualesquier edición
+
+
+ Claridá
+ Escuridá
+ Prietu
+
+
+ Anúbrense
+ Nanu
+ Pequeñu
+ Por defeutu
+ Mediu
+ Grande
+
+
+ Nun dixebrar
+ Tres dos caráuteres
+ Tres trés caráuteres
+
+
+ Amuésense toles entraes que concasen con cualesquiera d\'estes etiquetes esbillaes (o)
+ Namás s\'amuesen les entraes que concasen con toles etiquetes esbillaes (y)
+ Cambéu ente etiquetes (namás se permite una etiqueta esbillada al empar)
+
+
+ Copies de seguranza en testu planu
+ Copies de seguranza cifraes
+
+
+ Lo predeterminao del sistema
+
+ Introduz una contraseña nueva
+ Introduz un PIN nuevu
+ Confirma la contraseña
+ Confirma\'l PIN
+ ¡La contraseña precisa ser de polo menos %1$d de llargor!
+ ¡El PIN precisar ser de polo menos %1$d díxitos de llargor!
+
diff --git a/app/src/main/res/values-bg/strings_auth.xml b/app/src/main/res/values-bg/strings_auth.xml
index 40295dda..35b07624 100644
--- a/app/src/main/res/values-bg/strings_auth.xml
+++ b/app/src/main/res/values-bg/strings_auth.xml
@@ -6,8 +6,8 @@
ПИН кодМоля, удостоверете се, за да стартирате andOTP!
- Моля, удостоверете се, за да генерирате
- нов ключ за криптиране!
+ Please confirm authentication to generate your
+ encryption key!Отключване
diff --git a/app/src/main/res/values-bg/strings_backup.xml b/app/src/main/res/values-bg/strings_backup.xml
index 6ae90497..e6de23b6 100644
--- a/app/src/main/res/values-bg/strings_backup.xml
+++ b/app/src/main/res/values-bg/strings_backup.xml
@@ -46,11 +46,6 @@
това преди да опитате да направите резервно копиеКриптиране на база Парола/ПИН код, не
се поддържа с резервно копие чрез външно приложение
- Нов метод за криптиране
- От версия 0.6.3 на andOTP, нов и подобрен
- метод за криптиране се използва за защитени, с парола, резервни копия. Старите резервни копия
- все още могат да бъдат импортиран, но е силно препоръчително да създавате нови резервни копия с подобрен
- метод на криптиране.\n\nТова съобщение няма да бъде показано отново.Автоматичното архивиране не бе успешноАвтоматичното архивиране е успешно
@@ -59,7 +54,9 @@
Тези известия се показват, когато
автоматичното архивиране е успешно
- Неуспешно създаване на директория за резервни копия
+ Please set a default backup location in the settings!
+ Failed to access backup location!
+ Failed to create backup file!Експортирането във външно хранилище е успешноЕкспортирането в външно хранилище е неуспешноИмпортиране от външно хранилище е успешно
@@ -67,7 +64,6 @@
Декриптирането на архива не бе успешноНяма намерени записи в импортираните данниВ момента външното хранилище не е достъпно
- Разрешението за съхранение не е предоставеноOpenPGP Грешка: %sНе е открит проверен подписПаролата не е зададена, проверете в Настройки
diff --git a/app/src/main/res/values-bg/strings_main.xml b/app/src/main/res/values-bg/strings_main.xml
index 22e9705a..bdfbd460 100644
--- a/app/src/main/res/values-bg/strings_main.xml
+++ b/app/src/main/res/values-bg/strings_main.xml
@@ -45,6 +45,13 @@
Промяна на изображениетоПремахванеПоказване на QR кода
+
+ More options
+ More options for %1$s
+ Copy token
+ Copy %1$s token
+ Add new account
+ Close menuНеуспешно удостоверяване. Моля, опитайте отново!Неуспешно удостоверяване, затваряне на andOTP!
@@ -71,7 +78,6 @@
Използване на токенитеГрешка в Хранилището за ключове на AndroidQR код
- Остаряло известиеВъведете паролаВъведете паролаПотвърдете паролата
@@ -83,11 +89,6 @@
Неуспешно зареждане на ключа за шифроване от Хранилище за ключове на Android.
Всички добавени записи ще се загубят.\n\nЗа да продължите да използвате andOTP, можете да отидете
в Настройки и да превключете Криптиране на базата данни на Парола / ПИН код.
- Това ще бъде последната поддържана версия на andOTP за
- версия на Android под 5.1 (Lollipop). Увеличените усилия, необходими за поддържане на
- отделно приложение за съхранение, само за тези по-стари версии, както и за техния нисък пазар на
- споделянията, правят непрекъснатата поддръжка невъзможна за нашия малък екип. \n\nТова съобщение няма да бъде
- показани отново.Сканиране на QR кодаИмпортиране на QR код
diff --git a/app/src/main/res/values-bg/strings_settings.xml b/app/src/main/res/values-bg/strings_settings.xml
index 5607c2a5..abc81d03 100644
--- a/app/src/main/res/values-bg/strings_settings.xml
+++ b/app/src/main/res/values-bg/strings_settings.xml
@@ -18,6 +18,7 @@
Повторно заключване при бездействиеЗабавяне за повторно заключване при неактивностБлокиране на услугите за достъпност
+ Block autofillЕзикТемаВид оформление
@@ -35,7 +36,7 @@
Показване на индивидуални времена за изчакванеДобавяне на датата към името на файлаПопитай за името на файла
- Директория за резервни копия
+ Default backup locationПарола за резервни копияАвтоматично архивиране на нови записиРезервная копия с помощта на външни приложения
@@ -63,6 +64,10 @@
изисква повторно удостоверяванеСкриване на чувствителни полета от услугите
за достъпност. НЕ активирайте това, ако използвате услугите за достъпност!
+ Block autofill services from accessing password
+ fields inside the app
+ This feature requires an Android version
+ above 8.0 (Oreo)Превъртане на дългите етикети, вместо да бъдат съкращаваниПриложението ще бъде минимизирано, когато копирате OTP токенът в клипбордаПосочете кои стойности трябва да бъдат включени при търсенето
@@ -75,10 +80,14 @@
Попитайте за името на файла всеки път, когато се създаде или възстановява
резервно копие
+ Choose a default backup location
+ Backup location has been chosenЗадайте паролата, която да се използва за криптиране на
резервните копияСъздаване на ново криптирано резервно копие, когато новите
записи се добавят или редактират, ако са изпълнени условията за настройките
+ Set a default backup location and a
+ backup password to enable this optionИзберете какви типове резервни копия могат да бъдат запазени от
приложения на трети страни за създаване на резервно копиеПощенски адрес на OpenPGP ключа, използван за криптиране на
diff --git a/app/src/main/res/values-ca/strings_about.xml b/app/src/main/res/values-ca/strings_about.xml
index 52b8d685..fca7671f 100644
--- a/app/src/main/res/values-ca/strings_about.xml
+++ b/app/src/main/res/values-ca/strings_about.xml
@@ -11,7 +11,7 @@
Codi fontVersióFAQ
- Frequently asked questions
+ Qüestions freqüentsAutorsProgramador principal
@@ -19,22 +19,22 @@
Autor de l\'aplicació originalAplicació originalLloc web
- Donar
+ Feu una donacióCol·laboradorsTraductors
- Avís miniatura
- 1. totes les miniatures són marques registrades dels seus
+ Avís sobre les miniatures
+ 1. Totes les miniatures són marques registrades dels seus
respectius propietaris.
- 2. l\'ús de les marques comercials no
- indica aprovació del titular de la marca per andOTP, ni viceversa.
- 3. Miniatures només usades per
- representar l\'empresa o producte al qual es refereixen.
- 4. No utilitzeu miniatures per a qualsevol propòsit
- excepte per representar aquella marca determinada o servei.
+ 2. L\'ús de les marques comercials no
+ indica aprovació del titular de la marca per part d\'andOTP, ni viceversa.
+ 3. Les miniatures només s\'haurien de fer servir per a
+ representar l\'empresa o producte al qual es fan referència.
+ 4. No utilitzeu les miniatures per a cap altre propòsit que no sigui
+ representar aquella marca determinada o servei.Doneu suport al desenvolupament
- Find out how you can support the development of andOTP
+ Vegeu com podeu donar suport al desenvolupament d\'andOTPCaracterístiques especialsEsteu segur que voleu habilitar les característiques
especials? La major part són algorismes OTP no estàndard que es van implementar
diff --git a/app/src/main/res/values-ca/strings_auth.xml b/app/src/main/res/values-ca/strings_auth.xml
index 99e231f0..47d61da3 100644
--- a/app/src/main/res/values-ca/strings_auth.xml
+++ b/app/src/main/res/values-ca/strings_auth.xml
@@ -6,7 +6,7 @@
PINPer favor, autentiqueu-vos per a iniciar andOTP!
- Per favor, confirmeu la vostra autenticació per a generar
+ Per favor, confirmeu l\'autenticació per a generar
la clau de xifratge nova!Desbloqueja
diff --git a/app/src/main/res/values-ca/strings_backup.xml b/app/src/main/res/values-ca/strings_backup.xml
index 470f6013..d92bace4 100644
--- a/app/src/main/res/values-ca/strings_backup.xml
+++ b/app/src/main/res/values-ca/strings_backup.xml
@@ -20,15 +20,14 @@
Restaura el conte desde un ficher JSON protegit amb contrasenya
creat amb una versió de andOTP prévia a 0.6.3Restaura els comptes d\'un fitxer JSON xifrat amb OpenPGP
- Failed to load the backup password from the Settings,
- this either means no password was set or something went wrong. You will be asked to enter
- the password manually when creating or importing a backup.
+ No ha estat possible carregar la còpia de seguretat de la contrasenya de Preferències,
+ això pot ser perquè no hi ha cap contrasenya o perquè alguna cosa ha fallat. Haureu d\'escriure
+ la contrasenya manualment quan creeu o importeu una còpia de seguretat.
+ Cal instal·lar un programa OpenPGP i habilitar-lo
+ a Preferències per a fer servir aquesta característica.
- You need to install an OpenPGP provider and enable
- it in the Settings to use this feature.
-
- You need to select an OpenPGP key in the Settings
- before you can create encrypted backups.
+ Cal triar una clau OpenPGP a Preferències
+ per a poder crear còpies xifrades.
Si està activat les entrades antigues són substituïdes quan s\'importa una
còpia de seguretat i només hi queda la còpia. Si no, les entrades velles i les còpies de seguretat
@@ -38,32 +37,29 @@
Realment voleu exportar la base de dades com a
fitxer de text net JSON? Aquest fitxer contindrà les vostres claus secretes; per favor, manteniu-lo ben protegit!
- Backup failed
- Backup successful
- Plain-text backups are currently not allowed,
- please go to the Settings to enable them
- Encrypted backups are currently not allowed,
- please go to the Settings to enable them
+ La còpia de seguretat ha fallat
+ S\'ha realitzat la còpia de seguretat
+ Les còpies de seguretat en text pla no són permeses,
+ podeu activar-les a Preferències
+ Les còpies de seguretat xifrades no són permeses,
+ podeu activar-les a PreferènciesRead permission not granted, please do
this before attempting backupWrite permission not granted, please do
this before attempting backupPassword/PIN based encryption not
supported with broadcast backup
- New encryption method
- Since version 0.6.3 of andOTP, a new and improved
- encryption method is used for password-protected backups. The old backups can still be
- imported, but it is highly recommended to create new backups with the improved
- encryption.\n\nThis message will not be shown again.
- Automatic backup failed
- Automatic backup successful
- These notifications are shown when an
- automatic backup has failed for some reason
- These notifications are shown when an
- automatic backup was successful
+ La còpia de seguretat automàtica ha fallat
+ La còpia de seguretat automàtica s\'ha realitzat
+ Aquestes notificacions es mostres quan la
+ còpia de seguretat automàtica falla
+ Aquests notificacions es mostren quan la
+ còpia de seguretat reïx
- No ha pogut crear el directori de còpia de seguretat
+ Per favor, configureu la localització per defecte de les còpies de seguretat!
+ No ha estat possible accedir a la localització de les còpies de seguretat!
+ No ha estat possible crear el fitxer de còpia de seguretat!Exportació a l\'emmagatzematge extern correctaL\'exportació a emmagatzematge extern ha fallatImportació des de l\'emmagatzematge extern correcta
@@ -71,9 +67,8 @@
El desxifratge de la còpia ha fallatNo s\'han trobat cap entrada en les dades importadesL\'emmagatzematge extern no és accessible actualment
- Permisos d\'emmagatzematge no conceditsError OpenPGP: %sNo s\'ha detectat cap signatura verificada
- Password not set, check the Settings
- Can\'t open file selection dialog!
+ No hi ha cap contrasenya establerta, comproveu les Preferències
+ No ha estat possible obrir el diàleg de seleccio de fitxers!
diff --git a/app/src/main/res/values-ca/strings_intro.xml b/app/src/main/res/values-ca/strings_intro.xml
index 0e1db0ce..5039c927 100644
--- a/app/src/main/res/values-ca/strings_intro.xml
+++ b/app/src/main/res/values-ca/strings_intro.xml
@@ -1,36 +1,38 @@
- Let\'s get started
- Welcome to andOTP, this wizard will guide you through
- the initial setup. Please pay attention and read carefully otherwise you could lose data!
- \n\nDon\'t worry, you can still change any of the options later in the Settings.
- To ensure the security of your accounts andOTP only
- stores them in encrypted data files. Here you can choose which method of encryption will be
- used.
- The KeyStore is a system component of Android for
- securely storing cryptographic keys. The advantage of this method is that the keys are
- stored separated from the data files and can be backed by hardware cryptography (if your
- device supports it). However, as the keys are not stored with the apps data, this method
- prevents external backup solutions (like Titanium) from working. If you choose this
- method you will have to rely on the internal backup functions provided by andOTP.
- \n\nWarning: The KeyStore is known to cause a lot of problems, please only use it if
- you absolutely have to. If you don\'t mind entering a password / PIN every time you start
- andOTP it is highly recommended to use the password-based encryption instead.
+ Comencem
+ Benvinguda a andOTP! Aquest assistents us guiarà en el
+ procés de configuració inicial. Pareu atenció i llegiu atentament per tal d\'evitar la pèrdua de dades.
+ \n\nNo patiu, podreu canviar qualsevol opció a Preferències.
+ Per tal de garantir la seguretat dels vostres comptes, andOTP fa servir
+ xifratge per a desar les dades. Aquí podeu triar el mètode de xifratge que
+ s\'hi farà servir.
+ The KeyStore is a system component of Android used to
+ securely store cryptographic keys. The advantage of using the KeyStore is that the keys are
+ stored separately from andOTP\'s data, and can be backed by hardware-based encryption
+ (if your device supports it). However, as the keys are not stored with andOTP\'s data,
+ this method prevents external backup solutions (like Titanium) from working. If you
+ choose this method, you will have to rely on the internal backup functions provided by
+ andOTP.\n\nWarning: The KeyStore is known to cause many problems, so
+ please only use it if you absolutely have to. If you don\'t mind entering a password / PIN
+ every time you start andOTP, it is highly recommended to use the password-based
+ encryption instead.This method will encrypt your data with a key
- generated from a password or PIN. The main advantage here is that this will work with
- external backup solutions (like Titanium) and is much less failure-prone than the KeyStore.
- However, you will have to enter your credentials every time you start andOTP.
- Here you can setup an authentication to lock
- andOTP. Since you have chosen Android KeyStore as encryption method this is
- optional.
- Here you can setup an authentication to lock
- andOTP. Since you have chosen Password / PIN as encryption method you need to
- set either a password or a PIN to proceed.
+ generated from a password or PIN. The main advantage of using this method is that external
+ backup solutions (like Titanium) will work as expected, and it is much less failure-prone
+ than the KeyStore. However, you will have to enter your credentials every time you start
+ andOTP.
+ Here you can setup an authentication method to lock
+ andOTP. Since you have chosen Android KeyStore as your encryption method, this
+ step is optional.
+ Here you can setup an authentication method to lock
+ andOTP. Since you have chosen Password / PIN as your encryption method, a
+ password or a PIN must be set to proceed.Please set a password to continue!Please set a PIN to continue!Please confirm your password to continue!Please confirm your PIN to continue!Finished
- Your settings have been saved, you are all set to use
- andOTP now!
+ Your settings have been saved, you are now all set to use
+ andOTP!
diff --git a/app/src/main/res/values-ca/strings_main.xml b/app/src/main/res/values-ca/strings_main.xml
index 709d06f1..c45aad88 100644
--- a/app/src/main/res/values-ca/strings_main.xml
+++ b/app/src/main/res/values-ca/strings_main.xml
@@ -9,7 +9,7 @@
ConfiguracióTotes les etiquetesSense etiquetes
- QR code from image
+ codi QR de la imatge%d s
@@ -22,7 +22,7 @@
PeríodeDígitsComptador
- Issuer
+ EmissorEtiquetaAlgorismeEtiquetes
@@ -37,14 +37,21 @@
ConfiguracióOrdenaSense ordenar
- Issuer
+ EmissorEtiquetaÚltimes utilitzades
- Most used
- Edit
+ Més utilitzades
+ EditaCanvia la imatgeSuprimeix
- Show QR Code
+ Mostra el codi QR
+
+ Més opcions
+ Més opcions per a %1$s
+ Copia el testimoni
+ Copia el testimoni de %1$s
+ Afegeix un compte nou
+ Tanca el menúError d\'autenticació. Torneu-ho a intentar!L\'autenticació ha fallat, andOTP es tancarà!
@@ -52,44 +59,38 @@
Aquest element ja existeixCodi QR no vàlidNo s\'ha carregat la clau de xifratge
- Invalid intent-provided code
- Intent-provided code added
- Could not open the file
- Could not find/confirm QR code
- Checksum verification failed while decoding QR code
- Format error in QR code
- QR Code not supported
- Failed to generate QR Code
+ El codi passat per l\'aplicació no és vàlid
+ S\'ha afegit un codi proporcionat per una aplicació
+ No ha estat possible obrir el fitxer
+ No ha estat possible trobar/confirmar el codi QR
+ La suma de verificació ha fallat mentre descodificava el QR
+ Error de format en el codi QR
+ Codi QR no suportat
+ La generació del codi QR ha fallat
- Invalid secret
+ Clau invàlidaAutenticaIntroduïu-ne els detallsSuprimeixCanvia el nomComptador
- Tokens usage
+ Ús de testimonisError al magatzem de claus
- QR Code
- Deprecation notice
+ Codi QRIntroduïu la contrasenyaIntroduïu la contrasenyaConfirmeu la contrasenyaPer favor, introduïu les vostres credencials per a iniciar andOTP.Segur que voleu suprimir el compte \"%1$s\"?
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ andOTP registrarà quan feu servir els testimonis (quan feu servir
+ «Toqueu per a mostrar» o copieu al portaretalls) per tal d\'ordenar-los per nombre d\'usos o
+ últim ús.\n\nAquest missatge no tornarà a aparèixer.No s\'ha pogut carregar la clau de xifratge del KeyStore.
Qualsevol entrada que s\'hi hagin afegit es perdrà.\n\nPer a continuar usant andOTP, podeu
anar a la Configuració i canviar el xifratge de la base de dades a Contrasenyes / PIN.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.Escaneja un codi QR
- Import QR code
+ Importa un codi QRIntroduïu-ne els detalls
diff --git a/app/src/main/res/values-ca/strings_settings.xml b/app/src/main/res/values-ca/strings_settings.xml
index da15db50..d4634818 100644
--- a/app/src/main/res/values-ca/strings_settings.xml
+++ b/app/src/main/res/values-ca/strings_settings.xml
@@ -1,6 +1,6 @@
- Configuració
+ PreferènciesSeguretatInterfície d\'usuari
@@ -13,35 +13,36 @@
PINXifratge de la base de dadesBotó del pànic
- Re-lock on screen off
- Re-lock when going into the background
- Re-lock on inactivity
- Delay for inactivity re-lock
- Block accessibility services
+ Torna a blocar quan s\'apaga la pantalla
+ Torna a blocar quan l\'aplicació va a segon pla
+ Torna a blocar després d\'un període d\'inactivitat
+ Temps d\'espera per al blocat per inactivitat
+ Bloca els serveis d\'accessibilitat
+ Bloca l\'emplenament automàticIdiomaTema
- Card layout
+ Disposició de les targetesMida de la lletra de l\'etiquetaPermet el desplaçament a les etiquetes
- Single-tap
- Double-tap
+ Un toc
+ Doble tocMida de la miniaturaSepara el testimoni amb espais
- Tag selection behavior
- Minimize app after copying OTP
- Search behavior
- Highlight expiring tokens
- Hide global timeout bar
- Show individual timeouts
- Append date to filename
+ Comportament de la selecció de les etiquetes
+ Minimitza l\'aplicació després de copiar l\'OTP
+ Comportament de la cerca
+ Destaca els testimonis que caduquen
+ Amaga la barra global de temps d\'espera
+ Mostra els temps d\'espera individuals
+ Afegeix la data al nom del fitxerDemana el nom de fitxer
- Directori de còpia de seguretat
+ Localització per defecte per a les còpies de seguretatContrasenya de la còpia de seguretat
- Automatically backup on new entries
+ Fes una còpia de seguretat en crear una nova entradaBackup Broadcasts
- OpenPGP provider
- OpenPGP encryption key
- OpenPGP signing key (optional)
+ Proveïdor d’OpenPGP
+ Clau de xifrat d\'OpenPGP
+ Clau de signat d\'OpenPGP (opcional)Verifica les còpies de seguretat xifradesHabilita les característiques especialsPermet screenshots
@@ -53,41 +54,49 @@
Indiqueu durant quant de temps (en segons)
es mostraran les entradesDecidiu què fer quan es prem el botó del pànic
- Require authentication after the devices screen
- has been turned off
- Require authentication after the app was sent to
- the background (e.g. by pressing the home button)
- Require authentication after the device has been
- inactive
- Select the time (in sec) after which to
- require reauthentication
- Hide sensitive fields from the accessibility
- services. DO NOT enable this if you rely on the accessibility services!
+ Demana autenticació després que la pantalla
+ s\'hagi apagat
+ Demana autenticació després que l\'aplicació
+ se\'n vagi a segon pla (p. ex. prement el botó «inici»)
+ Demana autenticació després que el dispositiu ha
+ estat inactiu
+ Indiqueu després quant de temps (en segons)
+ es demanarà reautenticació
+ Oculta els camps sensibles als serveis
+ d\'accessibilitat. NO l\'activeu si us calen els serveis d\'accessibilitat
+ Bloca l\'accés dels serveis d\'emplenament automàtic
+ als camps de contrasenya en l\'aplicació
+ Aquesta característica exigeix una versió d\'Android
+ superior a la 8.0 (Oreo)Les etiquetes llargues es desplacen en comptes de truncar-les
- App will be minimized when you copy the OTP to clipboard
- Specify which values should be included when searching
- Highlights token in red if it\'s expiring in 8 seconds
- Hide the global timeout bar shown at the top of the screen
- Show an individual timeout bar for every entry.
- This can slow down the app, only enable if really necessary.
- Append the current date and time to the suggested
- backup filename
+ L\'aplicació es minimitzarà després d\'haver copiat l\'OTP al portaretalls
+ Especifiqueu quins valors haurien de ser inclosos en la cerca
+ Destaca el testimoni en vermell si caduca en 8 segons
+ Amaga la barra global de temps d\'espera en la part superior de la pantalla
+ Mostra una barra de temps d\'espera per a cada entrada.
+ Això pot alentir l\'aplicació, activeu-la només si realment us cal.
+ Afegeix la data i hora actuals al nom suggerit per
+ al fitxer de còpia de seguretatDemana el nom del fitxer cada vegada que es crea o restaura una còpia de seguretat
+ Tria una localització per defecte per a les còpies de seguretat
+ S\'ha triat la localització per a les còpies de seguretatContrasenya que s\'usarà per a xifrar les
còpies de seguretat
- Creates a new encrypted backup when new
- entries are added, or edited, if settings conditions are met
+ Crea una còpia de seguretat nova quan s\'afegeixin o
+ editin entrades, si s\'hi compleixen les condicions
+ Trieu una localització per defecte per a les còpies de seguretat i
+ una contrasenya per a activar aquesta opcióSelect which backup types can be triggered by
3rd-party apps using Broadcasts
- Mail address of the OpenPGP key used to encrypt
- the backups
- Només s\'importaran còipes xifrades si s\'han
+ Adreça de correu de la clau OpenPGP usada per a
+ xifrar les còpies de seguretat
+ Només s\'importaran còpies xifrades si s\'han
signat amb una clau vàlidaDesmarqueu per a deshabilitar les característiques especialsPermet fer captures de la pantalla principal
(desactivat per defecte per motius de seguretat)
- Enables andOTP to use Android\'s
- built in backup service to backup keys and preferences
+ Permet que andOTP faci servir el servei de còpies de seguretat
+ inclòs a Android per a desar les claus i les preferènciesEsborra la clau d\'encriptació del magatzem de clausAquesta característica requereix un bloqueig de pantalla
@@ -106,10 +115,10 @@
Ha fallat l\'autenticació!Ha fallat l\'actualització automàtica de la contrasenya / PIN
per al nou xifratge; per favor, reinicialitzeu-la manualment en la configuració!
- Warning
+ AlertaErrorVoleu neteja el magatzem de claus?
- Android sync
+ Sistema de còpies de seguretat d\'AndroidandOTP will now try to change the database
encryption. In case of a failure an internal backup will be restored and the encryption
remains unchanged.\n\nHowever, it\'s always a good idea to have a backup in case
@@ -145,25 +154,25 @@
Reinicialitza les opcions de l\'aplicació
- Compact
- Default
- Full
+ Compacte
+ Per defecte
+ Complet
- Nothing
- Reveal/Hide
- Copy
- Copy and go to background
+ Res
+ Mostra/Oculta
+ Copia
+ Copia i passa a segon pla
- Label
- Issuer
- Tags
+ Etiqueta
+ Emissor
+ EtiquetesOff
- New Entries
- Any Edits
+ Entrada nova
+ Totes les edicionsTema clar
@@ -172,11 +181,11 @@
Ocult
- Tiny
- Small
- Default
- Medium
- Large
+ Molt petita
+ Petita
+ Per defecte
+ Mitjana
+ GrossaNo dividir
@@ -184,13 +193,13 @@
Després de tres caràcters
- Show all entries matching any of the selected tags (or)
- Only show entries matching all of the selected tags (and)
- Switch between tags (only allow one tag to be selected at a time)
+ Mostra totes les entrades en què hi ha alguna de les etiquetes (OR)
+ Mostra totes les entrades en què apareixen totes les etiquetes (AND)
+ Commuta entre etiquetes (només permet de seleccionar una etiqueta cada vegada)
- Plain-text backups
- Encrypted backups
+ Còpies de seguretat en text pla
+ Còpies de seguretat xifradaValor del sistema per defecte
diff --git a/app/src/main/res/values-cs/strings_auth.xml b/app/src/main/res/values-cs/strings_auth.xml
index 908a3d9d..e2186b06 100644
--- a/app/src/main/res/values-cs/strings_auth.xml
+++ b/app/src/main/res/values-cs/strings_auth.xml
@@ -6,7 +6,7 @@
PINPřihlašte se pro spuštění andOTP!
- Prosím potvrďte své přihlášení pro vygenerování nového šifrovacího klíče!
+ Pro vygenerování šifrovacího klíče prosím potvrďte své přihlášení!Odemknout
diff --git a/app/src/main/res/values-cs/strings_backup.xml b/app/src/main/res/values-cs/strings_backup.xml
index a263a010..14401964 100644
--- a/app/src/main/res/values-cs/strings_backup.xml
+++ b/app/src/main/res/values-cs/strings_backup.xml
@@ -35,17 +35,15 @@ který byl vytvořen pomocí verze andOTP nižší než 0.6.3Nebylo uděleno oprávnění ke čtení, prosím udělte ho před pokusem o zálohováníNebylo uděleno oprávnění k zápisu, prosím udělte ho před pokusem o zálohováníŠifrování heslem/PINem není podporováno v kombinaci s automatizovaným zálohováním
- Nová metoda šifrování
- Od veze 0.6.3 se pro ochranu heslem používá nová a vylepšená metoda šifrování
-Stále lze importovat staré zálohy, ale velmi se doporučuje vytvořit novou zálohu s vylepšeným šifrováním.
-\n\nTato zpráva se již nezobrazí.Automatické zálohování selhaloAutomatické zálohování proběhlo úspěšněTato upozornění se zobrazí, když automatické zálohování z nějakého důvodu selžeTato upozornění se zobrazí, když automatické zálohování proběhne úspěšně
- Nepodařilo se vytvořit záložní adresář
+ Prosím nastavte výchozí umístění zálohy v nastavení!
+ Nepodařilo se získat přístup k umístění zálohy!
+ Nepodařilo se vytvořit soubor zálohy!Export na externí úložiště byl úspěšnýExport na externí úložiště selhalImport z externího úložiště byl úspěšný
@@ -53,7 +51,6 @@ Stále lze importovat staré zálohy, ale velmi se doporučuje vytvořit nov
Dešifrování zálohy se nezdařiloV importovaných datech nebyly nalezeny žádné záznamyExterní úložiště teď není dostupné
- Oprávnění pro úložiště nebylo udělenoChyba OpenPGP: %sNenalezen ověřený podpisHeslo není nastaveno, zkontrolujte Nastavení
diff --git a/app/src/main/res/values-cs/strings_main.xml b/app/src/main/res/values-cs/strings_main.xml
index 880df42c..844186fd 100644
--- a/app/src/main/res/values-cs/strings_main.xml
+++ b/app/src/main/res/values-cs/strings_main.xml
@@ -41,10 +41,17 @@
PopisNaposledy použitéNejpoužívanější
- Edit
+ UpravitZměnit obrázekSmazatUkaž QR kód
+
+ Další volby
+ Další volby pro %1$s
+ Kopírovat token
+ Kopírovat %1$s token
+ Přidat nový účet
+ Zavřít nabídkuChyba ověření, zkuste to prosím znovu!Ověření se nezdařilo, zavírám andOTP!
@@ -68,25 +75,19 @@
SmazatPřejmenováníPočítadlo
- Tokens usage
+ Využití tokenůChyba úložiště klíčůQR kód
- Oznámení o ukončení podporyZadejte hesloZadejte hesloPotvrďte hesloProsím zadejte heslo zařízení ke spuštění andOTP.Jste si jistí, že chcete odebrat účet \"%1$s\"?
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ andOTP bude sledovat, když použijete své tokeny (pomocí funkce \"Klepněte
+ pro odhalení\" nebo je zkopírujete do schránky), abyste je mohli řadit podle \"Nejčastěji používaných\" nebo
+ \"Naposledy použito\".\n\nTato zpráva nebude znovu zobrazena.Nepodařilo se načíst šifrovací klíč z KeyStore.
Veškeré přidané položky budou ztraceny. \n\nPro zajištění použitelnosti andOTP v Nastavení přepněte Šifrování databáze na heslo / PIN.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.Načíst QR kódImportovat QR kód
diff --git a/app/src/main/res/values-cs/strings_settings.xml b/app/src/main/res/values-cs/strings_settings.xml
index 37b8a63c..f96efb67 100644
--- a/app/src/main/res/values-cs/strings_settings.xml
+++ b/app/src/main/res/values-cs/strings_settings.xml
@@ -18,24 +18,25 @@
Zamknout při nečinnostiZpoždění zámku při neaktivitěBlokovat služby usnadnění přístupu
+ Blokovat automatické vyplňováníJazykVzhledRozložení karetVelikost písma popiskuPohybující se popisky
- Single-tap
- Double-tap
+ Jedno klepnutí
+ Dvojí poklepáníVelikost náhleduRozdělit token mezeramiChování výběru štítkůMinimalizovat aplikaci po zkopírování OTPZpůsob vyhledáváníZvýraznit tokeny s končící platností
- Hide global timeout bar
- Show individual timeouts
+ Skrýt společnou časovou lištu
+ Zobrazit individuální časové limityPřidání data k názvu souboruZadejte název souboru
- Adresář záloh
+ Výchozí umístění zálohyHeslo pro zálohuAutomaticky zálohovat při přidání nových položekPříkazy k zálohování
@@ -56,17 +57,24 @@
Vyžadovat přihlášení poté, co bylo zařízení neaktivníZvolte čas v sekundách, po kterém bude opět potřeba přihlášeníSkrýt pole s citlivými informacemi před službami pro usnadnění přístupu. NEAKTIVUJTE pokud spoléháte na služby usnadnění přístupu!
+ Blokovat službám automatického vyplňování přístup k polím sloužícím k zadání
+ hesla uvnitř aplikace
+ Tato funkce vyžaduje vyšší verzi Android
+ než 8.0 (Oreo)Posouvat příliš dlouhé popisky namísto zkracováníAplikace bude minimalizována, když zkopírujete OTP do schránkyUrčete, které hodnoty by měly být zahrnuty při hledáníZvýraznit token červeně, pokud vyprší do 8 sekund
- Hide the global timeout bar shown at the top of the screen
- Show an individual timeout bar for every entry.
- This can slow down the app, only enable if really necessary.
+ Skrýt společnou časovou lištu v horní části obrazovky
+ Zobrazit individuální časový limit pro každý záznam.
+ Může to zpomalit aplikaci, povolte, pouze pokud je to opravdu nutné.Přidá aktuální datum a čas k navrhovanému názvu záložního souboruDotazovat se na název souboru vždy při vytváření či obnovování zálohy
+ Zvolte výchozí umístění zálohy
+ Umístění zálohy bylo vybránoNastaví heslo používané k šifrování zálohVytvoří novou šifrovanou zálohu při vytvoření či úpravě položek, když jsou splněny podmínky z nastavení
+ Pro povolení této volby nastavte umístění zálohy a heslo pro zálohuVyberte, které typy zálohování můžou být spuštěny pomocí příkazů od aplikací třetí stranyE-mailová adresa OpenPGP klíče použitého k šifrování zálohŠifrované zálohy jsou importovány pouze, jsou-li podepsány platným klíčem
@@ -117,10 +125,10 @@ V případě chyby bude obnovena interní záloha a šifrování zůstane nezmě
Plná
- Nothing
- Reveal/Hide
- Copy
- Copy and go to background
+ Nic
+ Zobrazit/skrýt
+ Kopírovat
+ Kopírovat a přejít na pozadíPopisek
diff --git a/app/src/main/res/values-de/strings_auth.xml b/app/src/main/res/values-de/strings_auth.xml
index d447078d..8064243a 100644
--- a/app/src/main/res/values-de/strings_auth.xml
+++ b/app/src/main/res/values-de/strings_auth.xml
@@ -6,7 +6,8 @@
PINBitte authentifizieren Sie sich, um andOTP zu starten!
- Bitte bestätigen Sie Ihre Authentifizierung um den neuen Verschlüsselungsschlüssel zu generieren!
+ Bitte bestätigen Sie die Authentifizierung, um Ihren
+ Schlüssel zu generieren!Entsperren
diff --git a/app/src/main/res/values-de/strings_backup.xml b/app/src/main/res/values-de/strings_backup.xml
index 85e9e857..bae7494d 100644
--- a/app/src/main/res/values-de/strings_backup.xml
+++ b/app/src/main/res/values-de/strings_backup.xml
@@ -42,18 +42,15 @@
zum Sichern benötigtPasswort/PIN Verschlüsselung ist nicht
unterstützt mit Broadcast Datensicherung
- Neue Verschlüsselungsmethode
- Seit Version 0.6.3 von andOTP, wird eine neue und verbesserte
- Verschlüsselungsmethode für passwortgeschützte Datensicherungen benutzt. Alte Datensicherungen
- können weiterhin importiert werden, aber es wird nachdrücklich empfohlen neue Datensicherungen mit
- der verbesserten Verschlüsselung zu erstellen.\n\nDiese Nachricht wird nicht erneut angezeigt.Automatische Sicherung fehlgeschlagenAutomatische Sicherung erfolgreichDiese Mitteilungen werden angezeigt, wenn eine automatische Sicherung aus irgendeinem Grund fehlgeschlagen ist.Diese Mitteilungen werden angezeigt, wenn eine automatische Sicherung erfolgreich war.
- Erstellen des Backup-Verzeichnisses fehlgeschlagen
+ Bitte legen Sie einen Standard-Sicherungsort in den Einstellungen fest!
+ Zugriff auf Sicherungsort fehlgeschlagen!
+ Fehler beim Erstellen der Sicherungsdatei!Export auf externen Speicher erfolgreichExport auf externen Speicher fehlgeschlagenImport vom externen Speicher erfolgreich
@@ -61,7 +58,6 @@
Entschlüsselung des Backups ist fehlgeschlagenIn den importierten Daten wurden keine Einträge gefundenExterner Speicher derzeit nicht zugreifbar
- Speicherberechtigung nicht gewährtOpenPGP-Fehler: %sKeine geprüfte Signatur erkanntKein Passwort gesetzt, überprüfe die Einstellungen
diff --git a/app/src/main/res/values-de/strings_main.xml b/app/src/main/res/values-de/strings_main.xml
index 7097975a..751398f3 100644
--- a/app/src/main/res/values-de/strings_main.xml
+++ b/app/src/main/res/values-de/strings_main.xml
@@ -45,6 +45,13 @@
Bild ändernEntfernenZeige QR-Code
+
+ Weitere Optionen
+ Weitere Optionen für %1$s
+ Token kopieren
+ %1$s Token kopieren
+ Neues Konto hinzufügen
+ Menü schließenAuthentifizierung fehlgeschlagen, bitte erneut versuchen!Authentifizierung fehlgeschlagen, andOTP wird geschlossen!
@@ -71,7 +78,6 @@
Verwendete TokenKeyStore FehlerQR-Code
- HinweisPasswort eingebenPasswort eingebenPasswort bestätigen
@@ -81,11 +87,6 @@
um anzuzeigen\" verwenden oder die sie in die Zwischenablage kopieren), um sie nach \"meistbenutzt\" oder
\"zuletzt verwendet\" zu sortieren.\n\nDiese Nachricht wird nicht wieder angezeigt.Fehler beim Laden des Verschlüsselungsschlüssels aus dem KeyStore. Alle Einträge, die hinzugefügt werden, gehen verloren.\n\nUm andOTP dennoch verwenden zu können, rufe die Einstellungen auf und setze die Datenbank-Verschlüsselung auf Passwort / PIN.
- Dies wird die letzte Version von andOTP sein, die
- Android-Versionen niedriger als 5.1 (Lollipop) unterstützt. Der erhöhte Aufwand zur Aufrechterhaltung einer separaten
- Speicherimplementierung nur für diese älteren Versionen und deren geringer Marktanteil
- machen eine fortgesetzte Unterstützung für unser kleines Team unmöglich.\n\nDiese Nachricht wird nicht erneut
- angezeigt.QR-Code scannenQR-Code importieren
diff --git a/app/src/main/res/values-de/strings_settings.xml b/app/src/main/res/values-de/strings_settings.xml
index a14aaebf..84878ba4 100644
--- a/app/src/main/res/values-de/strings_settings.xml
+++ b/app/src/main/res/values-de/strings_settings.xml
@@ -18,6 +18,7 @@
Bei Inaktivität sperrenZeit bis zur InaktivitätssperreEingabehilfen blockieren
+ Autofill verhindernSpracheDesignKartenlayout
@@ -35,7 +36,7 @@
Individuelle Timeouts anzeigenDatum an den Dateinamen anhängenNach Dateinamen fragen
- Sicherungsverzeichnis
+ Standard-SicherungsortDatensicherungs-PasswortAutomatische Datensicherung bei neuen EinträgenBroadcasts-Sicherungen
@@ -61,6 +62,9 @@
Zeit (in Sekunden) nach der erneute
Authentifizierung benötigt wirdVerstecke vertrauliche Einträge vor den Eingabehilfsdiensten. NICHT aktivieren, wenn Eingabehilfe benötigt wird!
+ Hindert Autofill-Dienste am Zugriff auf Passwortfelder in der App
+ Dieses Feature erfordert eine Android-Version
+ höher als 8.0 (Oreo)Überlange Beschriftungen scrollen, statt diese abzuschneidenApp wird minimiert wenn der OTP Code kopiert wurdeWelche Werte sollen in der Suche enthalten sein?
@@ -70,11 +74,15 @@
Dies kann die App verlangsamen, nur aktivieren, wenn wirklich notwendig.Aktuelles Datum und die aktuelle Uhrzeit an den vorgeschlagenen Sicherungsdateinamen anhängenJedes Mal nach dem Dateinamen fragen, wenn eine Sicherung erstellt oder wiederhergestellt wird
+ Wählen Sie eine Standard-Sicherungsort
+ Sicherungsort wurde ausgewähltPasswort festlegen, mit dem die Sicherungen verschlüsselt werden sollenErstellt eine neue verschlüsselte Datensicherung bei
Erstellung oder Bearbeitung von Einträgen, wenn Bedingungen erfüllt sind
+ Legen Sie einen Standard-Sicherungsort fest und setzen sie ein
+ Sicherungspasswort, um diese Option zu aktivierenÜber Broadcasts auswählen, welche Sicherungstypen von Drittanbieteranwendungen ausgelöst werden können.
- EMail-Adresse, mit welcher der OpenPGP-Schlüssel verschlüsselt wurde
+ E-Mail-Adresse, mit welcher der OpenPGP-Schlüssel verschlüsselt wurdeVerschlüsselte Sicherungen werden nur importiert,
wenn sie mit einem gültigen Schlüssel signiert sindHaken entfernen, um die speziellen Funktionen wieder zu deaktivieren
diff --git a/app/src/main/res/values-el/strings_auth.xml b/app/src/main/res/values-el/strings_auth.xml
index 8e497af5..5b395a91 100644
--- a/app/src/main/res/values-el/strings_auth.xml
+++ b/app/src/main/res/values-el/strings_auth.xml
@@ -6,7 +6,8 @@
PINΠαρακαλώ ταυτοποιηθείτε για να ξεκινήσει ο andOTP!
- Παρακαλώ επιβεβαιώστε την ταυτοποίησή σας για να παραχθεί το καινούριο κλειδί κρυπτογράφησης!
+ Παρακαλώ επιβεβαιώστε την επαλήθευση, για να δημιουργήσετε το δικό σας
+ κλειδί κρυπτογράφησης!Ξεκλείδωμα
diff --git a/app/src/main/res/values-el/strings_backup.xml b/app/src/main/res/values-el/strings_backup.xml
index d5400cbb..7a182198 100644
--- a/app/src/main/res/values-el/strings_backup.xml
+++ b/app/src/main/res/values-el/strings_backup.xml
@@ -38,18 +38,15 @@
Η άδεια για ανάγνωση δεν έχει δοθεί, παρακαλώ παραχωρήστε την πριν προσπαθήσετε να πάρετε αντίγραφο ασφαλείαςΗ άδεια για εγγραφή δεν έχει δοθεί, παρακαλώ παραχωρήστε την πριν προσπαθήσετε να πάρετε αντίγραφο ασφαλείαςΗ κρυπτογράφηση με κωδικό πρόσβασης ή PIN δεν υποστηρίζεται στα αντίγραφα ασφαλείας μέσω εκπομπής
- Νέα μέθοδος κρυπτογράφησης
- Από την έκδοση 0.6.3 της εφαρμογής andOTP, μία νέα και βελτιωμένη
- μέθοδος κρυπτογράφησης που χρησιμοποιείται για αντίγραφα ασφαλείας που προστατεύονται με κωδικό πρόσβασης. Τα παλιά αντίγραφα ασφαλείας μπορούν ακόμα να είναι
- εισάγονται, αλλά Συνιστάται ιδιαίτερα να δημιουργήσετε νέα αντίγραφα ασφαλείας με τη βελτιωμένη
- μέθοδο κρυπτογράφησης.\n\nΑυτό το μήνυμα δεν θα εμφανιστεί ξανά.Αποτυχία αυτόματης λήψης αντιγράφου ασφαλείαςΕπιτυχής αυτόματη λήψη αντιγράφου ασφαλείαςΑυτές οι ειδοποιήσεις εμφανίζονται όταν μία αυτόματη λήψη αντιγράφου ασφαλείας απέτυχε για κάποιο λόγοΑυτές οι ειδοποιήσεις εμφανίζονται όταν μία αυτόματη λήψη αντιγράφου ασφαλείας ήταν επιτυχής
- Αποτυχία δημιουργίας φακέλου αντιγράφων ασφαλείας
+ Καθορίστε μια προεπιλεγμένη θέση για δημιουργία αντιγράφων ασφαλείας στις ρυθμίσεις!
+ Αποτυχία πρόσβασης στην τοποθεσία αντιγράφων ασφαλείας!
+ Αποτυχία δημιουργίας αντιγράφου ασφαλείας!Εξαγωγή σε εξωτερική αποθήκευση επιτυχήςΗ εξαγωγή σε εξωτερική συσκευή αποθήκευσης απέτυχεΕισαγωγή από εξωτερική αποθήκευση επιτυχής
@@ -57,7 +54,6 @@
Η αποκρυπτογράφηση του αντιγράφου ασφαλείας απέτυχεΔεν βρέθηκαν εγγραφές στα δεδομένα που εισήχθηκανΗ εξωτερική αποθήκευση δεν είναι διαθέσιμη αυτή τη στιγμή
- Η άδεια για τον αποθηκευτικό χώρο δε χορηγήθηκεΣφάλμα OpenPGP: %sΔεν ανιχνεύτηκε επαληθευμένη υπογραφήΟ κωδικός πρόσβασης δεν έχει οριστεί, ελέγξτε τις ρυθμίσεις
diff --git a/app/src/main/res/values-el/strings_main.xml b/app/src/main/res/values-el/strings_main.xml
index 32af516a..bc11a68e 100644
--- a/app/src/main/res/values-el/strings_main.xml
+++ b/app/src/main/res/values-el/strings_main.xml
@@ -41,10 +41,17 @@
ΕτικέταΤελευταία χρήσηΤελευταία χρήση
- Edit
+ ΕπεξεργασίαΑλλαγή εικόναςΔιαγραφή
- Show QR Code
+ Εμφάνιση QR Code
+
+ Περισσότερες επιλογές
+ Περισσότερες επιλογές για %1$s
+ Αντιγραφή διακριτικού
+ Αντιγραφή %1$s διακριτικού
+ Προσθήκη νέου λογαριασμού
+ Κλείσιμο μενούΗ ταυτοποίηση απέτυχε. Παρακαλώ προσπάθησε ξανά!Απέτυχε ο έλεγχος ταυτότητας, κλείνει το andOTP!
@@ -58,34 +65,28 @@
Δεν ήταν δυνατή η εύρεση/επιβεβαίωση του κώδικα QRΑποτυχία επαλήθευσης κατά την αποκωδικοποίηση του QR κώδικαΣφάλμα μορφοποίησης κώδικα QR
- QR Code not supported
- Failed to generate QR Code
+ Ο κώδικας QR δεν υποστηρίζεται
+ Αποτυχία δημιουργίας κωδικού QR
- Invalid secret
+ Μη έγκυρο secretΤαυτοποίησηΕισάγετε λεπτομέρειεςΔιαγραφήΜετονομασίαΜετρητής
- Tokens usage
+ Χρήση tokensΣφάλμα KeyStore
- QR Code
- Deprecation notice
+ Κώδικας QRΕισάγετε κωδικόΕισάγετε κωδικόΕπιβεβαίωση κωδικούΠαρακαλούμε εισαγάγετε τα διαπιστευτήριά σας για να ανοίξετε το andOTP.Σίγουρα θέλετε να αφαιρέσετε το λογαριασμό \"%1$s\";
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ το andOTP θα παρακολουθεί όταν χρησιμοποιείτε τα διακριτικά σας (χρησιμοποιώντας το \"Πατήστε
+ για να εμφανίσετε τη λειτουργία \"ή να αντιγράψετε στο πρόχειρο\") για να μπορείτε να τα ταξινομήσετε με το \"Πιο χρησιμοποιημένο\" ή
+ \"Τελευταία χρήση\". \n\nΑυτό το μήνυμα δεν θα εμφανιστεί ξανά.Αποτυχία φόρτωσης του κλειδιού κρυπτογράφησης από το KeyStore. Τυχόν εγγραφές που προστέθηκαν θα χαθούν.\n\nΓια να είναι εφικτή η χρήση του andOTP μπορείτε να μεταβείτε στις Ρυθμίσεις και να αλλάξετε από Κρυπτογράφηση Βάσης Δεδομένων σε Κωδικός πρόσβασης / PIN.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.Σάρωση κωδικού QRΕισαγωγή κώδικα QR
diff --git a/app/src/main/res/values-el/strings_settings.xml b/app/src/main/res/values-el/strings_settings.xml
index a93bb4b8..89bd463e 100644
--- a/app/src/main/res/values-el/strings_settings.xml
+++ b/app/src/main/res/values-el/strings_settings.xml
@@ -18,24 +18,25 @@
Κλείδωμα ξανά σε κατάσταση αδράνειαςΚαθυστέρηση κλειδώματος σε κατάσταση αδράνειαςΑποκλεισμός υπηρεσιών προσβασιμότητας
+ Αποκλεισμός αυτόματης-συμπλήρωσηςΓλώσσαΘέμαΔιάταξη κάρταςΜέγεθος γραμματοσειράς ετικέταςΕτικέτα κύλισης
- Single-tap
- Double-tap
+ Μονό πάτημα
+ Διπλό πάτημαΜέγεθος μικρογραφίαςΔιαχωρισμός τεκμηρίων με διάστημαΕπιλογή συμπεριφοράς ετικετώνΕλαχιστοποίηση εφαρμογής μετά την αντιγραφή του OTPΣυμπεριφορά αναζήτησηςΕπισήμανση τεκμηρίων που λήγουν
- Hide global timeout bar
- Show individual timeouts
+ Απόκρυψη καθολικής γραμμής χρονικού ορίου
+ Εμφάνιση μεμονωμένων χρονικών ορίωνΠροσθήκη ημερομηνίας στο όνομα αρχείουΕρώτηση για όνομα αρχείου
- Κατάλογος αντιγράφων
+ Προεπιλεγμένη τοποθεσία αντιγράφου ασφαλείαςΚωδικός αντιγράφωνΑυτόματη δημιουργία αντιγράφων νέων καταχωρήσεωνΑντίγραφο ασφαλείας Broadcasts
@@ -63,21 +64,29 @@
θα απαιτείται επανάληψη του ελέγχου ταυτότηταςΑπόκρυψη ευαίσθητων πεδίων από τις υπηρεσίες
προσβασιμότητας. ΜΗΝ το ενεργοποιήσετε αν βασίζεστε στις υπηρεσίες προσβασιμότητας!
+ Αποκλείστε τις υπηρεσίες αυτόματης συμπλήρωσης από την πρόσβαση στον κωδικό πρόσβασης
+ πεδία εντός της εφαρμογής
+ Αυτή η λειτουργία απαιτεί έκδοση Android
+ πάνω από 8.0 (Oreo)Κύλιση σε υπερβολικά μεγάλες ετικέτες αντί για περικοπή τουςΗ εφαρμογή θα ελαχιστοποιείται όταν αντιγράφετε το OTP στο πρόχειροΚαθορίστε ποιες τιμές θα πρέπει να συμπεριληφθούν κατά την αναζήτησηΕπισήμανση τεκμηρίου με κόκκινο χρώμα αν λήγει σε 8 δευτερόλεπτα
- Hide the global timeout bar shown at the top of the screen
- Show an individual timeout bar for every entry.
- This can slow down the app, only enable if really necessary.
+ Απόκρυψη της καθολικής γραμμής χρονικού ορίου που εμφανίζεται στο πάνω μέρος της οθόνης
+ Εμφάνιση μεμονωμένης γραμμής χρονικού ορίου για κάθε καταχώριση.
+ Αυτό μπορεί να επιβραδύνει την εφαρμογή, ενεργοποιείστε το μόνο εάν είναι πραγματικά απαραίτητο.Προσθέστε την τρέχουσα ημερομηνία και ώρα στο προτεινόμενο
όνομα αρχείου αντιγράφου ασφαλείαςΕρώτηση για το όνομα του αρχείου κάθε φορά που δημιουργείται ένα αντίγραφο ασφαλείας ή
επαναφορά αυτού
+ Επιλέξτε μια προεπιλεγμένη θέση των αντιγράφων ασφαλείας
+ Η τοποθεσία των αντιγράφων ασφαλείας δημιουργήθηκεΟρισμός κωδικού που χρησιμοποιείται για την κρυπτογράφηση
αντιγράφων ασφαλείαςΔημιουργία ενός νέου κρυπτογραφημένου αντιγράφου ασφαλείας όταν νέες
εγγραφές προστίθενται ή επεξεργάζονται, εφόσον πληρούνται οι προϋποθέσεις
+ Καθορίστε μια προεπιλεγμένη θέση δημιουργίας αντιγράφων ασφαλείας και ένα
+ εφεδρικό κωδικό για να ενεργοποιήσετε αυτήν την επιλογήΕπιλέξτε ποιοι τύποι αντιγράφων μπορούν να ενεργοποιηθούν από
εφαρμογές τρίτων που χρησιμοποιούν BroadcastsΔιεύθυνση email του κλειδιού OpenPGP που χρησιμοποιείται για την κρυπτογράφηση
@@ -154,10 +163,10 @@
Πλήρης
- Nothing
- Reveal/Hide
- Copy
- Copy and go to background
+ Τίποτα
+ Εμφάνιση/Απόκρυψη
+ Αντιγραφή
+ Αντιγράψτε και μεταβείτε στο παρασκήνιοΕτικέτα
diff --git a/app/src/main/res/values-es/strings_auth.xml b/app/src/main/res/values-es/strings_auth.xml
index aeacb1b3..6e607fd8 100644
--- a/app/src/main/res/values-es/strings_auth.xml
+++ b/app/src/main/res/values-es/strings_auth.xml
@@ -6,7 +6,7 @@
PIN¡Autentícate para iniciar andOTP!
- ¡Autentícate para generar la nueva clave de cifrado!
+ ¡Confirme la autenticación para generar su clave de cifrado!Desbloquear
diff --git a/app/src/main/res/values-es/strings_backup.xml b/app/src/main/res/values-es/strings_backup.xml
index ddae9d3c..cd1ebf36 100644
--- a/app/src/main/res/values-es/strings_backup.xml
+++ b/app/src/main/res/values-es/strings_backup.xml
@@ -45,18 +45,15 @@
hazlo antes de intentar hacer una copia de seguridadCifrado basado en clave/PIN no
soportado en la copia de seguridad de difusión
- Nuevo método de cifrado
- A partir de la versión 0.6.3 de andOTP, se utiliza un nuevo y mejorado
- método de cifrado para copias de seguridad protegidas por contraseña. Las copias de seguridad antiguas aún pueden ser
- importadas, pero es sumamente recomendable crear nuevas copias de seguridad con
- el cifrado mejorado.\n\nEste mensaje no se mostrará nuevamente.Falló la copia de seguridad automáticaLa copia de seguridad automática se realizó con éxitoEstas notificaciones se muestran cuando una copia de seguridad automática falla por algún motivoEstas notificaciones se muestran cuando una copia de seguridad automática se realiza con éxito
- Fallo al crear la carpeta para copias de seguridad
+ Por favor, establezca una ubicación de copia de seguridad predeterminada en la configuración!
+ ¡Error al acceder a la ubicación de la copia de seguridad!
+ ¡Error al crear el archivo de copia de seguridad!Exportado a almacenamiento externo con éxitoFallo al exportar al almacenamiento externoImportado desde el almacenamiento externo con éxito
@@ -64,7 +61,6 @@
Fallo al descifrar la copia de seguridadNo se encontraron elementos en los datos importadosAlmacenamiento externo actualmente inaccesible
- Permiso de almacenamiento no concecidoError OpenPGP: %sNinguna firma verificable detectadaContraseña no establecida, revise los Ajustes
diff --git a/app/src/main/res/values-es/strings_main.xml b/app/src/main/res/values-es/strings_main.xml
index 269e7d78..c897dcac 100644
--- a/app/src/main/res/values-es/strings_main.xml
+++ b/app/src/main/res/values-es/strings_main.xml
@@ -45,6 +45,13 @@
Cambiar imagenEliminarMostrar código QR
+
+ Más opciones
+ Más opciones para %1$s
+ Copiar token
+ Copiar %1$s token
+ Añadir nueva cuenta
+ Cerrar menúLa autentificación ha fallado, por favor inténtelo otra vez!La autenticación ha fallado, cerrando andOTP!
@@ -71,7 +78,6 @@
Uso de tokensError en el almacen de clavesCódigo QR
- Aviso de deprecaciónIntroduzca la contraseñaIntroduzca la contraseñaConfirmar contraseña
@@ -83,11 +89,6 @@
Error al cargar la clave del almacen de claves.
Cualquier entrada añadida se perderá.\n\nPara poder seguir usando andOTP puedes ir
a Ajustes y cambiar el Cifrado de base de datos a Contraseña / PIN.
- Esta será la última versión de andOTP para
- versiones de Android inferiores a 5.1 (Lollipop). El esfuerzo necesario para mantener una
- implementación de almacenamiento separada solo para esas versiones más antiguas, así como la baja cantidad
- de dispositivos activos hacen que no sea sostenible su mantenimiento.\n\nEst e mensaje no será
- mostrado de nuevo.Escanear código QRImportar código QR
diff --git a/app/src/main/res/values-es/strings_settings.xml b/app/src/main/res/values-es/strings_settings.xml
index 1453639f..66a5f3da 100644
--- a/app/src/main/res/values-es/strings_settings.xml
+++ b/app/src/main/res/values-es/strings_settings.xml
@@ -18,6 +18,7 @@
Volver a bloquear por inactividadRetraso para volver a bloquear por inactividadBloquear servicios de accesibilidad
+ Bloquear autorellenoIdiomaAspectoDiseño de tarjeta
@@ -35,7 +36,7 @@
Mostrar límites de tiempo individualesConcatenar fecha al nombre del ficheroPedir nombre de fichero
- Carpeta para copias de seguridad
+ Ubicación de copia de seguridad por defectoContraseña de copia de seguridadCopia de seguridad automática en nuevas entradasCopia de seguridad de difusión
@@ -62,6 +63,10 @@
requerir reautenticaciónOcultar campos sensibles de los servicios
de accesibilidad. ¡NO actives esto si utilizas los servicios de accesibilidad!
+ Bloquear servicios de autorrelleno accediendo a campos de contraseña
+ dentro de la aplicación
+ Esta función requiere una versión de Android
+ superior a 8.0 (Oreo)Desplazar etiquetas en lugar de truncarlasLa aplicación se minimizará cuando copie el OTP al portapapelesEspecifique qué valores deben incluirse al buscar
@@ -73,10 +78,14 @@
para el fichero de la copia de seguridadPedir nombre de fichero cada vvez que una copia de seguridad
es creada o restaurada
+ Elija una ubicación de copia de seguridad por defecto
+ Se ha seleccionado la ubicación de la copia de seguridadEstablecer la contraseña usada para cifrar las
copias de seguridadCrea una nueva copia de seguridad cifrada cuando se añaden o editan nuevas entradas
si se cumplen las condiciones de configuración
+ Establecer una ubicación de copia de seguridad por defecto y una contraseña de copia de seguridad
+ para habilitar esta opciónSelecciona qué tipos de copias de seguridad pueden ser ejecutadas por
aplicaciones de terceros usando difusiónDirección de correo de la clave OpenPGP usada para cifrar
diff --git a/app/src/main/res/values-eu/strings_about.xml b/app/src/main/res/values-eu/strings_about.xml
new file mode 100644
index 00000000..d87e674c
--- /dev/null
+++ b/app/src/main/res/values-eu/strings_about.xml
@@ -0,0 +1,46 @@
+
+
+ Honi buruz
+ Androiderako kode irekiko bi faktoreko autentifikazioa
+ Honi buruz
+ Liburutegiak
+
+ Aldaketa erregistroa
+ Lizentzia
+ MIT Lizentzia
+ Iturburu kodea
+ Bertsioa
+ Maiz egiten diren galderak
+ Maiz egiten diren galderak
+
+ Egileak
+ Garatzaile nagusia
+ Garatzailea
+ Jatorrizko aplikazioaren egilea
+ Jatorrizko aplikazioa
+ Webgunea
+ Dohaintza
+ Laguntzaileak
+ Itzultzaileak
+
+ Irudi txikiei buruz
+ 1. Irudi txiki bakoitza bere jabearena da.
+ 2. Marka horiek erabiltzeak ez du esan nahi
+ andOTPk horien inolako harremanik duenik, edo alderantziz.
+ 3. Irudi txiki horiek beren enpresa edo
+ zerbitzuaren erreferentzia egiteko erabili behar dira soilik.
+ 4. Mesedez ez erabili irudi txiki hauek
+ beren marka adierazteko ez den ezertarako.
+
+ Babestu garapena
+ Irakurri gehiago andOTPren garapenari nola lagundu jakiteko
+ Ezaugarri bereziak
+ Ezarpen bereziak aktibatu nahi dituzu?
+ Gehienak estandarrak ez diren OTP algoritmoak dira norbaitek bereziki eskatuta inplementatutakoak.
+ Ez ditugu ofizialki sostengatzen eta muga batzuk izan ditzakete,
+ mesedez irakurri (eta ulertu) ezazu Githubeko wikian dagoen \"Special features\" orrialdea
+ ezer egiten hasi aurretik.
+ Ezaugarri bereziak aktibatuta
+ Ezaugarri bereziak jada aktibatuta daude
+ Dohaintza egiteko esteka arbelera kopiatu da
+
diff --git a/app/src/main/res/values-eu/strings_auth.xml b/app/src/main/res/values-eu/strings_auth.xml
new file mode 100644
index 00000000..2af2f8d4
--- /dev/null
+++ b/app/src/main/res/values-eu/strings_auth.xml
@@ -0,0 +1,18 @@
+
+
+ Autentifikatu
+
+ Pasahitza
+ PINa
+
+ Autentifikatu andOTP irekitzeko!
+ Konfirmatu autentifikazioa zure
+ zifratze-gakoa sortzeko!
+
+ Desblokeatu
+
+ Ezarri mesedez pasahitza Ezarpenak atalean!
+ Ezarri mesedez PINa Ezarpenak atalean!
+ Pasahitza ez da zuzena, mesedez saiatu berriro!
+ PINa ez da zuzena, mesedez saiatu berriro!
+
diff --git a/app/src/main/res/values-eu/strings_backup.xml b/app/src/main/res/values-eu/strings_backup.xml
new file mode 100644
index 00000000..44abb54a
--- /dev/null
+++ b/app/src/main/res/values-eu/strings_backup.xml
@@ -0,0 +1,75 @@
+
+
+ Segurtasun-kopiak
+ Segurtasun-kopia arruntak
+ Zifratutako segurtasun-kopiak
+ OpenPGP segurtasun-kopiak
+ Segurtasun-kopia (arrunta)
+ Segurtasun-kopia (zifratuta)
+ Segurtasun-kopia (OpenPGP)
+ Berrezarri (arrunta)
+ Berrezarri (zifratuta)
+ Berrezarri (zifratuta, zifratze zaharra)
+ Berrezarri (OpenPGP)
+ Ordezkatu existitzen diren sarrerak
+ Kontu guztien segurtasun-kopia JSON fitxategi baten egin
+ Kontu guztien segurtasun-kopia pasahitzez babestutako JSON fitxategi baten egin
+ Kontu guztien segurtasun-kopia OpenPGPrekin zifratutako JSON fitxategi baten egin
+ Kontuak JSON fitxategi batetik berrezarri
+ Kontuak pasahitzez babestutako JSON fitxategi batetik berrezarri
+ Kontuak andOTP 0.6.3 baino txikiagoarekin sortutako
+ pasahitzez babestutako JSON fitxategi batetik berrezarri
+ Kontuak OpenPGPrekin zifratutako fitxategi batetik berrezarri
+ Errorea gertatuta da pasahitza Ezarpenak ataletik kargatzean,
+ pasahitzik ez zela ezarri edo zerbait ondo ez dela irten esan nahi du honek. Segurtasun-kopia bat
+ sortu edo inportatzean pasahitza sartzeko eskatuko dizugu.
+
+ OpenPGP hornitzaile bat instalatu behar duzu eta
+ Ezarpenak atalean aktibatu.
+
+ OpenPGP gako bat aukeratu behar duzu Ezarpenak
+ atalean zifratutako segurtasun-kopiak sortu aurretik.
+
+ Aktibatuta badago sarrera zaharrak ezabatu egingo dira
+ segurtasun-kopia berreskuratzean eta segurtasun-kopia badago bakarrik. Desaktibatuta badago
+ sarrera zaharrak eta segurtasun-kopiaren edukiak elkartu egingo dira.
+
+ Segurtasun oharra
+ Datu-basea JSON formatuko testu fitxategi gisa esportatu nahi duzu?
+ Fitxategiak zure gako-pribatuak ditu, mesedez gorde ezazu ondo!
+
+ Segurtasun-kopia egiteak huts egin du
+ Backup Arrakastatsua
+ Ezin dira testu arrunteko segurtasun-kopiak egin,
+ joan ezarpenetara hau aktibatzeko
+ Ezin dira zifratutako segurtasun-kopiak egin,
+ joan ezarpenetara hau aktibatzeko
+ Ez dut irakurtzeko baimenik, eman baimena
+ segurtasun-kopia bat egin aurretik
+ Ez dut idazteko baimenik, eman baimena
+ segurtasun-kopia bat egin aurretik
+ Pasahitz/PIN bidezko zifratzea ezin da
+ kanpotik aktibatutako segurtasun-kopien moduarekin erabili
+
+ Huts egin du segurtasun-kopia automatikoak
+ Segurtasun-kopia automatikoa ondo egin da
+ Jakinarazpen hauek segurtasun-kopia automatiko batek
+ huts egiten duenean erakusten dira
+ Jakinarazpen hauek segurtasun-kopia automatiko bat
+ ondo egiten denean erakusten dira
+
+ Ezarri mesedez segurtasun-kopia egiteko tokia ezarpenetan!
+ Huts egin du segurtasun-kopien karpetara sartzeak!
+ Huts egin du segurtasun-kopiaren fitxategia sortzeak!
+ Ondo esportatu da kanpoko biltegiratzean
+ Huts egin du kanpoko biltegiratzera esportatzeak
+ Ondo inportatu da kanpoko biltegiratzetik
+ Huts egin du berreskuratutako sarrerak gordetzeak
+ Huts egin du segurtasun-kopia deszifratzeak
+ Inportatutako datuetan ez dago sarrerarik
+ Ezin da kanpoko biltegiratzea orain erabili
+ OpenPGP Errorea: %s
+ Egiaztatu gabeko sinadura aurkitu da
+ Pasahitza ez dago ezarrita, begiratu Ezarpenak atalean
+ Ezin da fitxategia aukeratzeko leihoa ireki!
+
diff --git a/app/src/main/res/values-eu/strings_intro.xml b/app/src/main/res/values-eu/strings_intro.xml
new file mode 100644
index 00000000..d86e8d98
--- /dev/null
+++ b/app/src/main/res/values-eu/strings_intro.xml
@@ -0,0 +1,36 @@
+
+
+ Has gaitezen
+ Ongi etorri andOTPra! Hasierako konfigurazioa egiten lagunduko dizugu
+ Jarri arreta eta ondo irakurri daturik galdu nahi ez baduzu.
+ \n\nLasai, ezarpen hauek edonoiz aldatu ditzakezu Ezarpenak atalean.
+ Zure kontuen segurtasuna bermatzeko andOTPk
+ zifratzea erabiliko du kontuen datuak gordetzeko. Hemen zein zifratze metodo erabili
+ aukeratu dezakezu.
+ KeyStorea Android sistemaren osagarri bat da
+ zifratze-gakoak eran seguruan gordetzeko erabiltzen dena. KeyStorea erabiltzearen abantaila
+ gakoak eta andOTP era bereizian gordetzen direla da, eta beraz hardwarean oinarrituta
+ zifratzearekin gorde daitekeela (zure gailuak jasaten badu). Hala ere, gakoak ez daudenez andOTPren
+ datuek batera gordeta, aukera hau erabiliz gero ezingo duzu segurtasun-kopiak egiteko kanpo tresnarik
+ (adibidez Titanium) erabili. Modu hau aukeratzen baduzu, andOTPk eskaintzen dituen segurtasun
+ kopiak egiteko tresnak erabili beharko dituzu. \n\nOharra: KeyStoreak hainbat arazo sortzen ditu, beraz
+ guztiz beharrezkoa bada bakarrak erabili. andOTP hasten duzun bakoitzean pasahitza/PINa idazteko
+ arazorik ez baduzu, pasahitz bidezko zifratzea erabiltzea gomendatzen dizugu.
+ Modu honek zure datuak pasahitz edo PIN
+ bat erabiliz sortutako gako bat erabiliz zifratuko ditu. Modu honen abantaila nagusia
+ kanpoko segurtasun-kopiak egiteko tresnek (adibidez Titanium) espero bezala funtzionatuko dutela da,
+ eta baita KeyStorerekin baino errore gutxiago izango duzula. Hala ere, andOTP martxan jartzen
+ duzun bakoitzean pasahitza edo PINa idatzi beharko duzu.
+ andOTP blokeatzeko modua ezarri dezakezu
+ hemen. Zifratze-modu gisa Android KeyStore aukeratu duzunez, pauso hau hautazkoa da.
+ andOTP blokeatzeko modua ezarri dezakezu
+ hemen. Zifratze-modu gisa pasahitza/PINa aukeratu duzunez, pasahitz edo PIN bat
+ ezarri behar duzu aurrera jarraitzeko.
+ Ezarri pasahitza jarraitzeko!
+ Ezarri PINa jarraitzeko!
+ Jarraitzeko baieztatu zure pasahitza!
+ Jarraitzeko baieztatu zure PINa!
+ Amaitu duzu
+ Zure ezarpenak ondo gorde dira, andOTP erabiltzeko
+ prest zaude!
+
diff --git a/app/src/main/res/values-eu/strings_main.xml b/app/src/main/res/values-eu/strings_main.xml
new file mode 100644
index 00000000..8fb36d56
--- /dev/null
+++ b/app/src/main/res/values-eu/strings_main.xml
@@ -0,0 +1,96 @@
+
+
+
+ Ezeztatu
+ Xehetasunak idatzi
+ QR kodea eskaneatu
+ Gorde
+ Etiketa berria
+ Ezarpenak
+ Etiketa guztiak
+ Etiketarik ez
+ QR kodea iruditik
+
+ %d s
+
+ Etiketa
+ Sekretua
+
+ Ezkutua
+ Mota
+ Sekretua
+ Iraupena
+ Digituak
+ Kontagailua
+ Jaulkitzailea
+ Etiketa
+ Algoritmoa
+ Etiketak
+ Aukera aurreratuak
+
+ Etiketak erakutsi
+ Etiketak ezkutatu
+
+ Honi buruz
+ Segurtasun kopia
+ Bilatu
+ Ezarpenak
+ Ordenatu
+ Ordenatu gabe
+ Jaulkitzailea
+ Etiketa
+ Azken erabiltze-data
+ Gehien erabilia
+ Editatu
+ Irudia aldatu
+ Ezabatu
+ Erakutsi QR kodea
+
+ Aukera gehiago
+ Aukera gehiago: %1$s
+ Kopiatu tokena
+ Kopiatu %1$s tokena
+ Gehitu kontu berria
+ Itxi menua
+
+ Autentifikazioak huts egin du. Mesedez, saiatu berriro!
+ Autentifikazioak huts egin du, andOTP itxi egingo da!
+ Arbelera kopiatu da
+ Sarrera hau badago
+ QR kodea ez da zuzena
+ Zifratze-gakoa ez da kargatu
+ Aplikazioak kode okerra pasatu du
+ Aplikazioak pasatutako kodea ondo gehitu da
+ Ezin da fitxategia ireki
+ Ezin da QR kodea bilatu/baieztatu
+ Errorea gertatu da QR kodea deskodetzean
+ Errorea QR kodearen formatuan
+ QR kode hau ez da zuzena
+ Huts egin du QR kodea sortzean
+
+ Sekretua ez da zuzena
+
+ Autentifikatu
+ Xehetasunak idatzi
+ Ezabatu
+ Aldatu izena
+ Kontagailua
+ Tokenen erabilera
+ KeyStorearen errorea
+ QR kodea
+ Pasahitza sartu
+ Pasahitza sartu
+ Pasahitza berretsi
+ Sartu zure gailuaren kredentzialak andOTP hasteko.
+ \"%1$s\" ezabatu nahi duzu?
+ andOTPk zure tokean noiz erabiltzen dituzun
+ gordeko du (\"Sakatu erakusteko\" erabiltzen duzunean edo arbelera kopiatzean) horrela
+ \"Gehien erabiliak\" edo \"Azkenaldian erabiliak\" zerrendetan erabiltzeko. \n\nMezu hau ez da berriz erakutsiko.
+ Ezin izan da zifratze-gakoa kargatu.
+ Gehitutako sarrerak galdu egingo dira.\n\nandOTP erabiltzen jarraitzeko
+ Ezarpenak atalera joan eta aldatu Datu-basearen zifratzearen balioa Pasahitza/PINa izatera.
+
+ QR kodea eskaneatu
+ QR kodea inportatu
+ Xehetasunak idatzi
+
diff --git a/app/src/main/res/values-eu/strings_settings.xml b/app/src/main/res/values-eu/strings_settings.xml
new file mode 100644
index 00000000..836eed2a
--- /dev/null
+++ b/app/src/main/res/values-eu/strings_settings.xml
@@ -0,0 +1,217 @@
+
+
+ Ezarpenak
+
+ Segurtasuna
+ Erabiltzaile interfazea
+ Segurtasun kopia
+
+ Sakatu erakusteko
+ Sakatu ikusteko erabiltzeko denbora
+ Autentifikazioa
+ Pasahitza
+ PINa
+ Datubasea zifratzea
+ Larrialdi abisua
+ Blokeatu pantaila itzaltzean
+ Blokeatu atzeko planora joatean
+ Blokeatu erabiltzen ez denean
+ Erabiltzen ez dela erabakitzeko denbora-muga
+ Irisgarritasun zerbitzuak blokeatu
+ Automatikoki betetzea blokeatu
+ Hizkuntza
+ Itxura
+ Txartel erako ikuspena
+ Etiketaren tamaina
+ Etiketa automatikoki mugitu
+ Behin sakatu
+ Birritan sakatu
+ Irudi txikiaren tamaina
+ Tokena espazioarekin banatu
+ Etiketa aukeratzearen portaera
+ Aplikazioa txikitu OTPa kopiatutakoan
+ Bilaketaren portaera
+ Iraungitzera doazen tokenak markatu
+ Ezkutatu denbora-mugaren barra
+ Erakutsi bakoitzaren denbora-mugak
+ Fitxategiaren izenari data erantsi
+ Fitxategi-izena galdetu
+ Segurtasun-kopien defektuzko kokalekua
+ Segurtasun-kopien pasahitza
+ Sarrera berriak daudenean automatikoki segurtasun-kopia egin
+ Kanpotik eskatutako segurtasun-kopiak
+ OpenPGP hornitzailea
+ OpenPGP zifratze-gakoa
+ OpenPGP sinadura-gakoa (hautazkoa)
+ Egiaztatu zifratutako segurtasun-kopiak
+ Ezarpen bereziak aktibatu
+ Pantaila-irudiak ateratzea baimendu
+ Android sinkronizazioa aktibatu
+ KeyStorea hustu
+
+ OTP tokenak ezkutatu, ikusteko eskuz
+ agertarazi beharko dituzu
+ Aukeratu zenbat denboraren ondoren (segundotan)
+ ezkutatuko diren erakutsitako sarrerak
+ Aukeratu zer egin Larrialdi abisua jasotzean
+ Autentifikazioa eskatu gailuen pantaila
+ itzali ostean
+ Autentifikazioa eskatu aplikazioa atzeko planora
+ bidali ostean (adibidez \"home\" botoia sakatzean)
+ Autentifikazioa eskatu gailua inaktibo
+ egon ostean
+ Aukeratu zenbat denboraren ostean (segundotan)
+ eskatu berriz autentifikatzea
+ Irisgarritasun zerbitzuei eremu arriskutsuak
+ ezkutatu. Ez aktibatu hau irisgarritasun zerbitzuak erabili behar badituzu!
+ Blokeatu balioak automatikoki betetzen dituzten
+ zerbitzuek aplikazioko pasahitzen eremuak irakurtzea
+ Aukera honek Android 8.0 (Oreo) baino
+ handiagoa den bertsioa behar du
+ Izen luzeak horizontalean scrolla eginez erakutsi, izenak moztu beharrean
+ Aplikazioa minimizatu egingo da OTP gakoa arbelera kopiatzean
+ Adierazi bilaketa egitean zein balio kontuan hartu behar diren
+ Tokena gorriz markatuko du 8 segundoak iraungitzen bada
+ Pantailaren goialdean agertzen den denbora agortzeko barra globala ezkutatu
+ Sarrera bakoitzari dagokion denbora agortzeko barra erakutsi.
+ Honek aplikazioa moteldu dezake, guztiz beharrezkoa bada bakarrik aktibatu.
+ Aholkatutako segurtasun kopiaren fitxategi izenari
+ uneko data eta ordua gehitu
+ Segurtasun kopia bat sortu edo berrezartzen den bakoitzean
+ fitxategi izena eskatu
+ Aukeratu seguratsun kopien defektuzko kokalekua
+ Segurtasun kopien kokalekua ondo aukeratu da
+ Segurtasun kopiak zifratzeko erabiliko den pasahitza
+ ezarri
+ Ezarpenaren baldintzak betetzen badira,
+ zifratutako segurtasun kopia bat sortuko da sarrerak sortu edo editatzean
+ Ezarri segurtasun-kopiak gordetzeko defektuzko
+ kokalekua eta aukera hau aktibatzeko pasahitza
+ Aukeratu zein segurtasun kopia mota jarri daitezkeen
+ martxan hirugarrenen aplikazioetatik abiatuz
+ Segurtasun kopiak zifratzeko erabiltzen den OpenPGP
+ gakoaren eposta helbidea
+ Zifratutako segurtasun kopiak baliozkoa den gako
+ batekin sinatuta badaude barrik inportatuko dira
+ Desaktibatu aukera bereziak berriz desaktibatzeko
+ Pantaila nagusiaren pantaila argazkiak ateratzea
+ baimendu (defektuz desaktibatuta dago segurtasun arrazoiengatik)
+ Baimendu andOTPk gakoak eta ezarpenen segurtasun kopiak egiteko
+Androiden horretarako zerbitzua erabiltzea
+ Ezabatu zifratze-gakoa KeyStoretik
+
+ Aukera hau aktibatzeko pantailaren blokeo segurua
+ aktibatu behar duzu (Ezarpenak -> Segurtasuna -> Pantaila blokeoa)
+ Ezin duzu pasahitza hutsik utzi, ezarri
+ Autentifikazioa \"Bat ere ez\" baliora desaktibatu nahi baduzu!
+ Datu basearen zifratzea aldatzen,
+ itxaron mesedez!
+ Datu basearen zifratzea ondo
+ aldatu da!
+ Huts egin du datu basearen zifratzea aldatzean,
+ aurreko egoerara itzuliko gara!
+ Huts egin du segurtasun kopia egiteak
+ bertan behera utzi da prozesua!
+ Huts egin du zifratze-gakoa lortzean, bertan behera utzi da prozesua!
+ Autentifikazio errorea!
+ Huts egin du zure pasahitza / PINa zifratze berria erabiltzera
+migratzean, berrezarri eskuz Ezarpenetan!
+ Oharra
+ Errorea
+ KeyStorea garbitu?
+ Android sinkronizazioa
+ andOTP datu baearen zifratzea aldatzen saiatuko
+ da orain. Honek huts egiten badu barneko segurtasun kopia bat berrezarriko da eta
+ zifratzea lehen bezala geratuko da.\n\nHala ere beti da ideia ona segurtasun kopia bat
+ izatea zer edo zer gaizki badoa-ere!
+ Pasahitza edo PINa bakarrik erabili ditzakezu
+ datu basearen zifratzea \"Pasahitza / PINa\" bezala konfiguratuta baitago!
+ Autentifikazioa \"Pasahitza\" edo \"PINa\"
+ izateko ezarri behar duzu!
+ Pasahitza edo PINa ezarri behar dituzu
+ zifratzea aldatu aurretik!
+ Kasu batzuetan KeyStorea garbitzeak
+ arazoak konpontzen lagundu dezake. Zer egiten ari zaren baldin badakizu bakarrik jarraitu!\n\n
+ Datu basearen zifratzeaPasahitza / PINa baliora ezarrita duzunez ez zenuke daturik
+ galdu behar hau egitean (baina inoiz ez du kalterik egiten segurtasun kopia bat izateak).\n\nBenetan
+ KeyStorea garbitu nahi duzu?
+ Kasu batzuetan KeyStorea garbitzeak
+ arazoak konpontzen lagundu dezake. Zer egiten ari zaren baldin badakizu bakarrik jarraitu!\n\nOharra:
+ Datu basearen zifratzeaAndroid KeStore baliora ezarrita duzunez zure kontu guztien
+ informazioa galdu egingo duzu. Egin segurtasun kopia bat lehenengo!\n\nBenetan
+ KeyStorea garbitu nahi duzu?
+ Android sinkronizazioa ezin da KeyStore bidezko
+ zifratzearekin erabili, segurtasun kopia eskuz egin beharko zenuke!
+
+
+ Bat ere ez
+ Pasahitza
+ PINa
+ Gailuaren kredentzialak
+
+
+ Android KeyStorea
+ Pasahitza / PINa
+
+
+ Kontu guztiak ezabatu
+ Aplikazioaren ezarpenak berrezarri
+
+
+ Trinkoa
+ Defektuzkoa
+ Osoa
+
+
+ Bat ere ez
+ Erakutsi/Ezkutatu
+ Kopiatu
+ Kopiatu eta atzeko planora joan
+
+
+ Etiketa
+ Jaulkitzailea
+ Etiketak
+
+
+ Itzalita
+ Sarrera berriak
+ Edizio guztiak
+
+
+ Itxura argia
+ Itxura iluna
+ Itxura beltza
+
+
+ Ezkutuan
+ Oso txikia
+ Txikia
+ Defektuzkoa
+ Ertaina
+ Handia
+
+
+ Ez banatu
+ Bi karaktereren ostean
+ Hiru karaktereren ostean
+
+
+ Aukeratutako edozein etiketa duten sarrera guztiak erakutsi (edo)
+ Aukeratutako etiketa guztiak dituzten sarrerak bakarrik erakutsi (eta)
+ Etiketetan zehar aldatu (etiketa bat bakarra aukeratzea baimendu)
+
+
+ Segurtasun-kopia arruntak
+ Zifratutako segurtasun-kopiak
+
+
+ Sistemaren defektuzkoa
+
+ Pasahitz berria idatzi
+ PIN berria idatzi
+ Pasahitza berretsi
+ PINa berretsi
+ Pasahitzak gutxienez %1$d karaktere izan behar ditu!
+ PINak gutxienez %1$d karaktere izan behar ditu!
+
diff --git a/app/src/main/res/values-fa/strings_about.xml b/app/src/main/res/values-fa/strings_about.xml
index 9699cf36..5b0895bb 100644
--- a/app/src/main/res/values-fa/strings_about.xml
+++ b/app/src/main/res/values-fa/strings_about.xml
@@ -5,11 +5,11 @@
دربارهکتابخانهها
- تغییرات
- مجوزها
- مجوز MIT
+ گزارش دگرگونی
+ پروانه
+ پروانهٔ MITکد منبع
- نسخه
+ نگارشسوالات متداولسوالات متداول
@@ -35,5 +35,5 @@
آیا مطمئن هستید که میخواهید قابلیتهای ویژه را فعال کنید؟ بیشتر آنها الگوریتمهای OTP غیراستاندارد هستند که توسط یک درخواست ویژه پیادهسازی شدهاند. آنها به صورت رسمی پشتیبانی نمیشوند و میتوانند همراه با محدودیتهای خاصی باشند، لطفا برای آموختن بیشتر قبل از استفاده از آنها صفحه «قابلیتهای ویژه» در دانشنامه Github را بخوانید (و خوب متوجه شوید).قابلیتهای ویژه فعال شدندقابلیتهای ویژه از پیش فعال هستند
- پیوند حمایت مالی به حافظه موقت کپی شد
+ پیوند حمایت مالی به کلیپ بورد روگیری شد
diff --git a/app/src/main/res/values-fa/strings_auth.xml b/app/src/main/res/values-fa/strings_auth.xml
index b3284a3e..7aa7d500 100644
--- a/app/src/main/res/values-fa/strings_auth.xml
+++ b/app/src/main/res/values-fa/strings_auth.xml
@@ -8,9 +8,9 @@
لطفا برای شروع andOTP
احراز هویت کنید!لطفا احراز هویت خود را تایید کنید تا
- کلید رمزنگاری جدید تولید شوند!
+ کلید رمزگذاری جدید تولید شوند!
- بازگشایی قفل
+ بازکردنلطفا در تنظیمات یک گذرواژه تعیین کنید!لطفا در تنظیمات یک پین تعیین کنید!
diff --git a/app/src/main/res/values-fa/strings_backup.xml b/app/src/main/res/values-fa/strings_backup.xml
index f29d2f37..c426bf34 100644
--- a/app/src/main/res/values-fa/strings_backup.xml
+++ b/app/src/main/res/values-fa/strings_backup.xml
@@ -2,26 +2,27 @@
نسخههای پشتیبانپشتیبانهای متن ساده
- پشتیبانهای رمزنگاری شده
+ پشتیبانهای رمزگذاری شدهپشتیبانهای OpenPGPپشتیبانگیری (متن ساده)
- پشتیبانگیری (رمزنگاری شده)
+ پشتیبانگیری (رمزگذاری شده)پشتیبانگیری (OpenPGP)
- بازنشانی (متن ساده)
- بازنشانی (رمزنگاری شده)
+ بازگردانی (متن ساده)
+ بازگردانی (رمزگذاری شده)بازگردانی (رمزنگاری شده، رمزنگاری قدیمی)
- بازنشانی (OpenPGP)
+ بازگردانی (OpenPGP)موارد موجود را جایگزین کنپشتیبانگیری از همه حسابها در پرونده JSON متن سادهپشتیبانگیری از همه حسابها در پرونده JSON رمز دار
- پشتیبانگیری از همه حسابها در پرونده JSON رمزنگاری شده با OpenPGP
+ پشتیبانگیری از همه حسابها در پرونده JSON رمزگذاری شده با OpenPGPبازنشانی از پرونده JSON متن سادهبازنشانی از پرونده JSON رمز دار
- بازگردانی حسابها از پرونده JSON محافظتشده با رمز ساخته شده با یک andOTP با نسخه پایینتر از ۰.۶.۳
- بازنشانی از پرونده JSON رمزنگاری شده با OpenPGP
+ بازگردانی حسابها از پرونده JSON محافظتشده با رمز
+ که توسط یک نگارش andOTP پایینتر از ۰.۶.۳ ایجاد شده
+ بازنشانی از پرونده JSON رمزگذاری شده با OpenPGPشکست در بارگیری رمز عبور پشتیبان از تنظیمات، این به معنای عدم وجود رمز عبور است یا اشکالی پیش آمده. زمانی که شما یک پشتیبان میسازید یا یک پشتیبان وارد میکنید، از شما خواسته خواهد شد تا رمز عبور را به صورت دستی وارد کنید.
- شما نیاز دارید که یک مهیاکننده OpenPGP نصب کنید و آن را در تنظیمات فعال کنید تا از این قابلیت استفاده کنید.
- قبل از اینکه یک پشتیبان رمزنگاری شده بسازید، باید یک کلید OpenPGP در تنظیمات انتخاب کنید.
+ شما نیاز دارید که یک فراهم کننده OpenPGP نصب کنید و آن را در تنظیمات فعال کنید تا از این ویژگی استفاده کنید.
+ قبل از اینکه یک پشتیبان رمزگذاری شده بسازید، باید یک کلید OpenPGP در تنظیمات انتخاب کنید. اگر فعال باشد، در زمان وارد کردن یک پشتیبان، همه موارد قدیمی جایگزین میشوند و فقط پشتیبان باقی میماند. اگر غیرفعال باشد، موارد قدیمی و محتوای پشتیبان با هم ترکیب میشوند.هشدار امنیتی
@@ -34,15 +35,15 @@
اجازه نوشتن داده نشده، لطفا قبل از تلاش برای پشتیبانگیری این اجازه را بدهیدرمزنگاری بر اساس گذرواژه/ پین، توسط
Broadcast Backup پشتیبانی نمیشود
- روش رمزنگاری جدید
- از نسخهی ۰.۶.۳ ی andOTP، یک روش بهبودیافته و جدید رمزگذاری برای پشتیبانهای محافظتشده با رمز استفاده شده است. پشتیبانهای قدیمی هنوز میتوانند وارد شوند، اما بسیار پیشنهاد میشود که از روش بهبودیافتهی رمزگذاری استفاده کنید.\n\nاین پیام دوباره نشان داده نخواهد شد.
- شکست در پشتیبانگیری خودکار
+ پشتیبانگیری خودکار شکست خوردپشتیبانگیری خودکار با موفقیت انجام شداین آگاهسازیها زمانی نمایش داده میشوند که پشتیبانگیری خودکار به دلیلی شکست خورده استاین آگاهسازیها زمانی نمایش داده میشوند که پشتیبانگیری خودکار موفقیت آمیز بوده است
- شکست در ساخت پوشه پشتیبان
+ لطفا محل پیشفرض تهیه نسخه پشتیبان را در تنظیمات وارد کنید!
+ دسترسی به محل ذخیره نسخه پشتیبان ناموفق بود!
+ ایجاد پرونده نسخه پشتیبان ناموفق بود!استخراج به حافظه جانبی موفقیت آمیز بوداستخراج به حافظه جانبی شکست خوردوارد کردن از حافظه جانبی موفقیت آمیز بود
@@ -50,7 +51,6 @@ Broadcast Backup پشتیبانی نمیشودرمزگشایی پشتیبان شکست خوردهیچ موردی در داده ورودی پیدا نشددر حال حاضر حافظه جانبی در دسترس نیست
- اجازه دسترسی به محل ذخیرهسازی داده نشدهخطای OpenPGP: %sهیچ امضای تایید شدهای شناسایی نشدگذرواژه تنظیم نشده، تنظیمات را بررسی کنید
diff --git a/app/src/main/res/values-fa/strings_main.xml b/app/src/main/res/values-fa/strings_main.xml
index d12c96a6..99825a88 100644
--- a/app/src/main/res/values-fa/strings_main.xml
+++ b/app/src/main/res/values-fa/strings_main.xml
@@ -32,7 +32,7 @@
پنهانکردن تگهادرباره
- پشتیبان گیری
+ پشتیبانگیریجستجوتنظیماتمرتبسازی
@@ -40,21 +40,28 @@
صادر کنندهبرچسبآخرین بار استفاده
- پراستفادهترین
+ پر استفادهترینویرایشتغییر تصویرحذفنمایش کد QR
+
+ گزینههای بیشتر
+ گزینههای بیشتر برای %1$s
+ روگیری توکن
+ روگیری %1$s توکن
+ افزودن حساب کاربری جدید
+ بستن منواحراز هویت ناموفق بود، لطفا دوباره تلاش کنید!احراز هویت ناموفق بود، در حال بستن andOTP!
- به حافظه موقت کپی شد
+ به کلیپ بورد روگیری شداین مورد از پیش وجود داردکد QR نامعتبرکلید رمزنگاری بارگذاری نشدهکد ارائه شده intent نادرست می باشدکد ارائه شده intent افزده شد
- ناتوانی در باز کردن پرونده
+ نمیتوان پرونده را باز کردناتوانی در یافتن/تایید کد QRتایید Checksum هنگام رمزگشایی کد QR ناموفق بودخطای قالب در کد QR
@@ -71,7 +78,6 @@
کاربرد توکنخطای KeyStoreکد QR
- اخطار استهلاکگذرواژه را وارد کنیدگذرواژه را وارد کنیدتایید گذرواژه
@@ -81,10 +87,9 @@
(با استفاده از ویژگی \"tap
to reveal\" یا کپی به کلیپ بورد) تا بتواند آنان را به ترتیب \"بیشتر استفاده شده\" یا
\"آخرین استفاده\" مرتب کند.\n\n این پیام هرگز دوباره نمایش داده نخواهد شد.
- شکست در بارگیری کلید رمزنگاری از KeyStore. هر موردی که اضافه شده از دست میرود\n\n برای اینکه هنوز از andOTP استفاده کنید، شما میتوانید به تنظیمات بروید و رمزنگاری پایگاه داده را به رمز عبور / پین تغییر دهید.
- این آخرین نسخه از andOTP خواهد بود که
- که نسخه های اندروید پایین تر از ۵.۱(Lollipop) را پشتیبانی می کند. زحمت افزایش یافته برای حفظ
- مخزن پیاده سازی جداگانه فقط برای نسخه های قدیمی و همچنین سهم کوچک آن ها در بازار ، پشتیبانی ادامه دار را برای تیم کوچک ما ناشدنی کرده.\n\n این پیام دیگر نمایش داده نخواهد شد.
+ بارگذاری کلید رمزنگاری از KeyStore ناموفق بود.
+ هر ورودی که افزوده شده از دست خواهد رفت.\n\n برای ادامه استفاده از andOTP، میتوانید به
+ تنظیمات بروید و رمزنگاری پایگاه داده را به گذرواژه / پین تغییر دهید.اسکن کد QRوارد کردن کد QR
diff --git a/app/src/main/res/values-fa/strings_settings.xml b/app/src/main/res/values-fa/strings_settings.xml
index d7843228..6b4ea017 100644
--- a/app/src/main/res/values-fa/strings_settings.xml
+++ b/app/src/main/res/values-fa/strings_settings.xml
@@ -4,20 +4,21 @@
امنیترابط کاربری
- پشتیبان گیری
+ پشتیبانگیریضربه برای آشکار کردن
- وقفه برای ضربه برای آشکار کردن
+ وقفه ضربه برای آشکار کردناحراز هویتگذرواژهپینرمزنگاری پایگاه دادهماشه هراس
- در زمان خاموش شدن صفحه، قفل شو
+ هنگام خاموش شدن صفحه، قفل شوهنگام رفتن به پس زمینه قفل شوهنگام عدم فعالیت قفل شو
- تاخیر برای قفل شدن هنگام عدم فعالیت
+ درنگ برای قفل شدن هنگام عدم فعالیتمسدود کردن خدمات دسترسی
+ مسدودسازی پرکردن خودکارزبانپوستهچیدمان کارتها
@@ -28,14 +29,14 @@
اندازه تصاویر بند انگشتیتوکن را با فاصله جدا کنرفتار انتخاب تگ
- کوچک کردن برنامه بعد از روگرفت از رمز یکبارمصرف
+ کوچک کردن برنامه بعد از روگیری رمزرفتار جستجوبرجسته سازی توکن های منقضی شدهپنهان کردن نوار سراسری زمان بندینمایش زمان بندی های منحصر بفرد
- اضافه کردن تاریخ به نام پرونده
+ افزودن تاریخ به نام پروندهپرسیدن نام پرونده
- محل پرونده پشتیبان
+ محل پیشفرض ذخیره نسخه پشتیبانگذرواژه پرونده پشتیبانپشتیبان گیری خودکار در موارد تازهپشتیبان گیری از Broadcasts
@@ -59,9 +60,13 @@
میزان زمانی (به ثانیه) که بعد از آن
احراز هویت دوباره نیاز است را انتخاب کنیدپنهان کردن فیلد های حساس از خدمات
- دسترسی.این گزینه را اگر به خدمات دسترسی تکیه دارید فعال نکنید!
- برچسبهای بلند را اسکرول کن، به جای اینکه ادامه آنها را ببُری
- برنامه زمانی که شما رمز یکبار مصرف را به کلیپ بورد کپی کنید کوچک خواهد شد
+ دسترسی.این گزینه را اگر به خدمات دسترسی متکی هستید فعال نکنید!
+ خدمتهای پرکردن خودکار را در مقابل دسترسی به قسمتهای
+ مربوط به گذرواژه در برنامه مسدود کنید
+ این ویژگی نیازمند داشتن اندروید بالاتر از
+ نسخه ۸ (اوریو) است
+ بهجای اینکه برچسبهای بسیار بلند را کوتاه کنی، آنها را فهرست کن
+ برنامه زمانی که شما رمز یکبار مصرف را به کلیپ بورد روگیری کنید کوچک خواهد شدمشخص کنید کدام مقادیر باید هنگام جستجو شامل شوندتوکن را هنگامی که طی ۸ ثانیه منقضی میشود را به رنگ قرمز برجسته میکندنوار زمان بندی سراسری نشان داده شده در بالای صفحه را پنهان کن
@@ -69,12 +74,16 @@
اگر واقعا مورد نیاز است فعال شود ، زیرا میتواند موجب کند شدن برنامه شود.
تاریخ و زمان فعلی را به نام پرونده پشتیبان پیشنهادی اضافه کنهر بار پشتیبان ساخته میشود یا بازنشانی میشود، یک نام پرونده بپرس
+ محل پیشفرض ذخیره نسخه پشتیبان را انتخاب کنید
+ محل ذخیره نسخه پشتیبان انتخاب شده استگذرواژه ای که برای رمزنگاری پشتیبانها استفاده میشود را تنظیم کنید
- زمانی که موارد جدید افزوده، یا ویرایش شده
- اگر شرایط تنظیمات برآورده شود، یک نسخه پشتیبان رمزنگاری شده تازه ایجاد میکند
+ زمانی که موارد جدید افزوده، یا ویرایش شد
+ اگر شرایط تنظیمات برآورده شود، یک نسخه پشتیبان رمزگذاری شده تازه ایجاد میکند
+ برای فعال کردن این گزینه، محل پیشفرض ذخیره نسخه پشتیبان و
+ گذرواژه نسخه پشتیبان را تنظیم کنیدانتخاب کنید کدام نوع پشتیبانگیری بتواند توسط Broadcast های برنامههای سوم شخص اعمال شودآدرس پست الکترونیکی کلید OpenPGP استفاده شود برای رمزنگاری پشتیبانها
- پشتیبانهای رمزنگاری شده، فقط اگر با یک کلید معتبر امضا شده اند، بازنشانی شوند
+ پشتیبانهای رمزگذاری شده، فقط اگر با یک کلید معتبر امضا شده اند، بازنشانی شوندتیک را بردارید تا قابلیتهای ویژه دوباره غیرفعال شونداجازه بده تا از صفحه اصلی برنامه تصویر برداری شود (به صورت پیشفرض به دلایل امنیتی غیرفعال است)AndOTP را قادر میکند تا از سرویس پشتیبانگیری داخلی اندروید استفاده کند تا از کلیدها و تنظیمات پشتیبانگیری کند
@@ -85,10 +94,12 @@
تلاش برای تغییر رمزنگاری پایگاه داده، لطفا صبر کنید!رمزنگاری پایگاه داده با موفقیت تغییر کرد!شکست در تغییر رمزنگاری پایگاه داده، در حال برگشت به حالت اصلی!
- شکست در ساخت یک پشتیبان داخلی، در حال بازگشت به حالت قبل!
+ ساخت پشتیبان داخلی شکست خورد
+ در حال لغو کردن!شکست در گرفتن کلید رمزنگاری، در حال بازگشت به حالت قبل!
- شکست در احراز هویت!
- شکست در بهبود رمز عبور / پین به صورت نامحسوس به رمزنگاری جدید، لطفا به صورت دستی آن را در تنظیمات باز تنظیم کنید!
+ تایید هویت ناموفق بود!
+ ارتقای نامحسوس گذرواژه / پین شما به رمزگذاری جدید ناموفق بود
+لطفا به شیوه دستی در تنظیمات بازنشانی کنید!هشدارخطاپاکسازی KeyStore؟
@@ -123,8 +134,8 @@
هیچ چیزنمایش/پهنان کردن
- رونوشت
- کپی کردن و رفتن به پس زمینه
+ روگیری
+ روگیری و رفتن به پس زمینهبرچسب
@@ -161,7 +172,7 @@
پشتیبانهای متن آشکار
- پشتیبانهای رمزنگاری شده
+ پشتیبانهای رمزگذاری شدهپیشفرض سیستم
diff --git a/app/src/main/res/values-fr/strings_about.xml b/app/src/main/res/values-fr/strings_about.xml
index 229b39dd..79c6caff 100644
--- a/app/src/main/res/values-fr/strings_about.xml
+++ b/app/src/main/res/values-fr/strings_about.xml
@@ -32,7 +32,7 @@
Aider au développementDécouvrez comment soutenir le développement d’andOTPFonctionnalités spéciales
- Êtes-vous certain de vouloir activer les fonctionnalités spéciales? La plupart d\'entre elles sont des algorithmes OTP non standard qui ont été implémentés pour des demandes spécifiques. Elles ne sont pas supportées officiellement et peuvent venir avec certaines limitations. Veuillez consulter (et comprendre) la page « Fonctionnalités spéciales » sur le wiki du GitHub pour en apprendre d\'avantage avant de les utiliser.
+ Êtes-vous sûr·e de vouloir activer les fonctionnalités spéciales ? La plupart d\'entre elles sont des algorithmes OTP non standard qui ont été implémentés pour des demandes spécifiques. Elles ne sont pas supportées officiellement et peuvent venir avec certaines limitations. Veuillez consulter (et comprendre) la page « Fonctionnalités spéciales » sur le wiki du GitHub pour en apprendre d\'avantage avant de les utiliser.Fonctionnalités spéciales activéesFonctionnalités spéciales déjà activéesLien de don copié dans le presse-papier
diff --git a/app/src/main/res/values-fr/strings_auth.xml b/app/src/main/res/values-fr/strings_auth.xml
index 90122926..1a320fe2 100644
--- a/app/src/main/res/values-fr/strings_auth.xml
+++ b/app/src/main/res/values-fr/strings_auth.xml
@@ -6,8 +6,8 @@
Code PINVeuillez vous authentifier pour lancer andOTP !
- Veuillez confirmer votre authentification pour générer la
- nouvelle clé de chiffrement !
+ Veuillez confirmer l\'authentification pour générer votre
+ clé de chiffrement !Déverrouiller
diff --git a/app/src/main/res/values-fr/strings_backup.xml b/app/src/main/res/values-fr/strings_backup.xml
index 3d48fa9b..e74e9f30 100644
--- a/app/src/main/res/values-fr/strings_backup.xml
+++ b/app/src/main/res/values-fr/strings_backup.xml
@@ -36,19 +36,15 @@
L\'autorisation de lecture n\'est pas accordée, veuillez le faire avant d’effectuer la sauvegardeL\'autorisation d\'écriture n\'est pas accordée, veuillez le faire avant d’effectuer la sauvegardeLe chiffrement à base de mot de passe ou code PIN n\'est pas supporté par la sauvegarde par diffusion
- Nouvelle méthode de chiffrement
- Depuis la version 0.6.3 de andOTP, une nouvelle méthode
- de chiffrement améliorée est utilisée pour les sauvegardres protégées par mot de passe.
- Les anciennes sauvegardes peuvent toujours être importées mais il est hautement
- recommandé de créer de nouvelles sauvegardes avec le chiffrement amélioré.\n\nCe
- message ne sera pas affiché une seconde fois.Échec de la sauvegarde automatiqueSuccès de la sauvegarde automatiqueCes notifications sont affichées quand une sauvegarde automatique a échoué pour une raison quelconqueCes notifications sont affichées quand une sauvegarde automatique a réussi
- Échec de la création du répertoire de sauvegarde
+ Veuillez définir un emplacement de sauvegarde par défaut dans les paramètres !
+ Impossible d\'accéder à l\'emplacement de la sauvegarde !
+ Impossible de créer le fichier de sauvegarde !Sauvegarde vers le stockage externe effectuée avec succèsLa sauvegarde vers le stockage externe a échouéRestauration depuis le stockage externe effectuée avec succès
@@ -56,7 +52,6 @@
Échec du déchiffrement de la sauvegardeAucune entrée trouvée dans les données importéesStockage externe non disponible
- Permission d\'accéder au stockage refuséeErreur OpenPGP : %sAucune signature vérifiée n\'a été trouvéeAucun mot de passe défini, vérifiez les paramètres
diff --git a/app/src/main/res/values-fr/strings_main.xml b/app/src/main/res/values-fr/strings_main.xml
index 23d6d333..1d5c6ecb 100644
--- a/app/src/main/res/values-fr/strings_main.xml
+++ b/app/src/main/res/values-fr/strings_main.xml
@@ -5,10 +5,10 @@
Ajouter les détailsScanner un QR-CodeEnregistrer
- Nouveau tag
+ Nouvelle étiquetteParamètres
- Tous les tags
- Aucun tag
+ Toutes les étiquettes
+ Aucune étiquetteQR-code à partir d\'une image%d s
@@ -25,11 +25,11 @@
ÉmetteurTitreAlgorithme
- Tags
+ ÉtiquettesOptions avancées
- Afficher les tags
- Cacher les tags
+ Afficher les étiquettes
+ Cacher les étiquettesÀ proposSauvegarde
@@ -45,6 +45,13 @@
Modifier l\'imageSupprimerMontrer le QR Code
+
+ Plus d\'options
+ Plus d\'options pour %1$s
+ Copier le jeton
+ Copier le jeton %1$s
+ Ajouter un nouveau compte
+ Fermer le menuÉchec d\'authentification, veuillez réessayer !Échec d\'authentification, fermeture d\'andOTP !
@@ -71,7 +78,6 @@
Utilisation des jetonsErreur KeyStoreQR Code
- Avis d\'obsolescenceSaisir le mot de passeSaisir le mot de passeConfirmer le mot de passe
@@ -82,11 +88,6 @@
par \"Utilisé le plus\" ou \"Dernier utilisé\".\n\nCe message ne sera pas afficher à nouveau.
Échec du chargement de la clé de chiffrement à partir de l\'armoire à clés.
Toute entrée ajoutée sera perdue.\n\nPour continuer à utiliser andOTP, vous pouvez aller dans les paramètres pour passer de Chiffrement de la base de données à Mot de passe / Code PIN.
- Ce sera la dernière version d\'andOTP à
- supporter les versions d\'Android inférieures à 5.1 (Lollipop). Les efforts croissants
- nécessaires pour maintenir une implémentation de stockage séparée juste pour les anciennes
- versions ainsi que leurs parts de marché faibles rendent impossible le support continu
- pour notre petite équipe.\n\nCe message ne sera pas affiché à nouveau.Scanner le QR-codeImporter un QR-code
diff --git a/app/src/main/res/values-fr/strings_settings.xml b/app/src/main/res/values-fr/strings_settings.xml
index 6c8993a6..fc6946be 100644
--- a/app/src/main/res/values-fr/strings_settings.xml
+++ b/app/src/main/res/values-fr/strings_settings.xml
@@ -10,15 +10,16 @@
Durée d\'affichage des jetonsIdentificationMot de passe
- Code PIN
+ NIPChiffrement de la base de donnéesBouton d\'urgence
- Re-verouiller à l\'extinction de l\'écran
+ Re-verrouiller à l\'extinction de l\'écranRe-verrouiller au passage en arrière-planRe-verrouiller en cas d\'inactivitéDélai de re-verrouillage pour inactivitéBloquer les services d\'accessibilité
- Langage
+ Bloquer l\'autoremplissage
+ LangueThèmeDisposition des cartesTaille de la police des titres
@@ -27,7 +28,7 @@
Appui doubleTaille des miniaturesSéparer le jeton avec des espaces
- Comportement de la sélection par tag
+ Comportement de la sélection par étiquetteMinimiser l\'appli après la copie du jeton OTPComportement de la rechercheSurligner les jetons qui vont expirer
@@ -35,12 +36,12 @@
Afficher les expirations par entréeAjouter la date au nom de fichierDemander le nom du fichier
- Répertoire de sauvegarde
+ Emplacement de sauvegarde par défautMot de passe de sauvegardeSauvegarde automatique à l\'ajout de nouvelles entréesSauvegardes par diffusionFournisseur OpenPGP
- Clé de chiffrage OpenPGP
+ Clé de chiffrement OpenPGPClé de signature OpenPGP (optionnel)Vérifier les sauvegardes chiffréesActiver les fonctionnalités spéciales
@@ -59,6 +60,10 @@
authentification est exigée
Masquer les champs sensibles aux services d\'accessibilité.
N\'activez PAS ceci si vous avez besoin des services d\'accessibilité !
+ Empêcher les services de saisie automatique d\'accéder aux champs
+ du mot de passe dans l\'appli
+ Cette fonctionnalité nécessite une version Android
+ supérieure à 8.0 (Oreo)Faire défiler les libellés trop longs plutôt que de les tronquerL\'appli sera réduite à la copie du jeton OTP dans le presse-papiersChoisissez quelles valeurs seront incluses lors de la recherche
@@ -68,11 +73,15 @@
Cela peut ralentir l\'application, à activer uniquement si nécessaire.
Ajouter la date et l\'heure au nom de fichier de sauvegarde proposéDemander le nom du fichier à chaque fois qu\'une sauvegarde est créée ou restaurée
+ Choisissez un emplacement de sauvegarde par défaut
+ L\'emplacement de la sauvegarde a été choisiConfigurer le mot de passe utilisé pour chiffrer les sauvegardesCrée une nouvelle sauvegarde chiffrée lorsque de nouvelles entrées
sont ajoutées ou modifiées, si les conditions paramétrées sont remplies
+ Définir un emplacement de sauvegarde par défaut et un
+ mot de passe de sauvegarde pour activer cette optionSélectionner quelles types de sauvegardes peuvent être appelés pas les applications tiers en utilisant la diffusion
- Adresse mail de la clé OpenPGP utilisée pour chiffrer
+ Adresse courriel de la clé OpenPGP utilisée pour chiffrer
les sauvegardesLes sauvegardes chiffrées ne sont restaurées que lorsqu\'elles sont signées avec une clé valideDécochez pour désactiver les fonctionnalités spéciales
@@ -116,12 +125,12 @@
AucuneMot de passe
- Code PIN
+ NIPIdentification du périphériqueKeyStore Android
- Mot de passe / PIN
+ Mot de passe / NIPSupprimer l\'ensemble des comptes
@@ -141,7 +150,7 @@
ÉtiquetteÉmetteur
- Tags
+ ÉtiquettesDésactivé
@@ -167,9 +176,9 @@
Après trois caractères
- Afficher les entrées correspondant à au moins une des balises sélectionnées (ou)
- Afficher les entrées correspondant à toutes les balises sélectionnées (et)
- Basculer entre les tags (seul un tag ne peut être sélectionné à la fois)
+ Afficher les entrées correspondant à au moins une des étiquettes sélectionnées (ou)
+ Afficher les entrées correspondant à toutes les étiquettes sélectionnées (et)
+ Basculer entre les étiquettes (autorise seulement une étiquette à être sélectionnée à la fois)Sauvegardes en clair
@@ -179,10 +188,10 @@
Par défaut du systèmeSaisir le nouveau mot de passe
- Saisir le nouveau code PIN
+ Saisir le nouveau NIP Confirmer le mot de passe
- Confirmer le code PIN
+ Confirmer le NIPLe mot de passe doit comporter au moins %1$d caractères !
- Le code PIN doit comporter au moins %1$d chiffres !
+ Le NIP doit comporter au moins %1$d chiffres !
diff --git a/app/src/main/res/values-gl/strings_auth.xml b/app/src/main/res/values-gl/strings_auth.xml
index 0c9a036d..2dd52fc9 100644
--- a/app/src/main/res/values-gl/strings_auth.xml
+++ b/app/src/main/res/values-gl/strings_auth.xml
@@ -6,8 +6,8 @@
PINIdentifícate para iniciar andOTP!
- Confirma a túa autenticación para crear
- a nova chave de cifrado!
+ Confirma a autenticación para xerar a
+túa chave de cifrado!Desbloquear
diff --git a/app/src/main/res/values-gl/strings_backup.xml b/app/src/main/res/values-gl/strings_backup.xml
index fe2f9f25..371fa1bc 100644
--- a/app/src/main/res/values-gl/strings_backup.xml
+++ b/app/src/main/res/values-gl/strings_backup.xml
@@ -49,11 +49,6 @@
arranxa esto ante de intentar a copiaO cifrado con Contrasinal/PIN non
está soportado con respaldo remoto
- Novo método de cifrado
- Desde a versión 0.6.3 de andOTP, úsase un novo e mellorado
- método de cifrado para copias de apoio protexidas por contrasinal. As copias de apoio antigas
- aínda poden ser importadas, pero é moi recomendable crear novas copias de apoio co novo cifrado
- mellorado.\n\nEsta mensaxe non se mostrará de novo.Fallo na copia automáticaCopia automática correcta
@@ -62,7 +57,9 @@
Estas notificacións móstranse cando
unha copia automática se realizou correctamente
- Erro ao crear o directorio de copia de apoio
+ Establece a localización para a copia de apoio!
+ Fallo ao acceder a localización!
+ Fallo ao crear a copia de apoio!Exportado correctamente ao almacenamento externoFallo ao exportar ao almacenamento externoImportado correctamente desde o almacenamento externo
@@ -70,7 +67,6 @@
Erro ao descifrar a copia de apoioNon se atoparon elementos nos datos importadosO almacenaxe externo non é accesible actualmente
- Permiso de almacenaxe non concedidoError OpenPGP: %sNon se detectou unha sinatura verificableNo se estableceu un contrasinal, revisa os axustes
diff --git a/app/src/main/res/values-gl/strings_main.xml b/app/src/main/res/values-gl/strings_main.xml
index 4fefd5e0..db19ae11 100644
--- a/app/src/main/res/values-gl/strings_main.xml
+++ b/app/src/main/res/values-gl/strings_main.xml
@@ -45,6 +45,13 @@
Cambiar imaxeEliminarMostrar código QR
+
+ Máis opcións
+ Máis opcións para %1$s
+ Copiar token
+ Copiar token %1$s
+ Engadir nova conta
+ Pechar menúFallou a autenticación, por favor inténtao de novo!Fallou a autenticación, pechando andOTP!
@@ -71,7 +78,6 @@
Utilizacións dos tokensFallo no KeyStoreCódigo QR
- Aviso de abandonoIntroducir contrasinalIntroducir contrasinalConfirmar contrasinal
@@ -83,11 +89,6 @@
Fallo ao cargar a chave de cifrado desde KeyStore.
Calquera entrada que se engada perderase.\n\nPara poder seguir usando andOTP podes ir a
Axustes e cambiar o Cifrado da base da datos a Contrasinal / PIN.
- Esta vai ser a derradeira versión de andOTP con
- soporte para versións Android inferiores a 5.1 (Lollipop). O crecente esforzo requerido para
- manter a implementación do almacenaxe separado só para versións antigas e con poucos
- dispositivos activos fai que non sexa sostible o seu mantemento.\n\nNon voltaremos
- a mostrar esta mensaxe.Escanear código-QRImportar código QR
diff --git a/app/src/main/res/values-gl/strings_settings.xml b/app/src/main/res/values-gl/strings_settings.xml
index fb83b83e..e233028c 100644
--- a/app/src/main/res/values-gl/strings_settings.xml
+++ b/app/src/main/res/values-gl/strings_settings.xml
@@ -18,6 +18,7 @@
Bloquear ao quedar inactivaRetraso para bloqueo por inactividadeBloquear servizos de accesibilidade
+ Bloquear autocompletadoIdiomaDecoradoDisposición das entradas
@@ -35,7 +36,7 @@
Mostrar caducidades individuaisEngadir data ao nome do ficheiroPreguntar polo nome do ficheiro
- Directorio de copias de seguranza
+ Localización por omisiónContrasinal da copia de seguranzaCopia de seguranza automática das novas entradasRespaldo Broadcasts
@@ -62,6 +63,10 @@
solicita autenticación
Agocharlle aos servizos de accesibilidade os
campos con datos sensibles. NON activar esto se dependes dos servizos de accesibilidade!
+ Bloquear que servizos de autocompletado accedan
+a campos de contrasinal dentro da app
+ Esta característica require Android
+superior a 8.0 (Oreo)Desprazar etiquetas largas no canto de recortalasA app minimizarase ao copiar o OTP ao portapapeisIndicar que valores se incluirán ao buscar
@@ -73,10 +78,14 @@
ficheiro de respaldo suxerido
Preguntar polo nome do ficheiro cada vez que unha copia de seguranza sexa creada ou
restaurada
+ Escolle a localización por omisión
+ Foi escollida a localización para a copiaEstablecer o contrasinal para cifrar as
copias de apoioCrea unha nova copia de apoio cifrada cando
se engaden novas entradas, ou se editan, se se dan as condicións
+ Establece a localización por omisión para a copia
+e un contrasinal para activar esta opciónEscolle que tipos de copia se poden activar por
aplicacións de terceiros utilizando BroadcastsEnderezo de correo para a chave OpenPGP utilizada para cifrar
diff --git a/app/src/main/res/values-hi/strings_auth.xml b/app/src/main/res/values-hi/strings_auth.xml
index 32b45a5c..6dfa1d5a 100644
--- a/app/src/main/res/values-hi/strings_auth.xml
+++ b/app/src/main/res/values-hi/strings_auth.xml
@@ -6,7 +6,8 @@
पिनकृपया andOTP शुरू करने के लिए प्रमाणित करें!
- कृप्या नई एन्क्रिप्शन कुंजी जेनरेट करने के लिए अपने प्रमाणीकरण की पुष्टि करें!
+ Please confirm authentication to generate your
+ encryption key!अनलॉक करें
diff --git a/app/src/main/res/values-hi/strings_backup.xml b/app/src/main/res/values-hi/strings_backup.xml
index d11f03a4..d9c311a1 100644
--- a/app/src/main/res/values-hi/strings_backup.xml
+++ b/app/src/main/res/values-hi/strings_backup.xml
@@ -33,15 +33,15 @@
कृपया बैकअप का प्रयास करने से पहले पढ़ने की अनुमति प्रदान करेंकृपया बैकअप का प्रयास करने से पहले लेखन की अनुमति प्रदान करेंपासवर्ड / पिन आधारित एन्क्रिप्शन प्रसारण बैकअप के साथ समर्थित नहीं है
- नई एन्क्रिप्शन विधि
- AndOTP के संस्करण 0.6.3 के बाद से, नया और बेहतर एन्क्रिप्शन विधि का उपयोग पासवर्ड-संरक्षित बैकअप के लिए किया जाता है। पुराने बैकअप अभी भी आयात किए जा सकते हैं, लेकिन बेहतर एन्क्रिप्शन के साथ नए बैकअप बनाने की अत्यधिक अनुशंसा की जाती है| \n\nसंदेश फिर से नहीं दिखाया जाएगा।स्वचालित बैकअप विफलस्वचालित बैकअप सफलस्वचालित बैकअप किसी कारण से विफल होने पर ये सूचनाएं दिखाई जाती हैं |स्वचालित बैकअप सफल होने पर ये सूचनाएं दिखाई जाती हैं|
- बैकअप निर्देशिका बनाने में विफल
+ Please set a default backup location in the settings!
+ Failed to access backup location!
+ Failed to create backup file!निर्यात बाहरी संग्रहण के लिए सफलबाहरी संग्रहण में निर्यात विफल रहाबाह्य संग्रहण से आयात सफल
@@ -49,7 +49,6 @@
बैकअप का डिक्रिप्शन विफल रहाआयातित डेटा में कोई प्रविष्टियाँ नहीं मिलींबाहरी संग्रहण वर्तमान में सुलभ नहीं है
- भंडारण की अनुमति नहीं दी गईओपन-पीजीपी त्रुटि: %sकोई सत्यापित हस्ताक्षर नहीं मिलापासवर्ड सेट नहीं है, सेटिंग जांचें
diff --git a/app/src/main/res/values-hi/strings_main.xml b/app/src/main/res/values-hi/strings_main.xml
index d35563b8..c1f0c039 100644
--- a/app/src/main/res/values-hi/strings_main.xml
+++ b/app/src/main/res/values-hi/strings_main.xml
@@ -45,6 +45,13 @@
छवि बदलेंहटाएंShow QR Code
+
+ More options
+ More options for %1$s
+ Copy token
+ Copy %1$s token
+ Add new account
+ Close menuप्रमाणीकरण असफल| कृपया पुन: प्रयास करें!प्रमाणीकरण विफल, समापन andOTP!
@@ -71,7 +78,6 @@
Tokens usageकुंजी स्टोर त्रुटिQR Code
- Deprecation noticeअपना पासवोर्ड डालेअपना पासवोर्ड डालेपासवर्ड की पुष्टि करें
@@ -81,11 +87,6 @@
to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
\"Last used\".\n\nThis message will not be shown again.KeyStore से एन्क्रिप्शन कुंजी लोड करने में विफल। जो भी प्रविष्टियाँ जोड़ी गई हैं, वे लुप्त हो जाएँगी।\n\nअभी andOTP का उपयोग करने में सक्षम होने के लिए आप सेटिंग पर जा सकते हैं और डेटाबेस एन्क्रिप्शन को पासवर्ड / पिन स्विच कर सकते हैं।
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.क्यूआर कोड स्कैन करेंक्यूआर कोड आयात करें
diff --git a/app/src/main/res/values-hi/strings_settings.xml b/app/src/main/res/values-hi/strings_settings.xml
index b0512347..af868424 100644
--- a/app/src/main/res/values-hi/strings_settings.xml
+++ b/app/src/main/res/values-hi/strings_settings.xml
@@ -18,6 +18,7 @@
निष्क्रियता पर पुनः लॉक करेंनिष्क्रियता पर लॉक के लिए देरीपहुँच सेवाएँ अवरोधित करें
+ Block autofillभाषा थीमकार्ड ख़ाका
@@ -35,7 +36,7 @@
Show individual timeoutsफ़ाइल नाम में तारीख जोड़ेंफ़ाइल नाम के लिए पूछें
- बैकअप निर्देशिका
+ Default backup locationबैकअप पासवर्डनई प्रविष्टियों पर स्वचालित रूप से बैकअपबैकअप प्रसारण
@@ -56,6 +57,10 @@
यंत्र के निष्क्रिय होने के बाद प्रमाणीकरण आवश्यकउस समय (सेकंड में) का चयन करें जिसके बाद पुन: प्रमाणीकरण की आवश्यकता होपहुँच सेवाओं से संवेदनशील फ़ील्ड छिपाएँ। यदि आप पहुंच सेवाओं पर भरोसा करते हैं तो इसे सक्षम न करें!
+ Block autofill services from accessing password
+ fields inside the app
+ This feature requires an Android version
+ above 8.0 (Oreo)उन्हें लंबा करने के बजाय लेबल को स्क्रॉल करेंजब आप ओटीपी को क्लिपबोर्ड पर कॉपी करेंगे तो ऐप को छोटा कर दिया जाएगानिर्दिष्ट करें कि खोज करते समय किन मूल्यों को शामिल किया जाना चाहिए
@@ -65,8 +70,12 @@
This can slow down the app, only enable if really necessary.
बैकअप फ़ाइल नाम में सुझाए गए वर्तमान दिनांक और समय को लागू करेंहर बार एक बैकअप बनाने या पुनर्स्थापित करने के लिए फ़ाइल नाम के लिए पूछें
+ Choose a default backup location
+ Backup location has been chosenपासवर्ड सेट करें जो बैकअप को कूटलेखन के लिए उपयोग होगाजब नई प्रविष्टियाँ जोड़ी जाती हैं या संपादित की जाती हैं, तो एक नया एन्क्रिप्टेड बैकअप बनाता है, अगर सेटिंग्स की शर्तों को पूरा किया जाता है
+ Set a default backup location and a
+ backup password to enable this optionब्रॉडकास्ट का उपयोग करके तीसरी पार्टी ऐप्स द्वारा ट्रिगर होने वाले बैकअप प्रकार का चयन करेंबैकअप को कूटलेख करने के लिए ओपन-पीजीपी कुंजी का मेल पताकूटलेख बैकअप केवल तभी आयात किए जाते हैं जब उन्हें एक वैध कुंजी के साथ हस्ताक्षरित किया जाता है
diff --git a/app/src/main/res/values-hu/strings_auth.xml b/app/src/main/res/values-hu/strings_auth.xml
index 75c0e395..9eb0c592 100644
--- a/app/src/main/res/values-hu/strings_auth.xml
+++ b/app/src/main/res/values-hu/strings_auth.xml
@@ -6,8 +6,8 @@
PIN-kódHitelesítse magát az andOTP indításához!
- Erősítse meg a hitelesítését az új titkosítási
- kulcs előállításához!
+ Erősítse meg a hitelesítést a titkosítási
+ kulcsa előállításához!Feloldás
diff --git a/app/src/main/res/values-hu/strings_backup.xml b/app/src/main/res/values-hu/strings_backup.xml
index 26321f53..f83922a7 100644
--- a/app/src/main/res/values-hu/strings_backup.xml
+++ b/app/src/main/res/values-hu/strings_backup.xml
@@ -50,11 +50,6 @@
mielőtt biztonsági mentést hozna létre
A jelszó/PIN-kód alapú titkosítás nem
támogatott a közvetített biztonsági mentésnél
- Új titkosítási mód
- Az andOTP 0.6.3-as verziója óta a jelszavak egy új és továbbfejlesztett
- titkosítási eljárással kerülnek titkosításra. A régi mentések továbbra is
- importálhatók, de erősen ajánlott új biztonsági mentést létrehozni a továbbfejlesztett
- titkosítással.\n\nEz az üzenet nem jelenik meg újra.Az automatikus biztonsági mentés sikertelenAz automatikus biztonsági mentés sikeres
@@ -63,7 +58,9 @@
Ezek az értesítések akkor jelennek meg,
ha a biztonsági mentés sikeres volt
- A biztonsági mentés könyvtárának létrehozása sikertelen
+ Adja meg a biztonsági mentés alapértelmezett helyét a beállításokban.
+ A biztonsági mentés helyének elérése sikertelen.
+ A biztonsági mentés fájljának létrehozása sikertelen.A külső tárolóra történő exportálás sikeresA külső tárolóra történő exportálás sikertelenA külső tárolóról történő importálás sikeres
@@ -71,7 +68,6 @@
A biztonsági másolat visszafejtése sikertelenNem található bejegyzés az importált adatokbanA külső tároló jelenleg nem érhető el
- A Tároló engedély nincs megadvaOpenPGP hiba: %sNem hitelesített aláírás észlelveA jelszó nincs beállítva, ellenőrizze a Beállítások alatt
diff --git a/app/src/main/res/values-hu/strings_main.xml b/app/src/main/res/values-hu/strings_main.xml
index 45b97e73..624d79b7 100644
--- a/app/src/main/res/values-hu/strings_main.xml
+++ b/app/src/main/res/values-hu/strings_main.xml
@@ -41,10 +41,17 @@
CímUtoljára használtLegtöbbet használt
- Edit
+ SzerkesztésKép módosításaEltávolítás
- Show QR Code
+ QR-kód megjelenítése
+
+ További beállítások
+ További beállítások ehhez: %1$s
+ Token másolása
+ %1$s token másolása
+ Új fiók hozzáadása
+ Menü bezárásaA hitelesítés sikertelen, próbálja újra!A hitelesítés sikertelen, az andOTP bezárul!
@@ -58,36 +65,31 @@
A QR-kód nem található/erősíthető megAz ellenőrzőösszeg-ellenőrzés a QR-kód dekódolásakor sikertelenFormátumhiba a QR-kódban
- QR Code not supported
- Failed to generate QR Code
+ A QR-kód nem támogatott
+ A QR-kód előállítása sikertelen
- Invalid secret
+ Érvénytelen titokHitelesítésAdja meg a részleteketEltávolításÁtnevezésSzámláló
- Tokens usage
+ TokenhasználatKeyStore hiba
- QR Code
- Deprecation notice
+ QR-kódJelszó megadásaJelszó megadásaJelszó megerősítéseKérjük, adja meg a készülék hitelesítő adatait az andOTP indításához.Biztosan törölni szeretné a %1$s\" fiókot?
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ Az andOTP követi, hogy mikor használja a tokeneket (a „Koppintás
+ a megjelenítéshez” funkcióval vagy a vágólapra másoláskor), hogy később
+ beállíthassa a „Leggyakrabban használt” vagy „Utoljára használt”
+ rendezést.\n\nEz az üzenet többször nem fog megjelenni.Nem sikerült betölteni a titkosítási kulcsot a KeyStore-ból.
Az újonnan hozzáadott bejegyzések eltűnnek. \n\nHa továbbra is használni szeretné az andOTP-t,
akkor a Beállítások alatt, leválthatja Adatbázis-titkosítást Jelszó / PIN kódra.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.QR kód beolvasásaQR-kód importálása
diff --git a/app/src/main/res/values-hu/strings_settings.xml b/app/src/main/res/values-hu/strings_settings.xml
index 8c3b18f1..b7aa77a2 100644
--- a/app/src/main/res/values-hu/strings_settings.xml
+++ b/app/src/main/res/values-hu/strings_settings.xml
@@ -18,24 +18,25 @@
Lezárás tétlenségkorA tétlenség miatt lezárás késleltetéseAkadálymentesítési szolgáltatások blokkolása
+ Automatikus kitöltés blokkolásaNyelvTémaKártyák elrendezéseCím betűméreteCím görgetése
- Single-tap
- Double-tap
+ Egy koppintás
+ Dupla koppintásBélyegképek méreteToken elválasztása szóközzelCímkekiválasztás viselkedéseAlkalmazás minimalizálása az OTP másolása utánKeresés viselkedéseLejáró tokenek kiemelése
- Hide global timeout bar
- Show individual timeouts
+ Globális időtúllépési sáv elrejtése
+ Időtúllépések egyenkénti megjelenítéseDátum hozzáfűzése a fájlnévhezFájlnév bekérése
- Biztonsági mentés könyvtára
+ Biztonsági mentés alapértelmezett helyeBiztonsági mentés jelszavaÚj bejegyzések automatikus biztonsági mentéseTovábbított biztonsági mentés
@@ -63,20 +64,30 @@
után hitelesítés szükséges
Érzékeny mezők elrejtése az akadálymentesítési
szolgáltatások elől. NE kapcsolja be, ha használja ezeket!
+ Az automatikus kitöltési szolgáltatások blokkolása,
+ hogy ne férjenek hozzá az alkalmazáson belüli
+ jelszómezőkhöz
+ A funkcióhoz 8.0-s (Oreo) vagy újabb
+ Android verzió szükségesA hosszabb címek görgetése a levágásuk helyettAz alkalmazás minimalizálva lesz, ha a vágólapra másolja az OTP-tAdja meg, hogy mely értékek legyenek belevéve a keresésbeTokenek kiemelése vörössel, ha 8 másodpercen belül lejár
- Hide the global timeout bar shown at the top of the screen
- Show an individual timeout bar for every entry.
- This can slow down the app, only enable if really necessary.
+ A képernyő tetején található globális időtúllépési sáv elrejtése
+ Külön időtúllépési sáv megjelenítése minden bejegyzéshez.
+ Ez lelassíthatja az alkalmazást, csak akkor engedélyezze, ha szükséges.A jelenlegi dátum és idő hozzáfűzése a biztonsági
mentés javasolt nevéhezFájl nevének kérése minden alkalommal amikor biztonsági mentés jön létre vagy állítódik vissza
+ Válassza ki a biztonsági mentés alapértelmezett helyét
+ A biztonsági mentés helye kiválasztvaÁllítsa be a jelszót amit a biztonsági mentések titkosításához használÚj titkosított biztonsági mentést hoz létre, ha új
bejegyzések kerülnek hozzáadásra, szerkesztésre, vagy ha a
beállításokban megadott feltételek teljesülnek
+ A beállítás engedélyezéséhez állítsa be a
+ biztonsági mentés alapértelmezett
+ helyét és jelszavátJelölje ki, hogy melyik biztonsági másolat típusokat indíthatja el a harmadik féltől származó alkalmazás a Broadcasts segítségévelA biztonsági mentések titkosításához használt OpenPGP-kulcs e-mail címeA titkosított biztonsági másolatokat csak akkor lehet importálni, ha érvényes kulccsal írnak alá
@@ -151,10 +162,10 @@
Teljes
- Nothing
- Reveal/Hide
- Copy
- Copy and go to background
+ Semmi
+ Megjelenítés/elrejtés
+ Másolás
+ Másolás és háttérbe küldésCím
diff --git a/app/src/main/res/values-it/strings_auth.xml b/app/src/main/res/values-it/strings_auth.xml
index dc02ef7a..251dbe2b 100644
--- a/app/src/main/res/values-it/strings_auth.xml
+++ b/app/src/main/res/values-it/strings_auth.xml
@@ -6,8 +6,8 @@
PINAutenticati per iniziare a utilizzare andOTP!
- Conferma la tua autenticazione per generare la
- nuova chiave crittografica!
+ Conferma l\'autenticazione per generare la tua
+ chiave crittografica!Sblocca
diff --git a/app/src/main/res/values-it/strings_backup.xml b/app/src/main/res/values-it/strings_backup.xml
index 48dde169..ec9e9424 100644
--- a/app/src/main/res/values-it/strings_backup.xml
+++ b/app/src/main/res/values-it/strings_backup.xml
@@ -49,8 +49,6 @@
di autorizzarli prima di tentare il backup
Crittografia basata su password / PIN
non supportata con backup broadcast
- Nuovo metodo di cifratura
- Dalla versione 0.6.3 di andOTP è stato aggiunto un nuovo e migliore metodo di cifratura, usato per i backup protetti da password. I vecchi backup possono ancora essere importati, ma è altamente consigliata la creazione di nuovi backup con le funzionalità migliorate di cifratura. Questo messaggio non sarà visualizzato nuovamente.Backup automatico fallitoBackup automatico eseguito con successo
@@ -59,7 +57,9 @@
Queste notifiche vengono mostrate quando un
backup automatico viene eseguito con successo
- Impossibile creare la cartella dei backup
+ Devi impostare una posizione di backup predefinita nelle impostazioni!
+ Accesso alla posizione di backup fallito!
+ Creazione del file di backup fallita!Esportazione nella memoria esterna completata con successoEsportazione nella memoria esterna fallitaImportazione dalla memoria esterna completata con successo
@@ -67,7 +67,6 @@
Decrittazione del backup fallitaNessuna voce trovata nei dati importatiMemoria esterna attualmente non accessibile
- Permessi di archiviazione non concessiErrore OpenPGP: %sNon è stata rilevata nessuna firma verificataPassword non impostata, controlla le Impostazioni
diff --git a/app/src/main/res/values-it/strings_main.xml b/app/src/main/res/values-it/strings_main.xml
index c31d95eb..7a150391 100644
--- a/app/src/main/res/values-it/strings_main.xml
+++ b/app/src/main/res/values-it/strings_main.xml
@@ -45,6 +45,13 @@
Cambia ImmagineRimuoviMostra codice QR
+
+ Altre opzioni
+ Altre opzioni per %1$s
+ Copia il token
+ Copia il token %1$s
+ Aggiungi un nuovo account
+ Chiudi il menuAutenticazione non riuscita, riprova!Autenticazione non riuscita, andOTP verrà chiuso!
@@ -71,7 +78,6 @@
Utilizzo dei tokenErrore KeyStoreCodice QR
- Avviso di deprecazioneInserisci la passwordInserisci la passwordConferma la password
@@ -83,11 +89,6 @@
Impossibile caricare la chiave di crittografia dal KeyStore.
Qualsiasi voce aggiunta verrà persa\n\nPer continuare ad utilizzare andOTP, vai nelle
Impostazioni e imposta la Crittografia del database su Password / PIN.
- Questa sarà l\'ultima versione di andOTP che
- supporta versioni di Android sotto alla 5.1 (Lollipop). L\'aumento dell\'impegno richiesto per
- mantenere un\'implementazione di archiviazione separata solo per quelle vecchie versioni
- e le loro basse quote di mercato rendono impossibile un supporto continuo per il nostro
- piccolo team.\n\nQuesto messaggio non verrà più mostrato.Scansione QR-CodeImporta codice QR
diff --git a/app/src/main/res/values-it/strings_settings.xml b/app/src/main/res/values-it/strings_settings.xml
index 35dd8860..d4742221 100644
--- a/app/src/main/res/values-it/strings_settings.xml
+++ b/app/src/main/res/values-it/strings_settings.xml
@@ -18,6 +18,7 @@
Blocca nuovamente quando inattivoRitarda il blocco quando inattivoBlocca servizi di accessibilità
+ Blocca autocompletamentoLinguaTemaLayout scheda
@@ -35,7 +36,7 @@
Mostra i singoli timeoutAggiungi la data al nome del fileChiedi un nome di file
- Cartella backup
+ Posizione di backup predefinitaImposta password di backupBackup automatico delle nuove vociBackup Broadcast
@@ -63,6 +64,10 @@
sarà richiesta nuovamente l\'autenticazione
Nascondi i campi sensibili dai servizi di accessibilità.
NON abilitarlo se fai affidamento sui servizi di accessibilità!
+ Impedisci ai servizi di autocompletamento di accedere ai campi
+ delle password nell\'app
+ Questa funzione richiede una versione di Android
+ superiore alla 8.0 (Oreo)Etichette che scorrono invece che venire troncateL\'app verrà minimizzata quando si copia un codice OTP negli appuntiSpecifica quali valori devono essere inclusi durante la ricerca
@@ -74,10 +79,14 @@ sarà richiesta nuovamente l\'autenticazione
file di backup suggerito
Chiedere il nome del file ogni volta che un backup
viene creato o ripristinato
+ Scegli una posizione di backup predefinita
+ La posizione di backup è stata sceltaImpostare la password utilizzata per crittografare i
backupCrea un nuovo backup cifrato quando vengono create nuove
voci o editate, se le condizioni delle impostazioni sono configurate
+ Imposta una posizione di backup predefinita ed una
+ password di backup per attivare questa opzioneSeleziona quali tipi di backup possono essere
attivati da app di terze parti tramite BroadcastIndirizzo di posta della chiave OpenPGP utilizzata per
diff --git a/app/src/main/res/values-iw/strings_about.xml b/app/src/main/res/values-iw/strings_about.xml
new file mode 100644
index 00000000..584313c2
--- /dev/null
+++ b/app/src/main/res/values-iw/strings_about.xml
@@ -0,0 +1,46 @@
+
+
+ אודות
+ אימות דו שלבי עם קוד פתוח לאנדרואיד
+ אודות
+ ספריות
+
+ רשימת שינויים
+ רישיון
+ רישיון MIT
+ קוד מקור
+ גירסה
+ שאלות נפוצות
+ שאלות נפוצות
+
+ מחברים
+ מפתח ראשי
+ מפתח
+ מחבר האפליקציה המקורית
+ אפליקציה מקורית
+ אתר אינטרנט
+ תרום
+ מתנדבים
+ מתרגמים
+
+ הצהרת ויתור תמונה מוקטנת
+ 1. כל התמונות המוקטנות הינן סימנים מסחריים של בעליהם בהתאמה.
+ 2. השימוש בסימנים מסחריים אלה אינו
+ מעיד על הסכמה של בעל הסימן המסחרי על ידי andOTP, וגם לא להיפך.
+ 3. יש להשתמש בתמונות ממוזערות רק כדי
+ לייצג את החברה או המוצר שאליו הם מתייחסים.
+ 4. אנא אל תשתמש בתמונות ממוזערות לכל
+ מטרה שהיא למעט לייצג את אותו מותג או שירות.
+
+ תמיכה בפיתוח
+ גלה כיצד תוכל לתמוך בפיתוח של andOTP
+ תכונות מיוחדות
+ האם אתה בטוח שברצונך לאפשר את התכונות
+ המיוחדות? רובן הן אלגוריתמים לא סטנדרטיים של OTP אשר יושמו על פי בקשה
+ מיוחדת. הן לא נתמכות רשמית והן יכולות להגיע עם מגבלות
+ מסויימות, אנא קרא (והבן) את הדף \"תכונות מיוחדות\" ב-Github
+ wiki כדי ללמוד עוד לפני השימוש בהן.
+ תכונות חדשות מאופשרות
+ תכונות חדשות כבר מאופשרות
+ קישור לתרומה הועתק ללוח
+
diff --git a/app/src/main/res/values-iw/strings_auth.xml b/app/src/main/res/values-iw/strings_auth.xml
new file mode 100644
index 00000000..b52a4ad8
--- /dev/null
+++ b/app/src/main/res/values-iw/strings_auth.xml
@@ -0,0 +1,18 @@
+
+
+ אימות
+
+ סיסמה
+ קוד PIN
+
+ אנא אמת כדי להתחיל להשתמש ב- andOTP!
+ אנא אשר אימות כדי ליצור את
+קוד ההצפנה שלך!
+
+ ביטול נעילה
+
+ אנא הזן סיסמה ב<b>הגדרות<b/>!
+ אנא הזן קוד PIN ב<b>הגדרות<b/>!
+ סיסמה שגויה, אנא נסה שוב!
+ קוד PIN שגוי, אנא נסה שוב!
+
diff --git a/app/src/main/res/values-iw/strings_backup.xml b/app/src/main/res/values-iw/strings_backup.xml
new file mode 100644
index 00000000..685dc8fb
--- /dev/null
+++ b/app/src/main/res/values-iw/strings_backup.xml
@@ -0,0 +1,68 @@
+
+
+ גיבויים
+ גיבויים בטקסט פשוט
+ גיבויים מוצפנים
+ גיבויים ב- OpenPGP
+ גיבוי (טקסט פשוט)
+ גיבוי (מוצפן)
+ גיבוי (OpenPGP)
+ שיחזור (טקסט פשוט)
+ שיחזור (מוצפן)
+ שחזור (מוצפן, הצפנה ישנה)
+ שיחזור (OpenPGP)
+ החלף חשבונות קיימים
+ גיבוי כל החשבונות בקובץ JSON בטקסט פשוט
+ גיבוי כל החשבונות בקובץ JSON מוגן בסיסמה
+ גיבוי כל החשבונות בקובץ JSON ב- OpenPGP מוצפן
+ שיחזור חשבונות מתוך קובץ JSON טקסט פשוט
+ שיחזור חשבונות מתוך קובץ JSON מוגן בסיסמה
+ שחזר משתמשים מקובץ JSON מוגן בסיסמה
+ שיוצר עם גירסת andOTP קטנה מ- 0.6.3
+ שיחזור חשבונות מתוך קובץ OpenPGP JSON מוצפן
+ טעינת סיסמת הגיבוי מההגדרות נכשלה,
+ פירוש הדבר שלא הוגדרה סיסמה או שמשהו השתבש. אתה תתבקש להכניס
+ את הסיסמה ידנית בעת יצירה או ייבוא של גיבוי.
+
+ אתה צריך להתקין ספק OpenPGP ולאפשר
+ אותו בהגדרות כדי להשתמש בפיטצ\'ר זה.
+
+ אתה צריך לבחור מפתח OpenPGP בהגדרות
+ לפני שאתה יכול ליצור גיבויים מוצפנים.
+
+ אם מאופשר, כל החשבונות הישנים מוחלפים בעת ייבוא
+ של גיבוי ורק הגיבוי קיים. אם מושבת, החשבונות הישנים ותוכן הגיבוי
+ מתמזגים.
+
+ אזהרת אבטחה
+ האם אתה באמת רוצה לייצא את הנתונים כ-
+ קובץ JSON בטקסט פשוט? קובץ זה כולל את כל המפתחות הסודיים שלך, בבקשה שמור על זה בטוח!
+
+ הגיבוי נכשל
+ הגיבוי הצליח
+ גיבויים בטקסט פשוט לא מורשים כרגע, אנא עבור להגדרות כדי לאפשר אותם
+ גיבויים מוצפנים לא מורשים כרגע, אנא עבור להגדרות כדי לאפשר אותם
+ הרשאת קריאה לא ניתנה, אנא עשה זאת לפני נסיון גיבוי
+ הרשאת כתיבה לא ניתנה, אנא עשה זאת לפני נסיון גיבוי
+ סיסמה/קוד PIN מבוסס הצפנה לא נתמך עם שידור הגיבוי
+
+ גיבוי אוטומטי נכשל
+ גיבוי אוטומטי הצליח
+ התראות אלה מוצגות כאשר גיבוי אוטומטי נכשל מסיבה מסויימת
+ התראות אלה מוצגות כאשר גיבוי אוטומטי הצליח
+
+ אנא הגדר מיקום ברירת מחדל לגיבוי בהגדרות!
+ הגישה למיקום הגיבוי נכשלה!
+ יצירת קובץ גיבוי נכשלה!
+ יצוא לאחסון חיצוני הצליח
+ יצוא לאחסון חיצוני נכשל
+ יבוא מאחסון חיצוני הצליח
+ שמירת חשבונות משוחזרים נכשלה
+ פתיחת הצפנה של הגיבוי נכשלה
+ לא נמצאו חשבונות בנתונים המיובאים
+ אחסון חיצוני לא נגיש כעת
+ שגיאת OpenPGP: %s
+ לא זוהתה חתימה מאומתת
+ לא הוגדרה סיסמה, בדוק את ה הגדרות
+ לא ניתן לפתוח את תיבת הדו-שיח לבחירת קבצים!
+
diff --git a/app/src/main/res/values-iw/strings_intro.xml b/app/src/main/res/values-iw/strings_intro.xml
new file mode 100644
index 00000000..1121e98a
--- /dev/null
+++ b/app/src/main/res/values-iw/strings_intro.xml
@@ -0,0 +1,32 @@
+
+
+ בוא נתחיל
+ ברוך הבא ל andOTP, אשף זה ינחה אותך בהתקנה הראשונית. אנא הקדש תשומת לב וקרא בקפידה, אחרת אתה יכול לאבד את הנתונים שלך! \n\nאל דאגה, אתה עדיין יכול לשנות כל אחת מהאפשרויות מאוחר יותר בהגדרות.
+ כדי לוודא את אבטחת החשבונות שלך andOTP יאחסן אותם רק בקבצי נתונים מוצפנים. כאן אתה יכול לבחור איזו שיטת הצפנה תהיה בשימוש.
+ ה- KeyStore הינו רכיב מערכת של אנדרואיד בשביל
+ אחסנת מפתחות באופן מאובטח. היתרון בשיטה זו הוא שהמפתחות
+ מאוחסנים בנפרד מקבצי הנתונים, ויכולים להיות מגובים על ידי הצפנת חומרה (אם
+ מכשירך תומך בזה). למרות זאת, כמו שהמפתחות לא מאוחסנים עם נתוני האפליקציות, שיטה זו
+ מונעת מפתרונות גיבוי חיצוני (כמו Titanium) מלפעול. אם אתה בוחר
+ שיטה זו, אתה תצטרך להסתמך על פונקציות הגיבוי הפנימי המסופקות ע\"י andOTP.
+ \n\nאזהרה: ה-KeyStore ידוע בגרימת הרבה בעיות, אנא השתמש בזה רק אם
+ אתה לחלוטין חייב. אם לא אכפת לך להכניס סיסמה / קוד PIN בכל פעם שאתה מפעיל את
+ andOTP, זה מאוד מומלץ להשתמש בהצפנה מבוססת סיסמה במקום.
+ שיטה זו תצפין את הנתונים שלך באמצעות מפתח
+ שנוצר מסיסמה או קוד PIN. היתרון העקרי כאן הוא שזה יעבוד עם
+ פתרונות גיבוי חיצוני (כמו Titanium) וזה הרבה פחות מועד לכישלון מאשר KeyStore.
+ למרות זאת, אתה תהיה חייב להכניס את האישורים המזהים שלך בכל פעם שאתה מתחיל את andOTP.
+ כאן אתה יכול להגדיר אימות לנעילת
+ andOTP. היות ובחרת Android KeyStore כשיטת הצפנה, זה
+ אופציונלי.
+ כאן אתה יכול להגדיר אימות לנעילת
+ andOTP. היות ובחרת סיסמה / קוד PIN כשיטת הצפנה, אתה צריך
+ להגדיר סיסמה או קוד PIN כדי להמשיך.
+ אנא הגדר סיסמה כדי להמשיך!
+ אנא הגדר קוד PIN כדי להמשיך!
+ אנא אשר את הסיסמה שלך כדי להמשיך!
+ אנא אשר את הקוד PIN שלך כדי להמשיך!
+ הסתיים
+ ההגדרות שלך נשמרו, הינך מוכן להשתמש ב
+ andOTP עכשיו!
+
diff --git a/app/src/main/res/values-iw/strings_main.xml b/app/src/main/res/values-iw/strings_main.xml
new file mode 100644
index 00000000..07888dcc
--- /dev/null
+++ b/app/src/main/res/values-iw/strings_main.xml
@@ -0,0 +1,96 @@
+
+
+
+ בטל
+ הכנס פרטים
+ סרוק קוד-QR
+ שמור
+ תג חדש
+ הגדרות
+ כל התוויות
+ ללא תגיות
+ קוד QR מתמונה
+
+ %d שניות
+
+ תווית
+ סוד
+
+ מוסתר
+ סוג
+ סוד
+ תקופה
+ ספרות
+ מונה
+ מנפיק
+ תווית
+ אלגוריתם
+ תגים
+ אפשרויות מתקדמות
+
+ הצג תגיות
+ הסתר תגיות
+
+ אודות
+ גיבוי
+ חפש
+ הגדרות
+ מיון
+ לא ממוין
+ מנפיק
+ תווית
+ שימוש אחרון
+ הכי משומש
+ ערוך
+ שנה תמונה
+ הסר
+ הצג קוד QR
+
+ אפשרויות נוספות
+ אפשרויות נוספות עבור %1$s
+ העתק אסימון
+ העתק אסימון %1$s
+ הוסף חשבון חדש
+ סגור תפריט
+
+ אימות נכשל, אנא נסה שוב!
+ אימות נכשל, סוגר את andOTP!
+ הועתק ללוח
+ ערך זה כבר קיים
+ קוד QR לא תקין
+ מפתח הצפנה לא נטען
+ הועבר קוד לא חוקי שנוסף על ידי הישום
+ נוסף קוד שסופק על ידי הישום
+ לא היה ניתן לפתוח את הקובץ
+ לא היה ניתן למצוא/לאמת קוד QR
+ אימות סכום הבדיקה נכשל בעת פענוח קוד QR
+ שגיאת פורמט בקוד QR
+ קוד QR אינו נתמך
+ יצירת קוד QR נכשלה
+
+ סוד לא חוקי
+
+ אימות
+ הכנס פרטים
+ הסר
+ שנה שם
+ מונה
+ שימוש באסימונים
+ שגיאת KeyStore
+ קוד QR
+ הכנס סיסמה
+ הכנס סיסמה
+ אשר סיסמה
+ אנא הכנס את האישורים המזהים של מכשירך כדי להפעיל את andOTP.
+ האם אתה בטוח שברצונך להסיר את החשבון \"%1$s\"?
+ andOTP יעקוב אחר השימוש באסימונים שלך (באמצעות הפיטצ\'ר \"הקש
+ כדי לחשוף\" או העתקה ללוח) כדי להיות מסוגל למיין אותם לפי \"הנפוץ ביותר\" או
+ \"נעשה שימוש אחרון\".\n\nהודעה זו לא תוצג שוב.
+ טעינת מפתח ההצפנה מ- KeyStore נכשלה.
+ כל חשבון שנוסף יאבד.\n\nכדי שתוכל עדיין להשתמש ב- andOTP, אתה יכול לגשת
+ להגדרות ולהחליף את הצפנת מסד הנתונים לסיסמה / קוד PIN.
+
+ סרוק קוד-QR
+ ייבא קוד QR
+ הכנס פרטים
+
diff --git a/app/src/main/res/values-iw/strings_settings.xml b/app/src/main/res/values-iw/strings_settings.xml
new file mode 100644
index 00000000..b6754e36
--- /dev/null
+++ b/app/src/main/res/values-iw/strings_settings.xml
@@ -0,0 +1,215 @@
+
+
+ הגדרות
+
+ אבטחה
+ ממשק משתמש
+ גיבוי
+
+ הקש כדי לחשוף
+ פסק זמן להקש כדי לחשוף
+ אימות
+ סיסמא
+ קוד PIN
+ הצפנת נתונים
+ טריגר מצוקה
+ נעל מחדש בכיבוי המסך
+ נעל מחדש במעבר לאפליקציה אחרת
+ נעל מחדש לאחר חוסר פעילות
+ עיכוב נעילה מחדש לאחר חוסר פעילות
+ חסום שירותי נגישות
+ חסום מילוי אוטומטי
+ שפה
+ ערכת נושא
+ פריסת כרטיס
+ גודל גופן של תווית
+ גלול תווית
+ לחיצה-אחת
+ לחיצה-כפולה
+ גודל תמונה ממוזערת
+ פצל אסימון עם רווח
+ התנהגות בבחירת תגים
+ מזער את האפליקציה לאחר העתקת OTP
+ התנהגות חיפוש
+ הדגש אסימונים שפג תוקפם
+ הסתר את סרגל פסק הזמן הראשי
+ הראה פסק זמן אישי
+ הוסף תאריך לשם הקובץ
+ בקש שם קובץ
+ מיקום ברירת מחדל לגיבוי
+ סיסמת גיבוי
+ גיבוי אוטומטי בעת הוספת ערכים חדשים
+ שידורי גיבוי
+ ספק OpenPGP
+ מפתח הצפנה OpenPGP
+ מפתח חתימת OpenPGP (אופציונלי)
+ אמת גיבויים מוצפנים
+ אפשר תכונות מיוחדות
+ אפשר צילומי מסך
+ אפשר סינכרון אנדרואיד
+ נקה KeyStore
+
+ הסתר את אסימוני ה- OTP כברירת מחדל, כאשר נדרש מהם להיות
+ נחשפים ידנית
+ בחר את הזמן (בשניות) שאחריו להסתיר
+ שוב ערכים שנחשפו
+ החלט מה קורה כאשר מתקבל טריגר בהלה
+ דרוש אימות לאחר שמסך המכשיר
+ כובה
+ דרוש אימות לאחר שליחת האפליקציה
+ לרקע (למשל על ידי לחיצה על כפתור הבית)
+ דרוש אימות לאחר שהמכשיר
+ לא היה פעיל
+ בחר את הזמן (בשניות) שאחריו
+ יהיה צורך באימות מחדש
+ הסתר שדות רגישים משירותי
+ הנגישות. אל תאפשר זאת אם אתה מסתמך על שירותי הנגישות!
+ חסום משירותי מילוי אוטומטי גישה לשדות סיסמאות
+ בתוך האפליקציה
+ תכונה זו דורשת גרסת Android
+ מעל 8.0 (Oreo)
+ גלול בתוויות ארוכות במקום לקטוע אותן
+ האפליקציה תמוזער כאשר תעתיק את ה- OTP ללוח
+ ציין אילו ערכים צריכים להיכלל בעת חיפוש
+ הדגשות האסימון באדום אם הוא יפוג בעוד 8 שניות
+ הסתר את סרגל פסק הזמן הגלובלי המוצג בראש המסך
+ הראה סרגל פסק זמן יחודי לכל ערך.
+ זה יכול להאט את האפליקציה, להפעיל אם באמת צריך.
+ הוסף את התאריך והשעה הנוכחיים לשם קובץ הגיבוי
+ המוצע
+ בקש את שם הקובץ בכל פעם שגיבוי נוצר או
+ משוחזר
+ בחר מיקום ברירת מחדל לגיבוי
+ נבחר מיקום גיבוי
+ הגדר את הסיסמה המשמשת להצפנת
+ הגיבויים
+ יוצר גיבוי מוצפן חדש כאשר
+ ערכים חדשים נוספים, או נערכים, אם מתקיימים תנאי ההגדרות
+ הגדר מיקום ברירת מחדל לגיבוי
+ וסיסמת גיבוי כדי להפעיל אפשרות זו
+ בחר אילו סוגי גיבוי יכולים להיות מופעלים על ידי
+ אפליקציות צד שלישי באמצעות שידורים
+ כתובת דואר של מפתח OpenPGP המשמש להצפנת
+ הגיבויים
+ גיבויים מוצפנים מיובאים רק אם הם
+ חתומים באמצעות מפתח חוקי
+ בטל את הסימון כדי להשבית את התכונות המיוחדות בשנית
+ אפשר לצלם צילומי מסך של המסך הראשי
+ (מושבת כברירת מחדל מטעמי אבטחה)
+ אפשר ל- andOTP להשתמש בשירות הגיבוי המובנה של Android
+ כדי לגבות את המפתחות וההעדפות
+ מחק את מפתח ההצפנה מ- KeyStore
+
+ תכונה זו דורשת מסך נעילה מאובטח
+ שיהיה מוגדר (הגדרות -> אבטחה -> נעילת מסך)
+ סיסמה ריקה אינה מורשית, הגדר את
+ האימות ל\"אף אחד\" כדי להשבית אותו!
+ מנסה לשנות את הצפנת מסד הנתונים,
+ אנא המתן!
+ שינוי הצפנת מסד הנתונים הוצלח!
+ שינוי הצפנת מסד הנתונים נכשל,
+ חוזר למצב המקורי!
+ יצירת גיבוי פנימי נכשלה, מבטל!
+ השגת מפתח ההצפנה נכשלה, מבטל!
+ אימות נכשל!
+ נכשל השדרוג השקט של הסיסמה / PIN
+ להצפנה החדשה, אנא אפס אותה ידנית בהגדרות!
+ אזהרה
+ שגיאה
+ לנקות את ה- KeyStore?
+ סנכרון אנדרואיד
+ andOTP תנסה כעת לשנות את
+ הצפנת מסד הנתונים. במקרה של תקלה ישוחזר גיבוי פנימי וההצפנה
+ תשאר ללא שינוי.\n\n עם זאת, זה תמיד רעיון טוב שיהיה לך גיבוי למקרה
+ שקורה משהו לא צפוי!
+ אתה יכול להשתמש רק בסיסמה או PIN
+ כל עוד הצפנת מסד הנתונים מוגדרת כ\"סיסמה / PIN\"!
+ ראשית עליך להגדיר את
+ האימות ל- \"סיסמה\" או \"PIN\"!
+ ראשית עליך להגדיר
+ סיסמה או PIN לפני שינוי ההצפנה!
+ בחלק מהמקרים ניקוי ה- KeyStore
+ יכול לעזור בפתרון בעיות. עליך להמשיך רק אם אתה יודע מה אתה עושה!\n\n מכיוון
+ שהצפנת מסד הנתונים מוגדרת ל- סיסמה / PIN אתה לא צריך לאבד שום נתונים
+ כשאתה עושה זאת (אך זה לא כואב שיהיה לך גיבוי בכל מקרה).\n\n האם אתה באמת בטוח שאתה רוצה
+ לנקות את ה- KeyStore?
+ בחלק מהמקרים ניקוי ה- KeyStore
+ יכול לעזור בפתרון בעיות. עליך להמשיך רק אם אתה יודע מה אתה עושה!\n\n אזהרה:
+ מכיוון שהצפנת מסד הנתונים מוגדרת ל- Android KeyStore אתה תאבד את
+ כל החשבונות שלך. וודא שיש לך גיבוי.\n\n האם אתה באמת בטוח שאתה רוצה לנקות את ה-
+ KeyStore?
+ לא ניתן להשתמש בסנכרון Android עם הצפנת keystore,
+ עליך לבצע גיבוי ידני!
+
+
+ אף אחד
+ סיסמה
+ קוד PIN
+ אישורי מכשיר
+
+
+ KeyStore אנדרואיד
+ סיסמה / PIN
+
+
+ מחק את כל החשבונות
+ איפוס הגדרות אפליקציה
+
+
+ קומפקטי
+ ברירת מחדל
+ מלא
+
+
+ כלום
+ חשוף/הסתר
+ העתק
+ העתק ולך לרקע
+
+
+ תווית
+ מנפיק
+ תגים
+
+
+ כבוי
+ ערכים חדשים
+ כל העריכות
+
+
+ ערכת נושא בהירה
+ ערכת נושא כהה
+ ערכת נושא שחורה
+
+
+ מוסתר
+ זעיר
+ קטן
+ ברירת מחדל
+ בינוני
+ גדול
+
+
+ אל תפצל
+ לאחר שני תווים
+ לאחר שלושה תווים
+
+
+ הצג את כל הערכים התואמים לאיזושהי תגית מהתגיות שנבחרו (או)
+ הצג רק ערכים התואמים לכל התגיות מהתגיות שנבחרו (ו-)
+ עבור בין תגים (אפשר לבחור רק תווית אחת בכל פעם)
+
+
+ גיבויים בטקסט פשוט
+ גיבויים מוצפנים
+
+
+ ברירת המחדל של המערכת
+
+ הקלד סיסמה חדשה
+ הכנס קוד PIN חדש
+ אשר סיסמה
+ אשר PIN
+ הסיסמה חייבת להיות באורך של %1$d תווים לפחות!
+ ה- PIN חייב להיות באורך של %1$d ספרות לפחות!
+
diff --git a/app/src/main/res/values-ja/strings_auth.xml b/app/src/main/res/values-ja/strings_auth.xml
index 30d79d5e..fe2d142c 100644
--- a/app/src/main/res/values-ja/strings_auth.xml
+++ b/app/src/main/res/values-ja/strings_auth.xml
@@ -6,7 +6,7 @@
PINandOTP を起動するために認証を行ってください!
- 新しい暗号化キーを生成するために、認証情報を入力してください。
+ あなたの暗号鍵を生成するために、認証情報を入力してください。解除
diff --git a/app/src/main/res/values-ja/strings_backup.xml b/app/src/main/res/values-ja/strings_backup.xml
index b1a49072..3defcabd 100644
--- a/app/src/main/res/values-ja/strings_backup.xml
+++ b/app/src/main/res/values-ja/strings_backup.xml
@@ -33,15 +33,15 @@
読み込み権限が付与されていないため、バックアップを実行する前に許可してください書き込み権限が付与されていないため、バックアップを実行する前に許可してくださいパスワード / PIN ベースの暗号化はブロードキャストバックアップでサポートされていません
- 新しい暗号化形式
- andOTP 0.6.3 以降のバージョンでは、パスワードで暗号化されたバックアップに、新しく改良された暗号化形式が利用されます。古い暗号化形式を利用したバックアップは引き続き復元に利用できますが、新しい暗号化形式を利用して新たにバックアップを作成することを強くお勧めします。\n\nこのメッセージは再度表示されることはありません。自動バックアップに失敗しました自動バックアップに成功しましたこれらの通知は、何らかの理由で自動バックアップが失敗した場合に表示されますこれらの通知は、自動バックアップが成功した場合に表示されます
- バックアップディレクトリの作成に失敗しました
+ 既定のバックアップ保存先を設定してください。
+ バックアップ保存先へのアクセスに失敗しました。
+ バックアップファイルの作成に失敗しました。外部ストレージへのエクスポートに成功しました外部ストレージへのエクスポートに失敗しました外部ストレージからのインポートに成功しました
@@ -49,7 +49,6 @@
バックアップの復号化に失敗しましたインポートされたデータにエントリが見つかりません外部ストレージは現在アクセスできません
- ストレージへのアクセス権限がありませんOpenPGP エラー: %s確認済みの署名が見つかりませんパスワードが設定されていません、 設定 を確認してください
diff --git a/app/src/main/res/values-ja/strings_main.xml b/app/src/main/res/values-ja/strings_main.xml
index 42ef7637..5ec860b6 100644
--- a/app/src/main/res/values-ja/strings_main.xml
+++ b/app/src/main/res/values-ja/strings_main.xml
@@ -45,6 +45,13 @@
画像を変更削除QR コードを表示
+
+ その他設定
+ %1$s のその他設定
+ トークンをコピー
+ %1$s のトークンをコピー
+ 新しいアカウントを追加
+ メニューを閉じる認証に失敗しました、もう一度やり直してください!認証に失敗しました、 andOTP を終了します!
@@ -71,7 +78,6 @@
トークンの使用キーストアエラーQR コード
- サポート廃止の通知パスワードを入力パスワードを入力パスワードの確認
@@ -80,7 +86,6 @@
andOTP はあなたがトークンを使用したタイミングを追跡します(「タップして表示」を使用するかクリップボードにコピーした場合)。これにより、トークンを「使用回数順」または「使用した順」で並び替えることができます。\n\nこのメッセージは再度表示されることはありません。キーストアから暗号化キーを読み込めませんでした。 追加されたエントリはすべて失われます。
\n\n andOTP を引き続き使用できるようにするには 設定 に行き データベース暗号化 を パスワード / PIN に切り替えます。
- このアプリバージョンは、Android 5.1 (ロリポップ)以下の Android バージョンをサポートする andOTP の最後のバージョンになります。これらの Android バージョンは古く、私たちのような小さな開発チームが利用者の少ない Android バージョンをサポートし続けるために別のストレージ実装を維持するが困難であるため、今後のアプリバージョンではサポートされなくなります。\n\nこのメッセージは再度表示されることはありません。QR コードをスキャンQR コードをインポート
diff --git a/app/src/main/res/values-ja/strings_settings.xml b/app/src/main/res/values-ja/strings_settings.xml
index 36ba436f..8a50a5b1 100644
--- a/app/src/main/res/values-ja/strings_settings.xml
+++ b/app/src/main/res/values-ja/strings_settings.xml
@@ -18,6 +18,7 @@
非アクティブでロック非アクティブでロックの遅延時間ユーザー補助サービスをブロック
+ 自動入力をブロック言語テーマカードレイアウト
@@ -35,7 +36,7 @@
個別の有効期限表示を行う日付をファイル名に追加ファイルを確認
- バックアップディレクトリ
+ 既定のバックアップ保存先バックアップパスワード新しいエントリの自動バックアップバックアップブロードキャスト
@@ -56,6 +57,8 @@
デバイスが非アクティブになった後に認証を要求する再度認証を要求するまでの時間 (秒) を選択してください機密性の高い項目をユーザー補助サービスから非表示にします。ユーザー補助サービスを使用している場合は、この機能を有効にしないでください!
+ 自動入力サービスによるアプリ内のパスワードフィールドへのアクセスをブロックします
+ この機能を利用するには Android 8.0 (Oreo) 以上のバージョンが必要ですラベルが長すぎる場合はスクロールするOTP をクリップボードにコピーしたら、アプリを最小化する検索の対象に含める値を指定します
@@ -64,8 +67,11 @@
すべてのエントリで「個別の有効期限表示」を有効化します。この設定によりアプリの動作が遅くなる可能性があるため、本当に必要な場合のみ有効化してください。提案されたバックアップファイル名に現在の日付と時刻を追加するバックアップが作成または復元されるたびにファイル名を確認する
+ 既定のバックアップ保存先を選択
+ バックアップ保存先が選択されましたバックアップの暗号化に使用するパスワードを設定新しいエントリが追加された、または既存のエントリが編集された場合に、新しい暗号化バックアップを作成します
+ このオプションを有効にするには、既定のバックアップ保存先とバックアップパスワードを設定してくださいブロードキャストを使用してサードパーティのアプリによってトリガーできるバックアップの種類を選択するバックアップの暗号化に使用する OpenPGP キーのメールアドレス暗号化バックアップは、有効なキーで署名されている場合にのみインポートされます
diff --git a/app/src/main/res/values-nl/strings_about.xml b/app/src/main/res/values-nl/strings_about.xml
index 08c87619..fcaffa74 100644
--- a/app/src/main/res/values-nl/strings_about.xml
+++ b/app/src/main/res/values-nl/strings_about.xml
@@ -1,7 +1,7 @@
Over
- Open source twee-factor-authenticatie voor Android
+ Open source tweefactorauthenticatie voor AndroidOverBibliotheken
diff --git a/app/src/main/res/values-nl/strings_auth.xml b/app/src/main/res/values-nl/strings_auth.xml
index 0a37f092..0de7647d 100644
--- a/app/src/main/res/values-nl/strings_auth.xml
+++ b/app/src/main/res/values-nl/strings_auth.xml
@@ -6,7 +6,8 @@
PincodeGelieve verifiëren om andOTP te starten!
- Bevestig je verificatie om een nieuwe sleutel aan te maken!
+ Bevestig verificatie om je
+ encryptiesleutel te genereren!Ontgrendelen
diff --git a/app/src/main/res/values-nl/strings_backup.xml b/app/src/main/res/values-nl/strings_backup.xml
index d6f43b25..c9c16282 100644
--- a/app/src/main/res/values-nl/strings_backup.xml
+++ b/app/src/main/res/values-nl/strings_backup.xml
@@ -37,18 +37,15 @@
Verleen eerst toestemming om te lezen voordat je een reservekopie gaat makenGeen machtiging tot schrijven verleend, gelieve dit te doen voordat je een reservekopie maaktVersleuteling op basis van wachtwoord/pincode wordt niet ondersteund bij reservekopieën gemaakt op afstand
- Nieuwe versleutelingsmethode
- Sinds versie 0.6.3 van andOTP, wordt er een nieuwe en verbeterde
- versleutelingsmethode gebruikt voor wachtwoordbeveiligde reservekopieën. Oude reservekopieën kunnen nog steeds
- worden geïmporteerd, maar het is aanbevolen om nieuwe reservekopieën te maken met de verbeterde
- versleuteling.\n\nDit bericht zal niet meer worden weergegeven.Automatische reservekopie misluktAutomatische reservekopie geslaagdDeze meldingen worden getoond wanneer een automatische reservekopie niet geslaagd isDeze meldingen worden getoond wanneer een automatische reservekopie geslaagd is
- Het maken van een reservekopiemap is mislukt
+ Stel een reservekopie locatie bij de instellingen!
+ Toegang tot de resrverkopie locatie mislukte!
+ Het aanmaken van de reservekopie mislukte!Exporteren naar een extern opslagmedium was succesvolExporteren naar een extern opslagmedium is misluktImporteren uit externe opslag was succesvol
@@ -56,7 +53,6 @@
Ontsleutelen van de reservekopie is misluktGeen vermeldingen gevonden in geïmporteerde gegevensExterne opslag is momenteel niet toegankelijk
- Geen machtiging tot de opslagruimte verleendOpenPGP fout: %sGeen geverifieerde handtekening gevondenWachtwoord niet ingesteld, controleer de Instellingen
diff --git a/app/src/main/res/values-nl/strings_main.xml b/app/src/main/res/values-nl/strings_main.xml
index 030f2c9c..bbe95c3f 100644
--- a/app/src/main/res/values-nl/strings_main.xml
+++ b/app/src/main/res/values-nl/strings_main.xml
@@ -41,12 +41,19 @@
EtiketLaatst gebruiktMeest gebruikt
- Edit
+ BewerkenAfbeelding wijzigenVerwijderen
- Show QR Code
+ QR-code weergeven
+
+ Meer opties
+ Meer opties voor %1$s
+ Kopieer token
+ Kopieer %1$s token
+ Nieuw account toevoegen
+ Menu sluiten
- Authenticatie mislukt. Probeer opnieuw!
+ Verificatie mislukte, probeer opnieuw!Verificatie is mislukt, andOTP wordt afgesloten!Gekopieerd naar klembordDeze toegang bestaat al
@@ -58,34 +65,28 @@
Kon QR-code niet vinden/bevestigenChecksum verificatie mislukte tijdens het decoderen van de QR-codeFormaat fout in QR-code
- QR Code not supported
- Failed to generate QR Code
+ QR-Code niet ondersteund
+ Genereren van QR-code mislukt
- Invalid secret
+ Ongeldig geheimVerifiërenDetails ingevenVerwijderenHernoemenTeller
- Tokens usage
+ Gebruik van tokensSleutelkast fout
- QR Code
- Deprecation notice
+ QR-codeWachtwoord invoerenWachtwoord invoerenWachtwoord bevestigenVoer de referenties van uw apparaat in om te beginnen met andOTP.Weet je zeker dat je account \"%1$s\" wil verwijderen?
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ andOTP zal bijhouden wanneer u uw tokens gebruikt (met behulp van de \"Tik
+ weer te geven\" functie of kopiëren naar het klembord) om ze te sorteren bij \"Meest gebruikt\" of
+ \"Laatst gebruikt\".\n\nDit bericht zal niet meer worden getoond.Fout bij het laden van de coderingssleuten van de sleutelopslag. Alle vermeldingen die worden toegevoegd zullen verloren gaan.\n\nOm nog steeds andOTP te kunnen gebruiken kan je naar de Instellingen gaan en de Database codering omschakelen naar Wachtwoord / PIN.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.QR-code scannenImporteer QR code
diff --git a/app/src/main/res/values-nl/strings_settings.xml b/app/src/main/res/values-nl/strings_settings.xml
index 1bbe2da2..ed9fcd5f 100644
--- a/app/src/main/res/values-nl/strings_settings.xml
+++ b/app/src/main/res/values-nl/strings_settings.xml
@@ -6,36 +6,37 @@
GebruikersinterfaceReservekopie
- Tik om te tonen
+ Tik om weer te gevenTijdslimiet voor tik om te onthullenAuthenticatieWachtwoordPINDatabase encryptiePanieksignaal
- Vergrendelen na uitschakelen scherm
+ Vergrendelen na scherm uitschakelingVergrendelen wanneer in de achtergrondOpnieuw vergrendelen bij inactiviteit
- Opnieuw vergrendelen bij inactiviteit vertragen
+ Vertraag vergrendeling bij inactiviteitBlokkeer toegankelijkheidsdiensten
+ Automatisch aanvullen blokkerenTaalThemaKaart lay-outLettergrootte vermeldingenScroll vermeldingen
- Single-tap
- Double-tap
+ Enkele tik
+ Dubbel tikMiniatuurgrootteVerdeel Token met spatieGedrag tag selecterenNa OTP kopiëren app minimaliserenZoekgedragVerlopen tokens markeren
- Hide global timeout bar
- Show individual timeouts
+ Tijdslimiet balk verbergen
+ Individuele tijdslimiet weergevenDatum toevoegen aan bestandsnaamVraag naar de bestandsnaam
- Reservekopie map
+ Standaard reservekopie locatieWachtwoord reservekopieAutomatisch back-up bij nieuwe itemsReservekopieën op afstand
@@ -48,32 +49,40 @@
Android synchronisatie inschakelenSleutelopslag leegmaken
- De OTP tokens standaard verbergen en maak ze handmatig zichtbaar
+ De OTP tokens standaard verbergen en handmatig weergevenSelecteer de tijd (in seconden) waarna de vermeldingen weer verborgen worden
- Beslis wat er gebeurt wanneer er een panieksignaal wordt ontvangen
- Verificatie verplichten als het scherm is vergrendeld
- Authenticatie vereist nadat de app naar de achtergrond
- ging (bijvoorbeeld door op de thuisknop te klikken)
- Authenticatie vereist nadat het apparaat
+ Beslis wat er gebeurt bij een panieksignaal
+ Verificatie vereist nadat het scherm
+ is uitgeschakeld
+ Verificatie vereist nadat de app naar de achtergrond
+ ging (bijv. door op de thuisknop te klikken)
+ Verificatie vereist nadat het apparaat
inactief is geweest
- Selecteer de tijd (in sec) waarna
- opnieuw verifiëren is vereist
+ Selecteer de vergrendelingstijd (in sec)Gevoelige velden verbergen van de toegankelijkheid
diensten. NIET inschakelen wanneer je afhankelijk bent van toegankelijkheidsdiensten!
+ Automatische aanvullen blokkeren om toegang te krijgen tot wachtwoorden
+ velden in de app
+ Deze functie vereist een Android versie
+ boven 8.0 (Oreo)Vermeldingen horizontaal scrollen in plaats van ze af te kortenNadat je de OTP naar het klembord kopieert wordt de app geminimaliseerd
- Specify which values should be included when searching
+ Specificeer welke waarden moeten gebruikt tijdens het zoekenMarkeert token in rood als deze over 8 seconden verloopt
- Hide the global timeout bar shown at the top of the screen
- Show an individual timeout bar for every entry.
- This can slow down the app, only enable if really necessary.
+ Tijdslimiet balk aan de bovenkant verbergen
+ Toon een individuele tiidsbalk voor elke toegang.
+ Dit vertraagd de app, alleen inschakelen als het echt nodig is.Voeg de huidige datum en tijd toe aan de voorgestelde back-up bestandsnaamVraag naar de bestandsnaam elke keer als een reservekopie is gemaakt of wordt teruggezet
+ Reservekopie locatie kiezen
+ Reservekopie locatie is gekozenStel het wachtwoord in dat wordt gebruikt voor het versleutelen van de reservekopieënMaakt een nieuwe gecodeerde back-up wanneer nieuwe
items zijn toegevoegd, gewijzigd of volgens de instellingen
+ Een reservekopie locatie instellen en een
+ wachtwoord inschakelen voor deze optieSelecteer welke soorten reservekopieën op afstand gemaakt kunnen worden
- Mail adres van de OpenPGP sleutel gebruikt voor het coderen van
+ E-mailadres van de OpenPGP sleutel gebruikt voor het coderen van
de reservekopieënGecodeerde reservekopieën worden alleen geïmporteerd als ze zijn ondertekend met een geldige sleutelDeselecteer om speciale functies weer uit te schakelen
@@ -82,13 +91,14 @@
Verwijderen de encryptiesleutel uit de sleutelopslagDeze functie vereist een beveiligd vergrendelingsscherm (Instellingen -> Beveiliging -> Schermvergrendeling)
- Een leeg wachtwoord is niet toegestaan, stel de verificatie in op \"Geen\" om het uit te schakelen!
+ Een leeg wachtwoord is niet toegestaan, stel de
+ verificatie in op \"Geen\" om het uit te schakelen!Bezig met de database encryptie te proberen wijzigen, even geduld aub!Wijzigen van de database encryptie is geslaagd!Mislukt om de database versleuteling te veranderen en in oorspronkelijke staat terug te vallen!Het maken van een interne reservekopie mislukte, afbreken!Het ophalen van de encryptiesleutel mislukte, afbreken!
- Authenticatie mislukt!
+ Verificatie mislukt!Het bijwerken van je wachtwoord / PIN naar de nieuwe codering mislukte, herstel het handmatig bij de instellingen!WaarschuwingFout
@@ -127,10 +137,10 @@ Doordat de Database encryptie is ingesteld op Android sleutelopslagVolledig
- Nothing
- Reveal/Hide
- Copy
- Copy and go to background
+ Niets
+ Weergeven/Verbergen
+ Kopie
+ Kopieer en ga naar achtergrondEtiket
diff --git a/app/src/main/res/values-pl/strings_auth.xml b/app/src/main/res/values-pl/strings_auth.xml
index 5a9ad575..9573e63f 100644
--- a/app/src/main/res/values-pl/strings_auth.xml
+++ b/app/src/main/res/values-pl/strings_auth.xml
@@ -6,7 +6,8 @@
Kod PINUwierzytelnij się, aby uruchomić andOTP.
- Potwierdź swoją tożsamość, aby wygenerować nowy klucz szyfrujący.
+ Potwierdź uwierzytelnienie, aby wygenerować
+ klucz szyfrujący!Odblokuj
diff --git a/app/src/main/res/values-pl/strings_backup.xml b/app/src/main/res/values-pl/strings_backup.xml
index 9c145ce7..09449f8b 100644
--- a/app/src/main/res/values-pl/strings_backup.xml
+++ b/app/src/main/res/values-pl/strings_backup.xml
@@ -36,15 +36,15 @@
Uprawnienia zapisu nie przyznane, proszę
nadaj uprawnienia przed rozpoczęciem tworzenia kopiiSzyfrowanie przy pomocy hasła / kodu PIN nie jest obsługiwane przy wywoływaniu kopii zapasowej przez broadcast
- Nowa metoda szyfrowania
- Poczynając od wersji 0.6.3 andOTP do tworzenia kopii zapasowych chronionych hasłem używana jest nowa i ulepszona metoda szyfrowania. Stare kopie zapasowe nadal mogą być zaimportowane, ale wysoce zalecanym jest, aby tworzyć nowe kopie zapasowe z ulepszonym szyfrowaniem.\n\nTa wiadomość nie zostanie wyświetlona ponownie.Tworzenie automatycznej kopii zapasowej nie powiodło sięAutomatyczna kopia zapasowa wykonana pomyślnieTe powiadomienia są wyświetlane, gdy automatyczne wykonywanie kopii zapasowej nie powiedzie się z jakiegoś powoduTe powiadomienia są wyświetlane, gdy automatyczne wykonywanie kopii zapasowej powiedzie się
- Nie udało się utworzyć katalogu kopii zapasowej
+ Ustaw domyślną lokalizację kopii zapasowej w ustawieniach!
+ Nie udało się uzyskać dostępu do lokalizacji kopii zapasowej!
+ Nie udało się utworzyć pliku kopii zapasowej!Pomyślnie zapisano w pamięci zewnętrznejZapis w pamięci zewnętrznej nie powiódł sięPomyślnie wczytano z pamięci zewnętrznej
@@ -52,7 +52,6 @@
Odszyfrowywanie kopii zapasowej nie powiodło sięWe wczytywanych danych nie znaleziono żadnych kontPamięć zewnętrzna jest aktualnie niedostępna
- Brak uprawnień dostępu do pamięciBłąd OpenPGP: %sNie znaleziono zweryfikowanej sygnaturyNie ustawiono hasła, sprawdź Ustawienia
diff --git a/app/src/main/res/values-pl/strings_main.xml b/app/src/main/res/values-pl/strings_main.xml
index 03820e7e..24d1f943 100644
--- a/app/src/main/res/values-pl/strings_main.xml
+++ b/app/src/main/res/values-pl/strings_main.xml
@@ -45,6 +45,13 @@
Zmień obrazUsuńPokaż kod QR
+
+ Więcej opcji
+ Więcej opcji %1$s
+ Skopiuj token
+ Skopiuj token %1$s
+ Dodaj nowe konto
+ Zamknij menuUwierzytelnianie nie powiodło się, proszę spróbować ponownieUwierzytelnianie nie powiodło się, zamykanie andOTP
@@ -71,7 +78,6 @@
Użycie tokenówBłąd KeyStoreKod QR
- Informacja o wycofaniuWprowadź hasłoWprowadź hasłoPotwierdź hasło
@@ -81,11 +87,6 @@
\"Kliknij, aby odkryć\" lub kopiując do schowka), aby móc je posortować według \"Najczęściej
używanych\" lub \"Ostatnio używanych\".\n\nTa wiadomość nie będzie ponownie wyświetlana.
Nie udało się wczytać klucza szyfrowania z KeyStore. Wszystkie nowo dodane konta zostaną utracone.\n\nAby móc dalej korzystać z andOTP, należy przejść do Ustawień i zmienić opcję Szyfrowanie bazy danych na Hasło / kod PIN.
- To będzie ostatnia wersja andOTP
- obsługująca Androida w wersji poniżej 5.1 (Lollipop). Zwiększony wysiłek wymagany do
- utrzymania oddzielnej implementacji pamięci masowej tylko dla starszych wersji, a także ich
- niski udział w rynku sprawiają, że dalsze wsparcie jest niemożliwe dla naszego małego
- zespołu.\n\nTa wiadomość nie będzie ponownie wyświetlana.Skanuj kod QRImportuj kod QR
diff --git a/app/src/main/res/values-pl/strings_settings.xml b/app/src/main/res/values-pl/strings_settings.xml
index b512f32a..1728385f 100644
--- a/app/src/main/res/values-pl/strings_settings.xml
+++ b/app/src/main/res/values-pl/strings_settings.xml
@@ -18,6 +18,7 @@
Zablokuj przy braku aktywnościOpóźnienie blokowania przy braku aktywnościBlokuj usługi ułatwień dostępu
+ Zablokuj autowypełnianieJęzykMotywUkład karty
@@ -35,7 +36,7 @@
Pokaż indywidualne limity czasuDodaj datę do nazwy plikuPytaj o nazwę pliku
- Katalog kopii zapasowej
+ Domyślna lokalizacja kopii zapasowejHasło kopii zapasowejAutomatycznie twórz kopie zapasowe nowych wpisówBroadcast kopii zapasowej
@@ -59,7 +60,11 @@
Wybierz czas (w sekundach), po którym będzie
wymagane ponowne uwierzytelnienieUkryj pola wrażliwe w usługach ułatwień
- dostępu. NIE włączaj tego, jeśli polegasz na usługach ułatwień dostępui!
+ dostępu. NIE włączaj tego, jeśli polegasz na usługach ułatwień dostępu!
+ Zablokuj usługom autowypełniania dostęp do pól
+ hasła w aplikacji
+ Ta funkcja wymaga wersji Androida
+ wyższej niż 8.0 (Oreo)Przewijaj etykiety zamiast je ucinaćAplikacja zostanie zminimalizowana po skopiowaniu OTP do schowkaOkreśl, które wartości powinny zostać uwzględnione podczas wyszukiwania
@@ -69,9 +74,13 @@
Może to spowolnić działanie aplikacji, włącz to tylko w razie potrzeby.
Dodaj bieżącą datę i czas do proponowanej nazwy pliku kopii zapasowejPytaj o nazwę pliku za każdym razem, gdy kopia zapasowa jest tworzona lub przywracana
+ Wybierz domyślną lokalizację kopii zapasowej
+ Wybrano lokalizację kopii zapasowejUstaw hasło używane do szyfrowania kopiiTworzy nową zaszyfrowaną kopię zapasową po dodaniu
lub edycji nowych wpisów, jeśli spełnione są warunki ustawień
+ Ustaw domyślną lokalizację kopii zapasowej
+ i hasło kopii zapasowej, aby włączyć tę opcjęWybierz typy kopii zapasowych, które mogą być wywoływane przez aplikacje innych firm poprzez BroadcastAdres e-mail klucza OpenPGP używanego do szyfrowania kopii zapasowychSzyfrowane kopie mogą zostać zaimportowane tylko wtedy, gdy zostały podpisane Twoim kluczem
diff --git a/app/src/main/res/values-pt-rBR/strings_about.xml b/app/src/main/res/values-pt-rBR/strings_about.xml
index 236d8815..486cc1e8 100644
--- a/app/src/main/res/values-pt-rBR/strings_about.xml
+++ b/app/src/main/res/values-pt-rBR/strings_about.xml
@@ -11,7 +11,7 @@
Código-fonteVersãoFAQ
- Frequently asked questions
+ Perguntas frequentesDesenvolvedoresPrincipal desenvolvedor
@@ -33,7 +33,7 @@
4. Por favor, não use as miniaturas para qualquer finalidade, exceto para representar determinada marca ou serviço.Apoie o desenvolvimento
- Find out how you can support the development of andOTP
+ Descubra como você pode apoiar o desenvolvimento do andOTPRecursos especiaisTem certeza de que deseja habilitar os recursos especiais? A maioria deles são algoritmos OTP não padronizados que foram implementados a pedido de usuários. Eles não são oficialmente suportados e podem possuir certas limitações. Por favor, leia (e entenda) a página \"Special features\" na wiki do GitHub para saber mais sobre os recursos especiais.Os recursos especiais foram habilitados
diff --git a/app/src/main/res/values-pt-rBR/strings_auth.xml b/app/src/main/res/values-pt-rBR/strings_auth.xml
index 4aaccfdb..0bb981f8 100644
--- a/app/src/main/res/values-pt-rBR/strings_auth.xml
+++ b/app/src/main/res/values-pt-rBR/strings_auth.xml
@@ -6,8 +6,8 @@
PINPor favor, autentique-se para iniciar o aplicativo.
- Por favor confirme a sua senha para gerar uma
- nova chave de encriptação!
+ Por favor, confirme sua autenticação para gerar
+ sua chave de criptografia!Desbloquear
diff --git a/app/src/main/res/values-pt-rBR/strings_backup.xml b/app/src/main/res/values-pt-rBR/strings_backup.xml
index 5abc0ec5..d1d3322c 100644
--- a/app/src/main/res/values-pt-rBR/strings_backup.xml
+++ b/app/src/main/res/values-pt-rBR/strings_backup.xml
@@ -38,18 +38,15 @@ insira
A permissão de leitura não foi concedida. Por favor, conceda-a antes de iniciar um backupA permissão de escrita não foi concedida. Por favor, conceda-a antes de iniciar um backupA criptografia de senha ou PIN não pode ser usada com o backup de ativação remota
- Novo método de criptografia
- Desde a versão 0.6.3 do andOTP, um método novo e aprimorado
- de criptografia é usado para backups protegidos por senha. Os backups antigos ainda podem ser
- importados, mas é altamente recomendado criar novos backups com o método aprimorado de
- criptografia.\n\nEsta mensagem não será exibida novamente.Falha ao realizar o backup automáticoBackup automático concluídoEstas notificações são exibidas quando um backup automático falhou por algum motivoEstas notificações são exibidas quando um backup automático foi bem sucedido
- Não foi possível criar a pasta de backup
+ Por favor, defina um local padrão de backup nas configurações!
+ Falha ao acessar o local de backup!
+ Falha ao criar arquivo de backup!Exportação para o armazenamento externo realizada com sucessoErro ao exportar para o armazenamento externoImportação do armazenamento externo realizada com sucesso
@@ -57,9 +54,8 @@ insira
Falha ao desencriptar o arquivo de backupNenhuma conta foi encontrada nos dados importadosO armazenamento externo está inacessível no momento
- Permissão de armazenamento não concedidaErro do OpenPGP: %sNenhuma assinatura verificada foi detectadaA senha não foi definida. Verifique as Configurações
- Can\'t open file selection dialog!
+ Erro ao abrir diálogo de seleção de arquivo!
diff --git a/app/src/main/res/values-pt-rBR/strings_main.xml b/app/src/main/res/values-pt-rBR/strings_main.xml
index 1ebe4a3c..d7e86524 100644
--- a/app/src/main/res/values-pt-rBR/strings_main.xml
+++ b/app/src/main/res/values-pt-rBR/strings_main.xml
@@ -9,7 +9,7 @@
ConfiguraçõesTodos os marcadoresSem marcadores
- QR code from image
+ Código QR de uma imagem%d s
@@ -22,7 +22,7 @@
PeríodoDígitosContador
- Issuer
+ EmissorMarcadorAlgoritmoMarcadores
@@ -37,14 +37,21 @@
ConfiguraçõesOrdenar porDesordenado
- Issuer
+ EmissorMarcadorUsado pela última vez
- Most used
- Edit
+ Mais usados
+ EditarAlterar imagemRemover
- Show QR Code
+ Exibir código QR
+
+ Mais opções
+ Mais opções para %1$s
+ Copiar token
+ Copiar token %1$s
+ Adicionar nova conta
+ Fechar menuFalha na autenticação. Por favor, tente novamente.Falha na autenticação, fechando o aplicativo.
@@ -52,43 +59,37 @@
Esta conta já existeCódigo QR inválidoChave de criptografia não carregada
- Invalid intent-provided code
- Intent-provided code added
- Could not open the file
- Could not find/confirm QR code
- Checksum verification failed while decoding QR code
- Format error in QR code
- QR Code not supported
- Failed to generate QR Code
+ Código da aplicação inválido
+ Código da aplicação adicionado
+ Não foi possível abrir o arquivo
+ Não foi possível encontrar/confirmar o código QR
+ Falha na verificação de checksum ao decodificar código QR
+ Erro de formatação no código QR
+ Código QR não suportado
+ Falha ao gerar código QR
- Invalid secret
+ Código secreto inválidoAutenticarInserir detalhesRemoverRenomearContador
- Tokens usage
+ Uso de tokensErro de armazenamento de chaves
- QR Code
- Deprecation notice
+ Código QRDigite a senhaDigite a senhaConfirme a senhaPor favor, insira credenciais do dispositivo para iniciar andOTP.Você tem certeza que deseja remover a conta \"%1$s\"?
- andOTP will track when you use your tokens (using the \"Tap
- to reveal\" feature or copying to clipboard) to be able to sort them by \"Most used\" or
- \"Last used\".\n\nThis message will not be shown again.
+ andOTP vai rastrear seu uso dos tokens (usando a ferramenta
+ \"Toque para revelar\" ou copiando para a área de transferência) para conseguir
+ classificá-los por \"Mais usados\" ou \"Usados por último\".\n\nEssa mensagem não será exibida novamente.Falha ao carregar a chave de criptografia da KeyStore.
Quaisquer alterações adicionadas serão perdidas.\n\nPara continuar usando o andOTP, você precisa ir até as Configurações e alterar a Criptografia do Banco de Dados para Senha/PIN.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.Ler código QR
- Import QR code
+ Importar código QRInsira detalhes
diff --git a/app/src/main/res/values-pt-rBR/strings_settings.xml b/app/src/main/res/values-pt-rBR/strings_settings.xml
index 834ed7fc..b03083e6 100644
--- a/app/src/main/res/values-pt-rBR/strings_settings.xml
+++ b/app/src/main/res/values-pt-rBR/strings_settings.xml
@@ -14,30 +14,31 @@
Criptografia do banco de dadosBotão de pânicoBloquear ao desligar a tela
- Re-lock when going into the background
- Re-lock on inactivity
- Delay for inactivity re-lock
- Block accessibility services
+ Re-bloquear quando entrar em segundo plano
+ Re-bloquear com inatividade
+ Tempo de inatividade para bloqueio
+ Bloquear serviços de acessibilidade
+ Bloquear preenchimento automáticoIdiomaTema
- Card layout
+ Layout do cartãoTamanho de fonte do rótuloRolagem de rótulos
- Single-tap
- Double-tap
+ Toque único
+ Toque duploTamanho da miniaturaDividir token com espaçoComportamento de seleção de marcador
- Minimize app after copying OTP
- Search behavior
- Highlight expiring tokens
- Hide global timeout bar
- Show individual timeouts
+ Minimizar aplicativo após cópia do token
+ Comportamento da busca
+ Destacar tokens próximos a expirar
+ Ocultar barra de tempo limite global
+ Exibir tempos limites individuaisInserir data ao nome do arquivoPedir o nome do arquivo
- Diretório de backup
+ Local padrão de backupDefina a senha do backup
- Automatically backup on new entries
+ Backup automático para novas entradasBackup de ativação remotaProvedor OpenPGPChave de criptografia OpenPGP
@@ -53,26 +54,34 @@
Decidir o que acontece quando um botão do pânico é acionadoExigir autenticação após a tela do dispositivo
ter desligado
- Require authentication after the app was sent to
- the background (e.g. by pressing the home button)
- Require authentication after the device has been
- inactive
- Select the time (in sec) after which to
- require reauthentication
- Hide sensitive fields from the accessibility
- services. DO NOT enable this if you rely on the accessibility services!
+ Exige autenticação após o aplicativo ser enviado para
+ segundo plano (por exemplo, se pressionando o botão de início)
+ Exige autenticação após o dispositivo ficar
+ inativo
+ Selecione o tempo (em segundos) para
+ exigir reautenticação
+ Oculta campos sensíveis dos serviços de
+ accessibilidade. NÃO habilite isso se você depende dos serviços de acessibilidade!
+ Bloquear acesso de serviços de autopreenchimento aos
+ campos de senha dentro do aplicativo
+ Este recurso exige uma versão Android
+ acima da 8.0 (Oreo)Rolagem de rótulos longos em vez de truncá-los
- App will be minimized when you copy the OTP to clipboard
- Specify which values should be included when searching
- Highlights token in red if it\'s expiring in 8 seconds
- Hide the global timeout bar shown at the top of the screen
- Show an individual timeout bar for every entry.
- This can slow down the app, only enable if really necessary.
+ O aplicativo será minimizado quando você copiar o OTP para a área de transferência
+ Especificar quais valores devem ser incluídos ao pesquisar
+ Destaca o token em vermelho se estiver expirando em 8 segundos
+ Ocultar barra de tempo limite global exibida no topo da tela
+ Exibe uma barra de tempo limite individual para cada entrada.
+ Isso pode lentificar o aplicativo, habilite apenas se realmente necessário.Inserir a data e hora atuais ao nome de backup sugeridoPedir o nome de arquivo sempre que um backup for criado ou restaurado
+ Escolha um local padrão de backup
+ O local de backup foi escolhidoDefinir a senha usada para criptografar os backups
- Creates a new encrypted backup when new
- entries are added, or edited, if settings conditions are met
+ Cria um novo backup criptografado quando novas
+ entradas são adicionadas ou editadas, se as condições das configurações forem atendidas
+ Defina um local padrão de backup e uma senha de backup
+ para habilitar esta opçãoSelecionar quais tipos de backup podem ser acionados por aplicativos de terceiros usando ativação remotaEndereço de e-mail da chave OpenPGP usada para criptografar
os backups
@@ -139,25 +148,25 @@
Redefinir configurações do aplicativo
- Compact
- Default
- Full
+ Compacto
+ Padrão
+ Cheio
- Nothing
- Reveal/Hide
- Copy
- Copy and go to background
+ Nada
+ Exibir/Esconder
+ Copiar
+ Copiar e entrar em segundo plano
- Label
- Issuer
- Tags
+ Rótulo
+ Emissor
+ Marcadores
- Off
- New Entries
- Any Edits
+ Desligado
+ Novas Entradas
+ Quaisquer modificaçõesTema claro
@@ -166,11 +175,11 @@
Oculto
- Tiny
- Small
- Default
- Medium
- Large
+ Muito pequeno
+ Pequeno
+ Padrão
+ Médio
+ GrandeNão dividir
diff --git a/app/src/main/res/values-ru/strings_auth.xml b/app/src/main/res/values-ru/strings_auth.xml
index fb13d1bb..980c8a91 100644
--- a/app/src/main/res/values-ru/strings_auth.xml
+++ b/app/src/main/res/values-ru/strings_auth.xml
@@ -6,7 +6,8 @@
PIN-кодПожалуйста, пройдите аутентификацию для запуска andOTP!
- Пожалуйста, подтвердите Вашу аутентификацию для генерации нового ключа шифрования!
+ Подтвердите аутентификацию,
+ чтобы сгенерировать ключ шифрования!Разблокировать
diff --git a/app/src/main/res/values-ru/strings_backup.xml b/app/src/main/res/values-ru/strings_backup.xml
index 2bd4cbe3..b1033afe 100644
--- a/app/src/main/res/values-ru/strings_backup.xml
+++ b/app/src/main/res/values-ru/strings_backup.xml
@@ -47,11 +47,6 @@
сделайте это перед началом резервного копирования
Пароль/PIN-код на основе шифрования не
поддерживается со сторонними приложениями для создания резервных копий
- Новый метод шифрования
- Начиная с версии andOTP 0.6.3 <b>используется новый
- и улучшенный метод</b> шифрования для защищенных паролем резервных копий. Старые резервные копии могут быть
- импортированы, однако настоятельно рекомендуется создать новые резервные копии с улучшенным
- шифрованием</b>.\n\nЭто сообщение не будет показано снова.Автоматическое резервное копирование не удалосьАвтоматическое резервное копирование успешно завершено
@@ -60,7 +55,9 @@
Эти уведомления отображаются
при успешном автоматическом резервном копировании
- Не удалось создать каталог для резервной копии
+ Пожалуйста, установите в настройках место по умолчанию для резервного копирования!
+ Не удалось получить доступ к месту резервного копирования!
+ Не удалось создать резервную копию!Экспорт на внешний носитель выполнен успешноЭкспорт на внешний носитель выполнить не удалосьИмпорт из внешнего носителя выполнен успешно
@@ -68,7 +65,6 @@
Ошибка расшифровки резервной копииНет записей в импортированных данныхВнешний носитель в настоящее время недоступен
- Необходимо разрешение на доступ к памяти устройстваОшибка OpenPGP: %sОбнаружена недействительная подписьПароль не установлен, проверьте Настройки
diff --git a/app/src/main/res/values-ru/strings_main.xml b/app/src/main/res/values-ru/strings_main.xml
index f9f1f2d0..6f4575de 100644
--- a/app/src/main/res/values-ru/strings_main.xml
+++ b/app/src/main/res/values-ru/strings_main.xml
@@ -45,6 +45,13 @@
Изменить изображениеУбратьПоказать QR-код
+
+ Дополнительные параметры
+ Дополнительные параметры для %1$s
+ Копировать токен
+ Копировать %1$s токен
+ Добавить новый аккаунт
+ Закрыть менюОшибка аутентификации! Пожалуйста, попробуйте снова!Ошибка аутентификации, andOTP закрывается!
@@ -71,7 +78,6 @@
Использование токеновОшибка хранилища ключейQR-код
- Уведомление об устареванииВведите парольВведите парольПодтвердите пароль
@@ -83,11 +89,6 @@
Не удалось загрузить ключ шифрования из хранилища ключей.
Все добавленные записи будут утеряны.\n\nЧтобы по-прежнему иметь возможность использовать andOTP,
Вы можете перейти в Настройки и сменить шифрование базы данных на пароль / PIN-код.
- Это последняя версия andOTP с
- поддержкой Android ниже 5.1 (Lollipop). Увеличение усилий, необходимых для поддержки,
- отдельная реализация хранилища для этих старых версий, а также уменьшающееся количество
- таких устройств, делают постоянную поддержку невозможной для нашей небольшой команды.\n\n
- Это сообщение не будет показано снова.Сканировать QR-кодИмпортировать QR код
diff --git a/app/src/main/res/values-ru/strings_settings.xml b/app/src/main/res/values-ru/strings_settings.xml
index a4731247..e8380109 100644
--- a/app/src/main/res/values-ru/strings_settings.xml
+++ b/app/src/main/res/values-ru/strings_settings.xml
@@ -18,6 +18,7 @@
Блокировать при бездействииЗадержка для блокировки при бездействииБлокировать службы специальных возможностей
+ Запретить автозаполнениеЯзыкТема оформленияКарточки
@@ -35,7 +36,7 @@
Показать индивидуальные таймаутыДобавить дату к имени файлаСпрашивать об имени файла
- Каталог резервной копии
+ Место по умолчанию для резервного копированияПароль для резервной копииАвтоматическое резервирование при добавлении новых записейРезервная копия с помощью стороннего приложения
@@ -57,6 +58,10 @@
Требовать аутентификацию после отсутствия активности устройстваВыберите время (в секундах), после которого требовать аутентификациюСкрыть конфиденциальные поля от служб специальных возможностей. НЕ ВКЛЮЧАЙТЕ эту настройку если вы используете службы специальных возможностей!
+ Запретить службам автозаполнения доступ к полям
+ пароля внутри приложения
+ Эта функция требует Android версии
+ выше 8.0 (Оreo)Прокрутка слишком длинных ярлыков вместо их усеченияПриложение будет свёрнуто после копирования токенаУкажите, какие значения должны использоваться при поиске
@@ -67,8 +72,12 @@
Добавить текущую дату и время к предлагаемому
названию резервной копииСпрашивать об имени файла при создании резервной копии или восстановлении
+ Выберите место по умолчанию для резервного копирования
+ Место по умолчанию для резервного копирования было выбраноУстановить пароль для шифрования резервных копийСоздаёт новую зашифрованную резервную копию при добавлении или изменении записей если условия были выполнены
+ Установите место по умолчанию для резервного копирования
+ и пароль для резервной копии, чтобы включить эту опциюВыберите, какие типы резервных копий могут быть сохранены
сторонними приложениями для создания резервных копийПочтовый адрес OpenPGP ключа, используемого
diff --git a/app/src/main/res/values-sl/strings_auth.xml b/app/src/main/res/values-sl/strings_auth.xml
index a464ff09..5f485117 100644
--- a/app/src/main/res/values-sl/strings_auth.xml
+++ b/app/src/main/res/values-sl/strings_auth.xml
@@ -6,8 +6,8 @@
PINProsim preverite svojo identiteto, da lahko začnete uporabljati andOTP!
- Potrdite metodo preverjanja pristnosti, da ustvarite
- nov šifrirni ključ!
+ Please confirm authentication to generate your
+ encryption key!Odkleni
diff --git a/app/src/main/res/values-sl/strings_backup.xml b/app/src/main/res/values-sl/strings_backup.xml
index 6bc0a5f5..60ee4a28 100644
--- a/app/src/main/res/values-sl/strings_backup.xml
+++ b/app/src/main/res/values-sl/strings_backup.xml
@@ -50,10 +50,6 @@
jih odobrite pred varnostnim kopiranjemKodiranje s pomočjo gesla/PIN ni
podprto pri varnostnem kopiranju preko zunanjih aplikacij
- Nova enkripcijska metoda
- Od andOTP verzije 0.6.3 naprej, obstaja nova in izboljšana
- enkripcijska metoda za varnostne kopije zaščitene z geslom. Prejšnje verzije varnostnih kopij, so še vedno lahko uvožene, ampak je zelo priporočeno, da ustvarite nove varnostne kopije z izboljšano
- enkripcijo.\n\n To sporočilo ne bo več prikazano.Samodejno varnostno kopiranje ni uspeloSamodejna izdelava varnostne kopije je bila uspešna
@@ -62,7 +58,9 @@
Ta obvestila so prikazana, ko
je samodejno varnostno kopiranje uspelo
- Ni bilo mogoče ustvariti mape z varnostnimi kopijami
+ Please set a default backup location in the settings!
+ Failed to access backup location!
+ Failed to create backup file!Izvoz v zunanjo shrambo je bil uspešenIzvoz v zunanjo shrambo ni bil uspešenUvoz iz zunanje shrambe je bil uspešen
@@ -70,7 +68,6 @@
Dekodiranje varnostne kopije ni uspeloV uvoženi datoteki ni bilo najdenih uporabniških računovZunanja shramba trenutno ni dostopna
- Dovoljenja za shranjevanje niso bila dodeljenaOpenPGP napaka: %sOverjenih podpisov ni bilo mogoče najtiGeslo ni bilo nastavljeno, preverite Nastavitve
diff --git a/app/src/main/res/values-sl/strings_main.xml b/app/src/main/res/values-sl/strings_main.xml
index dd58f52f..904b3ced 100644
--- a/app/src/main/res/values-sl/strings_main.xml
+++ b/app/src/main/res/values-sl/strings_main.xml
@@ -45,6 +45,13 @@
Spremeni podoboOdstraniShow QR Code
+
+ More options
+ More options for %1$s
+ Copy token
+ Copy %1$s token
+ Add new account
+ Close menuPrišlo je do napake pri preverjanju vaše identitete. Prosimo, poskusite ponovno!Preverjanje pristnosti ni uspelo, andOTP se zapira!
@@ -71,7 +78,6 @@
Tokens usageKeyStore napakaQR Code
- Deprecation noticeVnesite gesloVnesite gesloPotrdite geslo
@@ -83,11 +89,6 @@
Napaka pri nalaganju šifrirnega ključa iz KeyStore.
Vsi vnosi, ki bodo dodani, bodo izgubljeni.\n\nZa nadaljnjo uporabo andOTP lahko greste
pod Nastavitve in spremenite Šifriranje zbirke podatkov v Geslo / PIN.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.Skeniraj QR kodoImport QR code
diff --git a/app/src/main/res/values-sl/strings_settings.xml b/app/src/main/res/values-sl/strings_settings.xml
index 1e381d53..818bc9d2 100644
--- a/app/src/main/res/values-sl/strings_settings.xml
+++ b/app/src/main/res/values-sl/strings_settings.xml
@@ -18,6 +18,7 @@
Re-lock on inactivityDelay for inactivity re-lockBlock accessibility services
+ Block autofillJezikTemaCard layout
@@ -35,7 +36,7 @@
Show individual timeoutsPripni datum imenu datotekeVprašaj za ime datoteke
- Mapa varnostnega kopiranja
+ Default backup locationVarnostno gesloAutomatically backup on new entriesVarnostno kopiranje preko zunanjih naprav
@@ -63,6 +64,10 @@
require reauthentication
Hide sensitive fields from the accessibility
services. DO NOT enable this if you rely on the accessibility services!
+ Block autofill services from accessing password
+ fields inside the app
+ This feature requires an Android version
+ above 8.0 (Oreo)Premakni predolge oznake namesto njihovega odrezanja z zaslonaApp will be minimized when you copy the OTP to clipboardSpecify which values should be included when searching
@@ -74,10 +79,14 @@
imena varnostne kopije
Vprašaj po imenu varnostne kopije ob vsakem ustvarjanju
ali obnavljanju
+ Choose a default backup location
+ Backup location has been chosenNastavi geslo, ki bo uporabljeno za kodiranje
varnostnih kopijCreates a new encrypted backup when new
entries are added, or edited, if settings conditions are met
+ Set a default backup location and a
+ backup password to enable this optionIzberite katera varnostna kopiranja so lahko sprožena
preko tretjih aplikacijPoštni naslov OpenPGP ključa je uporabljen za kodiranje
diff --git a/app/src/main/res/values-sv/strings_auth.xml b/app/src/main/res/values-sv/strings_auth.xml
index 90120bd1..4c7a210e 100644
--- a/app/src/main/res/values-sv/strings_auth.xml
+++ b/app/src/main/res/values-sv/strings_auth.xml
@@ -6,8 +6,8 @@
PIN-kodVänligen verifiera för att starta andOTP!
- Vänligen bekräfta din autentisering för att generera
- ny krypteringsnyckel!
+ Bekräfta autentisering för att generera din
+ krypteringsnyckel!Lås upp
diff --git a/app/src/main/res/values-sv/strings_backup.xml b/app/src/main/res/values-sv/strings_backup.xml
index 957c5ca5..baf46d82 100644
--- a/app/src/main/res/values-sv/strings_backup.xml
+++ b/app/src/main/res/values-sv/strings_backup.xml
@@ -50,11 +50,6 @@
detta innan du försöker säkerhetskopieraLösenord/PIN-baserad kryptering stöds
inte med broadcast-säkerhetskopiering
- Ny krypteringsmetod
- Sedan version 0.6.3 av andOTP, används ny och förbättrad
- krypteringsmethod för lösenordsskyddade säkerhetskopior. Gamla säkerhetskopior kan
- fortfarande importeras, men det rekommenderas starkt att skapa nya säkerhetskopior med
- den förbättrade krypteringen.\n\nDetta meddelande kommer inte att visas igen.Automatisk säkerhetskopiering misslyckadesAutomatisk säkerhetskopiering lyckades
@@ -63,7 +58,9 @@
Dessa meddelanden visas när en
automatisk säkerhetskopiering lyckades
- Det gick inte att skapa säkerhetskopieringsmapp
+ Ange en standardplats för säkerhetskopiering i inställningarna!
+ Det gick inte att komma åt säkerhetskopieringsplats!
+ Det gick inte att skapa backupfil!Exportera till extern lagring lyckadesExportera till extern lagring misslyckadesImportera från extern lagring lyckades
@@ -71,7 +68,6 @@
Dekryptering av säkerhetskopian misslyckadesInga poster hittades i importerade dataExtern lagring är för närvarande inte tillgänglig
- Lagringsbehörigheter har inte beviljatsOpenPGP-fel: %sIngen verifierad signatur detekteradLösenordet är inte inställt, kontrollera Inställningar
diff --git a/app/src/main/res/values-sv/strings_main.xml b/app/src/main/res/values-sv/strings_main.xml
index 8dbf40f6..79e5403f 100644
--- a/app/src/main/res/values-sv/strings_main.xml
+++ b/app/src/main/res/values-sv/strings_main.xml
@@ -45,6 +45,13 @@
Ändra bildTa bortVisa QR-kod
+
+ Fler alternativ
+ Fler alternativ för %1$s
+ Kopiera token
+ Kopiera %1$s token
+ Lägg till nytt konto
+ Stäng menynAutentisering misslyckades, vänligen försök igen!Autentisering misslyckades, stänger andOTP!
@@ -71,7 +78,6 @@
Tokens användningKeyStore-felQR-kod
- AvskrivningsnotisAnge lösenordAnge lösenordBekräfta lösenord
@@ -83,11 +89,6 @@
Det gick inte att läsa in krypteringsnyckeln från KeyStore.
Alla poster som läggs till kommer att gå förlorade.\n\nFör att fortfarande kunna använda andOTP kan du gå
till Inställningar och byta Databas-kryptering till Lösenord / PIN-kod.
- Detta är den senaste versionen av andOTP som
- stöder Android versionen under 5.1 (Lollipop). Den ökande insatsen som krävs för att underhålla
- separata lagringsimplementationer för äldre versioner samt deras låga marknadsandelar
- gör fortsatt support infeasible för vår lilla team.\n\nDetta meddelande kommer inte
- visas igen.Skanna QR-kodImportera QR kod
diff --git a/app/src/main/res/values-sv/strings_settings.xml b/app/src/main/res/values-sv/strings_settings.xml
index e13d7a27..fa4cac25 100644
--- a/app/src/main/res/values-sv/strings_settings.xml
+++ b/app/src/main/res/values-sv/strings_settings.xml
@@ -18,6 +18,7 @@
Lås vid inaktivitetFördröjning vid låsning pga inaktivitetBlockera tillgänglighetstjänster
+ Blockera autofyllSpråkTemaKortlayout
@@ -35,7 +36,7 @@
Visa individuella tidsgränserLägg till datum till filnamnFråga efter filnamn
- Säkerhetskopieringsmapp
+ Standard plats för säkerhetskopieringSäkerhetskopieringslösenordSäkerhetskopiera automatiskt nya posterSäkerhetskopierings-Broadcasts
@@ -63,6 +64,10 @@
återautentisering krävs
Dölj känsliga fält från tillgänglighetstjänsterna.
Aktivera INTE detta om du förlitar dig på tillgänglighetstjänster!
+ Blockera autofyll tjänster från att komma åt lösenord
+ fält i appen
+ Denna funktion kräver en Android-version
+ över 8.0 (Oreo)Bläddra bland överlånga etiketter istället för att trunkera demAppen kommer att minimeras när du kopierar OTPAnge vilka värden som ska inkluderas vid sökning
@@ -74,10 +79,14 @@
säkerhetskopieringsfilnamnet
Fråga efter filnamnet varje gång en säkerhetskopia skapas eller
återställs
+ Välj en standardplats för säkerhetskopiering
+ Platsen för säkerhetskopiering har valtsAnge lösenordet som används för att kryptera
säkerhetskopiorSkapar en ny krypterad säkerhetskopia när nya
-poster läggs till, eller redigeras, om inställningsvillkoren är uppfyllda
+ Ange en standardplats för säkerhetskopiering och ett
+ lösenord för att aktivera detta alternativVälj vilka säkerhetskopieringstyper som kan utlösas av
Appar från tredje part som använder BroadcastsPostadress OpenPGP-nyckel används för att kryptera
diff --git a/app/src/main/res/values-tr/strings_backup.xml b/app/src/main/res/values-tr/strings_backup.xml
index 39229029..b6f9c26e 100644
--- a/app/src/main/res/values-tr/strings_backup.xml
+++ b/app/src/main/res/values-tr/strings_backup.xml
@@ -48,8 +48,6 @@ lütfen bu iznin tanımlanmış olduğundan emin olun
lütfen bu iznin tanımlanmış olduğundan emin olun
Parola/PIN tabanlı şifreleme, broadcast yedekleme
ile desteklenmemektedir
- Yeni şifreleme metodu
- andOTP 0.6.3\'ten beri şifre ile korunmuş yedekler için daha yeni bir şifreleme metodu kullanılmakta. Eski yedekleri halen içeri aktarabilirsiniz, lakin yeni şifreleme metodu ile yeni bir yedek oluşturup onu saklamanızı şiddetle öneririz.\n\nBu mesaj bir daha gözükmeyecek.Otomatik yedekleme başarısızOtomatik yedekleme başarılı
@@ -58,7 +56,9 @@ başarısız olursa gözükmekte
Bu bildirimler otomatik yedekleme başarılı
olursa gözükmekte
- Yedekleme dizini oluşturulamadı
+ Lütfen ayarlardan varsayılan yedekleme konumunu belirleyin!
+ Yedekleme konumuna erişilemedi!
+ Yedek dosyası oluşturulamadı!Harici depoya aktarım başarılıHarici depoya aktarım başarısızHarici depodan aktarım başarılı
@@ -66,7 +66,6 @@ olursa gözükmekte
Yedeğin şifre çözülmesi başarısız olduİçe aktarılan veride girdi bulunamadıHarici depolama şu anda erişilemez durumda
- Depolama izni verilmediOpenPGP Hatası: %sDoğrulanmış imza tespit edilemediŞifre tanımlanmamış, Ayarlar\'ı kontrol edin
diff --git a/app/src/main/res/values-tr/strings_main.xml b/app/src/main/res/values-tr/strings_main.xml
index 1f1146b6..d341aa04 100644
--- a/app/src/main/res/values-tr/strings_main.xml
+++ b/app/src/main/res/values-tr/strings_main.xml
@@ -45,6 +45,13 @@
Görseli değiştirKaldırQR Kodunu Göster
+
+ More options
+ More options for %1$s
+ Copy token
+ Copy %1$s token
+ Add new account
+ Close menuKimlik doğrulama başarısız oldu, lütfen tekrar deneyin!Kimlik doğrulama başarısız oldu, andOTP kapatılıyor!
@@ -71,7 +78,6 @@
Token kod kullanımıKeyStore hatasıQR Kodu
- Destek sonlandırma bildirimiŞifre girinŞifre GirinŞifreyi doğrula
@@ -83,10 +89,6 @@
Şifreleme anahtarı KeyStore\'dan yüklenemedi.
Eklenen girdiler kaybolacak.\n\nandOTP\'yi kullanmaya devam edebilmek için
Ayarlar\'a gidip Veritabanı şifrelemesini Şifre / PIN\'e çevirin.
- Bu sürüm Android 5.1 (Lollipop) destekleyen son sürümdür.
- Bu kullanıımı düşük olan eski sürüme geriye dönük destek sağlamak ve ayrı bir depolama
- alanı özelliği kodlayıp yönetmek ufak olan ekibe olağanüstü bir iş yükü çıkartmaktadır.\n\n
- Bu mesaj bir daha gösterilmeyecektir.QR Kodu TaraQR kodunu içe aktar
diff --git a/app/src/main/res/values-tr/strings_settings.xml b/app/src/main/res/values-tr/strings_settings.xml
index d9f9ba60..303283d7 100644
--- a/app/src/main/res/values-tr/strings_settings.xml
+++ b/app/src/main/res/values-tr/strings_settings.xml
@@ -18,6 +18,7 @@
Hareketsizlik durumunda yeniden kilitleHareketsizlik yeniden kilitlemesi için gecikme süresiErişilebilirlik hizmetlerini engelle
+ Otomatik tamamlayıcı programları engellemeDilTemaKart düzeni
@@ -35,7 +36,7 @@
Her bir kod için kalan süre barı gösterDosya adına tarihi eklemeDosya adı için sor
- Yedekleme dizini
+ Varsayılan yedekleme konumuYedekleme şifresiYeni girişlerde otomatik yedekleYedek Yayınları (Broadcast)
@@ -61,6 +62,9 @@
süreyi (saniye cinsinden) seçin
Hassas alanları erişilebilirlik hizmetlerinden gizleyin.
Erişilebilirlik hizmetlerine ihtiyacınız varsa bunu etkinleştirmeyin!
+ Otomatik doldurma (parola vb.) programlarının uygulama
+ içindeki parola alanlarına erişimini engeller
+ Bu özellik Android 8.0 (Oreo) veya üstünde desteklenmekteBüyük etiketleri kırpmak yerine kaydırınOTP\'yi panoya kopyaladığınızda uygulama minimize edilecekArama yaparken hangi değerlerin dahil edilmesi gerektiğini belirtin
@@ -71,9 +75,13 @@
Önerilen yedek adına mevcut tarih ve saati eklemeYedek yaratıldığında ya da
kurtarıldığında her zaman dosya adı sor
+ Varsayılan yedekleme konumu seçin
+ Yedekleme konumu seçildi Yedekleri şifrelemek için parola ayarlarınYeni girişler eklendiğinde veya düzenlendiğinde,
ayarlanan koşullar sağlanıyorsa yeni bir şifreli yedekleme oluşturur
+ Bu özelliği aktifleştirmek için varsayılan yedekleme
+ konumu ve yedekleme parolası tanımlamalısınızHangi yedekleme tiplerinin Broadcast kullanan 3. parti uygulamalar
ile yedeklenebileceğini seçinŞifrelemede kullanılacak OpenPGP anahtarının e-posta adresi
@@ -85,7 +93,7 @@ ile yedeklenebileceğini seçin
andOTP\'nin anahtar ve ayarları yedeklemek için Android\'in dahili yedekleme servisini kullanmasını etkinleştirirKeyStore\'dan iifreleme anahtarını silin
- Bu özelliğin
+ Bu özelliğin
kurulabilmesi için güvenli bir kilit ekranı gereklidir. (Ayarlar > Güvenlik > Ekran Kilidi)Boş bir şifreye izin verilmez, Kimlik Doğrulama özelliğini
devre dışı bırakmak için \"Hiçbiri\" olarak ayarlayın!
diff --git a/app/src/main/res/values-uk/strings_auth.xml b/app/src/main/res/values-uk/strings_auth.xml
index 85678bb9..0d967d57 100644
--- a/app/src/main/res/values-uk/strings_auth.xml
+++ b/app/src/main/res/values-uk/strings_auth.xml
@@ -6,7 +6,8 @@
PIN-кодБудь ласка, пройдіть автентифікацію, щоб запустити andOTP!
- Будь ласка, пройдіть підтвердження автентифікації, щоб згенерувати новий ключ шифрування!
+ Please confirm authentication to generate your
+ encryption key!Розблокувати
diff --git a/app/src/main/res/values-uk/strings_backup.xml b/app/src/main/res/values-uk/strings_backup.xml
index 88dda177..5781c7e9 100644
--- a/app/src/main/res/values-uk/strings_backup.xml
+++ b/app/src/main/res/values-uk/strings_backup.xml
@@ -41,18 +41,15 @@
Дозволу на читання не надано, будь ласка, надайте доступ на читання перед тим, як почнете створення резервної копіїДозволу на запис не надано, будь ласка, надайте доступ на запис перед тим, як почнете створення резервної копіїСтворення резервних копії на основі шифрування за допомогою паролю/PIN-коду не підтримується сторонніми додатками
- New encryption method
- Since version 0.6.3 of andOTP, a new and improved
- encryption method is used for password-protected backups. The old backups can still be
- imported, but it is highly recommended to create new backups with the improved
- encryption.\n\nThis message will not be shown again.Автоматичне резервне копіювання завершилося невдалоАвтоматичне резервне копіювання завершилося успішноЦі сповіщення відображаються тоді, коли автоматичне резервне копіювання завершилося невдалоЦі сповіщення відображаються тоді, коли автоматичне резервне копіювання завершилося вдало
- Створення папки для резервних копії завершилося невдало
+ Please set a default backup location in the settings!
+ Failed to access backup location!
+ Failed to create backup file!Експорт до зовнішнього сховища завершився вдалоЕкспорт до зовнішнього сховища завершився невдалоІмпорт з зовнішнього сховища завершився вдало
@@ -60,7 +57,6 @@
Розшифрування резервної копії завершилось невдалоЗаписів у імпортованих даних не знайденоЗовнішнє сховище наразі недоступне
- Дозволу на зберігання даних не було наданоПомилка OpenPGP: %sЗнайдено недійсний підписПароль не встановлений, перевірте Налаштування
diff --git a/app/src/main/res/values-uk/strings_main.xml b/app/src/main/res/values-uk/strings_main.xml
index d68d15cf..4474837e 100644
--- a/app/src/main/res/values-uk/strings_main.xml
+++ b/app/src/main/res/values-uk/strings_main.xml
@@ -45,6 +45,13 @@
Змінити зображенняВидалитиShow QR Code
+
+ More options
+ More options for %1$s
+ Copy token
+ Copy %1$s token
+ Add new account
+ Close menuАутентифікація не пройдена. Будь ласка, спробуйте ще раз!Автентифікація не пройдена, закриття andOTP!
@@ -71,7 +78,6 @@
Tokens usageПомилка KeyStoreQR Code
- Deprecation noticeВведіть парольВведіть парольПідтвердіть пароль
@@ -83,11 +89,6 @@
Завантаження ключа шифрування з KeyStore завершилося невдало.
Усі дані, які Ви додали - будуть втрачені.\n\nЩоб мати надалі можливість використовувати andOTP, Ви можете перейти
до Налаштувань і змінити Шифрування бази даних на Пароль / ПІН-код.
- This will be the last version of andOTP to
- support Android versions below 5.1 (Lollipop). The increased effort required to maintain a
- separate storage implementation just for those older versions as well as their low market
- shares make a continued support infeasible for our small team.\n\nThis message will not be
- shown again.Зісканувати QR-кодImport QR code
diff --git a/app/src/main/res/values-uk/strings_settings.xml b/app/src/main/res/values-uk/strings_settings.xml
index 59ecb0b0..05fe1c60 100644
--- a/app/src/main/res/values-uk/strings_settings.xml
+++ b/app/src/main/res/values-uk/strings_settings.xml
@@ -18,6 +18,7 @@
Re-lock on inactivityDelay for inactivity re-lockBlock accessibility services
+ Block autofillМоваТемаCard layout
@@ -35,7 +36,7 @@
Show individual timeoutsДодати дату до назви файлуЗапитувати назву файлу
- Папка з резервними копіями
+ Default backup locationПароль резервної копіїAutomatically backup on new entriesДодатки для створення резервних копій
@@ -63,6 +64,10 @@
require reauthenticationHide sensitive fields from the accessibility
services. DO NOT enable this if you rely on the accessibility services!
+ Block autofill services from accessing password
+ fields inside the app
+ This feature requires an Android version
+ above 8.0 (Oreo)Прокручувати довгі позначки, замість їх обрізанняApp will be minimized when you copy the OTP to clipboardSpecify which values should be included when searching
@@ -73,10 +78,14 @@
Додати поточну дату та час до назви запропонованого
файлу резервної копіїЗапитувати назву файлу при створенні або відновленні резервної копії
+ Choose a default backup location
+ Backup location has been chosenУстановити пароль, який буде використовуватись для шифрування
резервних копійCreates a new encrypted backup when new
entries are added, or edited, if settings conditions are met
+ Set a default backup location and a
+ backup password to enable this optionВиберіть типи резервних копій, які можуть бути збережені сторонніми додатками для створення резервних копійАдреса електронної пошти для ключа OpenPGP, який буде використовуватись для шифрування
резервних копій
diff --git a/app/src/main/res/values-zh-rCN/strings_auth.xml b/app/src/main/res/values-zh-rCN/strings_auth.xml
index 81e01bb6..f76d470e 100644
--- a/app/src/main/res/values-zh-rCN/strings_auth.xml
+++ b/app/src/main/res/values-zh-rCN/strings_auth.xml
@@ -6,7 +6,8 @@
PIN 码请验证身份以启动 andOTP !
- 请确认您的身份验证,以生成新的加密密钥!
+ 请确认身份验证以生成您的
+ 加密密钥!解锁
diff --git a/app/src/main/res/values-zh-rCN/strings_backup.xml b/app/src/main/res/values-zh-rCN/strings_backup.xml
index ada7ee9e..33e40923 100644
--- a/app/src/main/res/values-zh-rCN/strings_backup.xml
+++ b/app/src/main/res/values-zh-rCN/strings_backup.xml
@@ -33,15 +33,15 @@
没有读取权限,请在执行备份前授予。没有写入权限,请在执行备份前授予。广播备份不支持基于 密码/PIN 的加密
- 新加密方法
- 自 andOTP 0.6.3 版本开始,我们对密码保护的备份采用新的改进型加密方法。旧的备份仍可导入,但我们强烈推荐使用改进后的加密方法创建新的备份。\n\n此消息只显示一次。自动备份失败自动备份成功这些通知在自动备份由于某些原因失败时显示这些通知在在自动备份成功时显示
- 创建备份目录失败
+ 请在设置中设置默认的备份位置!
+ 无法访问备份位置!
+ 创建备份文件失败!成功导出到外部存储导出到外部存储失败成功从外部存储导入
@@ -49,7 +49,6 @@
备份解密失败导入的数据中没有找到条目目前不能访问外部存储
- 未授予存储权限OpenPGP 错误:%s 没有检测到通过验证的签名未设置密码,请检查 设置
diff --git a/app/src/main/res/values-zh-rCN/strings_main.xml b/app/src/main/res/values-zh-rCN/strings_main.xml
index cdc883f0..9cf690b8 100644
--- a/app/src/main/res/values-zh-rCN/strings_main.xml
+++ b/app/src/main/res/values-zh-rCN/strings_main.xml
@@ -45,6 +45,13 @@
更改图像移除显示二维码
+
+ 更多选项
+ %1$s 的更多选项
+ 复制令牌
+ 复制 %1$s 令牌
+ 添加新账户
+ 关闭菜单验证失败,请重试!验证失败,正在关闭 andOTP!
@@ -71,7 +78,6 @@
令牌使用情况密钥库错误二维码
- 禁用通知输入密码输入密码确认密码
@@ -79,8 +85,6 @@
您确定要删除账户“%1$s”吗?andOTP 会跟踪您的令牌使用情况(通过 \"点击显示\"功能或复制到剪贴板),以便能够按「最常用」或「最近使用」排序。\n\n此消息将不会再次显示。从密钥库加载加密密钥失败。添加的任何项都将丢失。\n\n如要继续使用 andOTP,您可以到 设置 中将 数据库加密 切换为 密码/PIN。
- 这将是 andOTP 最后一个支持低于 Android 5.1(Lollipop)的版本。
-为那些低市场份额的旧机型维护一个单独版本,往往需要更多工作,对于我们这个小团队来说精力不被允许。\n\n此消息不会再次显示。扫描二维码导入二维码
diff --git a/app/src/main/res/values-zh-rCN/strings_settings.xml b/app/src/main/res/values-zh-rCN/strings_settings.xml
index c2eb90f0..2bba753d 100644
--- a/app/src/main/res/values-zh-rCN/strings_settings.xml
+++ b/app/src/main/res/values-zh-rCN/strings_settings.xml
@@ -18,6 +18,7 @@
不活动时重新锁定不活动时重新锁定延迟阻止辅助服务
+ 屏蔽自动填充语言主题卡片布局
@@ -35,7 +36,7 @@
显示个别超时追加日期到文件名询问文件名
- 备份目录
+ 默认备份位置备份密码自动备份新条目备份广播
@@ -56,6 +57,8 @@
设备待机后需要验证选择需要重新验证的延时(秒)隐藏辅助服务中的敏感字段。 如果您依赖辅助服务,请不要启用此选项!
+ 阻止自动填充服务访问应用内的密码 区域
+ 此功能需要 Android 8.0 (Oreo) 以上 版本过长的名称滚动显示,而非截断显示。当您复制 OTP 到剪贴板时应用将被最小化指定搜索时应包含的值
@@ -64,8 +67,12 @@
为每个条目显示一个单独的超时栏。这可能会减慢应用速度,只有在真正需要时才启用。追加当前日期和时间到建议的备份文件名每次创建或还原备份时都询问文件名
+ 选择默认的备份位置
+ 已选择备份位置设置用于加密备份的密码如果满足设置条件,新建或编辑条目时,同时新建一个加密备份。
+ 设置默认的备份位置和
+ 备份密码以启用此选项选择第三方应用可使用广播触发的备份类型用于加密备份的 OpenPGP 密钥电邮地址只导入包含有效签名密钥的加密备份
diff --git a/app/src/main/res/values-zh-rTW/strings_auth.xml b/app/src/main/res/values-zh-rTW/strings_auth.xml
index ce2d0f45..f9228b0c 100644
--- a/app/src/main/res/values-zh-rTW/strings_auth.xml
+++ b/app/src/main/res/values-zh-rTW/strings_auth.xml
@@ -6,7 +6,8 @@
PIN 碼請進行身分認證以開啟 andOTP!
- 請確認您的身分以生成新的加密金鑰!
+ 請確認身份以生成您的
+ 加密金鑰!解除鎖定
diff --git a/app/src/main/res/values-zh-rTW/strings_backup.xml b/app/src/main/res/values-zh-rTW/strings_backup.xml
index 7d6b79bd..e11e25ee 100644
--- a/app/src/main/res/values-zh-rTW/strings_backup.xml
+++ b/app/src/main/res/values-zh-rTW/strings_backup.xml
@@ -37,17 +37,15 @@
讀取被拒絕,請在備份前允許此權限寫入被拒絕,請在備份前允許此權限透過外部程式執行自動備份時,不支援基於 密碼 / PIN 的加密方式
- 新加密方法
- andOTP自0.6.3版開始,全新和改進了的加密方式是用於密碼保護的備份。
- 舊備份的仍然可以導入,但是我們強烈建議你使用改進了的加密方式來創建新的備份。
- \n\n此消息將不再顯示。自動備份失敗自動備份成功自動備份因某些原因失敗時,將顯示此通知自動備份成功時將顯示此通知
- 建立備份資料夾失敗
+ 請在設定中設定預設的備份位置!
+ 存取備份位置失敗!
+ 建立備份檔案失敗!成功匯出至外部儲存裝置匯出到外部儲存裝置失敗成功從外部儲存裝置匯入
@@ -55,7 +53,6 @@
解密備份失敗匯入的資料中未發現有效條目當前無法訪問外部儲存裝置
- 未授予儲存空間權限OpenPGP 出錯:%s未檢測到有效的數位簽章無密碼,請檢查設定
diff --git a/app/src/main/res/values-zh-rTW/strings_main.xml b/app/src/main/res/values-zh-rTW/strings_main.xml
index b2adda8d..6d2c9c9e 100644
--- a/app/src/main/res/values-zh-rTW/strings_main.xml
+++ b/app/src/main/res/values-zh-rTW/strings_main.xml
@@ -45,6 +45,13 @@
變更影像移除顯示 QR Code
+
+ 更多選項
+ 更多 %1$s 的選項
+ 複製權杖
+ 複製 %1$s 的權杖
+ 新增帳號
+ 關閉選單認證失敗,請再試一次!認證失敗,andOTP 正在關閉!
@@ -71,7 +78,6 @@
權杖用法金鑰庫發生錯誤QR Code
- 棄用通知請輸入密碼輸入密碼確認密碼
@@ -81,10 +87,6 @@
以揭露」功能或複製到剪貼簿)來以「最常使用」
或「上次使用」。\n\n此訊息將不會再次顯示。
無法從金鑰庫載入加密金鑰。所有條目都將丟失。\n\n仍要使用 andOTP,您可前往設定將資料庫加密方式切換為密碼/PIN。
- 這將會是 andOTP 最後一個支援 Android 5.1
- (Lollipop) 或更舊的版本。維護低市佔率
- 的較舊版本會讓我們的小型團隊無法獲得
- 持續的支援。\n\n此訊息將不會再次顯示。掃描 QR 碼匯入 QR code
diff --git a/app/src/main/res/values-zh-rTW/strings_settings.xml b/app/src/main/res/values-zh-rTW/strings_settings.xml
index 09080f99..a44ab671 100644
--- a/app/src/main/res/values-zh-rTW/strings_settings.xml
+++ b/app/src/main/res/values-zh-rTW/strings_settings.xml
@@ -18,6 +18,7 @@
不活躍時重新鎖定不活躍時重新鎖定的延遲封鎖無障礙服務
+ 封鎖自動填入語言佈景主題卡片佈局
@@ -35,7 +36,7 @@
顯示獨立逾時為檔案名追加日期詢問檔案名
- 備份資料夾
+ 預設備份位置備份密碼自動備份新項目備份廣播
@@ -58,6 +59,10 @@
選取需要再次驗證的時間嚴遲(以秒計)對無障礙服務隱藏敏感欄位。
如果您會依賴無障礙服務的話,請勿啟用此選項!
+ 避免自動填入服務存取應用程式
+ 中的密碼欄位
+ 此功能需要 Android 版本
+ 8.0 (Oreo) 以上水平滾動超長標籤而非截斷它們應用程式將會在您把 OTP 複製到剪貼簿時最小化指定搜尋時應該包含哪些值
@@ -67,9 +72,13 @@
這可能會拖慢應用程式,請只在需要時啟用。
將當前日期和時間追加到預設的備份檔案名中每次新增或重新儲存備份時都要求鍵入檔案名
+ 選擇預設備份位置
+ 備份位置已選擇設定用於加密備份的密碼如果滿足設定的條件的話,新增項目或
編輯時建立新的加密備份。
+ 設定預設備份位置與
+ 備份密碼以啟用此選項選取第三方程式使用廣播可觸發哪種備份類型用於加密的OpenPGP 密鑰電郵地址僅匯入有效金鑰簽署的加密備份
diff --git a/app/src/main/res/values/aboutlibraries_definitions.xml b/app/src/main/res/values/aboutlibraries_definitions.xml
index 27ea3e8f..11106518 100644
--- a/app/src/main/res/values/aboutlibraries_definitions.xml
+++ b/app/src/main/res/values/aboutlibraries_definitions.xml
@@ -74,19 +74,4 @@
https://github.com/open-keychain/openpgp-apiapache_2_0
-
-
-
- Journey Mobile
- https://journeyapps.com
-
- ZXing Android Embedded
- Barcode scanning library for Android, using ZXing for decoding.
- https://github.com/journeyapps/zxing-android-embedded
- 3.6.0
-
- true
- https://github.com/journeyapps/zxing-android-embedded
-
- mit
\ No newline at end of file
diff --git a/app/src/main/res/values/settings.xml b/app/src/main/res/values/settings.xml
index a914b4f8..8b251cb1 100644
--- a/app/src/main/res/values/settings.xml
+++ b/app/src/main/res/values/settings.xml
@@ -38,6 +38,7 @@
pref_label_highlight_tokenpref_hide_global_timeoutpref_show_individual_timeouts
+ pref_focus_search_on_startpref_backup_append_date_timepref_backup_ask
@@ -52,6 +53,7 @@
pref_openpgp_key_signpref_openpgp_verifypref_new_backup_dialog_shown
+ pref_backup_default_typepref_security_backup_warning_shownpref_sort_mode
@@ -137,10 +139,12 @@
system
+ astcadeenes
+ eufrglit
@@ -156,6 +160,7 @@
ruukbg
+ iwarfahi
@@ -198,10 +203,12 @@
@string/settings_lang_sys_default
+ AsturianuCatalàDeutschEnglishEspañol
+ EuskaraFrançaisGalegoItaliano
@@ -217,6 +224,7 @@
РусскийУкраїнськабългарски
+ עִברִיתالعربيةفارسیहिन्दी
diff --git a/app/src/main/res/values/strings_backup.xml b/app/src/main/res/values/strings_backup.xml
index a4bd7b03..30c54d4f 100644
--- a/app/src/main/res/values/strings_backup.xml
+++ b/app/src/main/res/values/strings_backup.xml
@@ -2,33 +2,10 @@
Backups
- Plain-text backups
- Encrypted backups
- OpenPGP backups
-
- Backup (plain-text)
- Backup (encrypted)
- Backup (OpenPGP)
- Restore (plain-text)
- Restore (encrypted)
- Restore (encrypted, old encryption)
- Restore (OpenPGP)
-
Replace existing entries
-
- Backup all accounts in a plain-text JSON file
- Backup all accounts in a password-protected JSON file
- Backup all accounts in an OpenPGP-encrypted JSON file
- Restore accounts from a plain-text JSON file
- Restore accounts from a password-protected JSON file
- Restore accounts from a password-protected JSON file
- created with an andOTP version lower than 0.6.3
- Restore accounts from an OpenPGP-encrypted JSON file
-
- Failed to load the backup password from the Settings,
- this either means no password was set or something went wrong. You will be asked to enter
- the password manually when creating or importing a backup.
-
+ If enabled all old entries are replaced when importing a
+ backup and only the backup is present. If disabled the old entries and the backups content
+ are merged.You need to install an OpenPGP provider and enable
it in the Settings to use this feature.
@@ -37,18 +14,12 @@
before you can create encrypted backups.
- If enabled all old entries are replaced when importing a
- backup and only the backup is present. If disabled the old entries and the backups content
- are merged.
-
Security warning
-
Do you really want to export the database as
plain-text JSON file? This file contains all your secret keys, please keep it safe!
-
Backup failedBackup successful
@@ -84,9 +55,38 @@
Failed to save restored entriesDecryption of the backup failedNo entries found in imported data
+ Import from external storage failedExternal storage currently not accessibleOpenPGP Error: %sNo verified signature detectedPassword not set, check the SettingsCan\'t open file selection dialog!
+
+ Backup type:
+
+ The backup will be stored in an unencrypted plain-text
+ file. Please only use if strictly necessary and keep the file safe!
+ The backup will be stored encrypted with a custom password
+ using AES 256-bit encryption. You can setup a default password in the settings if you
+ don\'t want to have to enter it every time you create a backup.
+ The backup will be stored encrypted using the PGP key you
+ specified in the settings. The encryption will be handled by a 3rd party app.
+
+ Restore old backup format (created with an andOTP version
+ before 0.6.3)
+
+ Create backup
+ Restore backup
+
+
+ Plain-text
+ Encrypted
+ OpenPGP
+
+
+
+ plain
+ crypt
+ pgp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings_intro.xml b/app/src/main/res/values/strings_intro.xml
index 5856d1bc..d7584a0d 100644
--- a/app/src/main/res/values/strings_intro.xml
+++ b/app/src/main/res/values/strings_intro.xml
@@ -33,9 +33,12 @@
Please set a password to continue!Please set a PIN to continue!Please confirm your password to continue!
+ Passwords must match!Please confirm your PIN to continue!
+ Pins must match!FinishedYour settings have been saved, you are now all set to use
andOTP!
+ Android sync is a feature built in to android used to back up app data to a 3rd party service (usually Google). Backups are always encrypted and unaccessible to 3rd parties without your master password. Requires use of Password encryption method.
\ No newline at end of file
diff --git a/app/src/main/res/values/strings_main.xml b/app/src/main/res/values/strings_main.xml
index 50a9fed1..4699dc16 100644
--- a/app/src/main/res/values/strings_main.xml
+++ b/app/src/main/res/values/strings_main.xml
@@ -114,4 +114,7 @@
Scan QR codeImport QR codeEnter details
+
+
+ Start adding your tokens by pressing \"+\" at the bottom
diff --git a/app/src/main/res/values/strings_settings.xml b/app/src/main/res/values/strings_settings.xml
index c2720231..0c5e2912 100644
--- a/app/src/main/res/values/strings_settings.xml
+++ b/app/src/main/res/values/strings_settings.xml
@@ -37,6 +37,7 @@
Highlight expiring tokensHide global timeout barShow individual timeouts
+ Focus search on app startAppend date to filenameAsk for filename
@@ -83,6 +84,7 @@
Hide the global timeout bar shown at the top of the screenShow an individual timeout bar for every entry.
This can slow down the app, only enable if really necessary.
+ Focus the search immediately after opening the app.Append the current date and time to the suggested
backup filename
@@ -134,6 +136,9 @@
Failed to silently upgrade your password / PIN
to the new encryption, please manually reset it in the Settings!
+ Android sync enabled
+ Android sync disabled
+
WarningErrorClear the KeyStore?
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index f850ab19..5c6d87eb 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -188,6 +188,12 @@
android:summary="@string/settings_desc_show_individual_timeouts"
android:defaultValue="false" />
+
+