diff --git a/app/src/main/java/me/impy/aegis/AegisApplication.java b/app/src/main/java/me/impy/aegis/AegisApplication.java index 83fcde5d..36605ce5 100644 --- a/app/src/main/java/me/impy/aegis/AegisApplication.java +++ b/app/src/main/java/me/impy/aegis/AegisApplication.java @@ -48,8 +48,8 @@ public class AegisApplication extends Application { intent.setAction(Intent.ACTION_MAIN); ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "shortcut_new") - .setShortLabel("New profile") - .setLongLabel("Add new profile") + .setShortLabel(getString(R.string.new_profile)) + .setLongLabel(getString(R.string.add_new_profile)) .setIcon(Icon.createWithResource(this, R.drawable.qr_scanner)) .setIntent(intent) .build(); diff --git a/app/src/main/java/me/impy/aegis/db/DatabaseManager.java b/app/src/main/java/me/impy/aegis/db/DatabaseManager.java index 1958e682..1bb692bf 100644 --- a/app/src/main/java/me/impy/aegis/db/DatabaseManager.java +++ b/app/src/main/java/me/impy/aegis/db/DatabaseManager.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.UUID; import me.impy.aegis.BuildConfig; +import me.impy.aegis.R; public class DatabaseManager { private static final String FILENAME = "aegis.json"; @@ -110,7 +111,7 @@ public class DatabaseManager { dbFile.setContent(_db.toJson()); } - String dirName = !BuildConfig.DEBUG ? "Aegis" : "AegisDebug"; + String dirName = !BuildConfig.DEBUG ? _context.getString(R.string.app_name) : _context.getString(R.string.app_name_dev); File dir = new File(Environment.getExternalStorageDirectory(), dirName); if (!dir.exists() && !dir.mkdirs()) { throw new IOException("error creating external storage directory"); diff --git a/app/src/main/java/me/impy/aegis/ui/AuthActivity.java b/app/src/main/java/me/impy/aegis/ui/AuthActivity.java index 679e745f..78944f1e 100644 --- a/app/src/main/java/me/impy/aegis/ui/AuthActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/AuthActivity.java @@ -114,8 +114,8 @@ public class AuthActivity extends AegisActivity implements FingerprintUiHelper.C private void showError() { AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle("Decryption error"); - builder.setMessage("Master key integrity check failed for every slot. Make sure you didn't mistype your password."); + builder.setTitle(getString(R.string.unlock_vault_error)); + builder.setMessage(getString(R.string.unlock_vault_error_description)); builder.setCancelable(false); builder.setPositiveButton(android.R.string.ok, null); builder.create().show(); diff --git a/app/src/main/java/me/impy/aegis/ui/EditEntryActivity.java b/app/src/main/java/me/impy/aegis/ui/EditEntryActivity.java index d035f2e2..3a185e36 100644 --- a/app/src/main/java/me/impy/aegis/ui/EditEntryActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/EditEntryActivity.java @@ -95,7 +95,7 @@ public class EditEntryActivity extends AegisActivity { _origEntry = (DatabaseEntry) intent.getSerializableExtra("entry"); _isNew = intent.getBooleanExtra("isNew", false); if (_isNew) { - setTitle("Add profile"); + setTitle(R.string.add_new_profile); } // set up fields @@ -194,8 +194,8 @@ public class EditEntryActivity extends AegisActivity { ImagePicker imagePicker = ImagePicker.create(this) .returnMode(ReturnMode.ALL) .folderMode(true) - .toolbarFolderTitle("Folder") - .toolbarImageTitle("Tap to select") + .toolbarFolderTitle(getString(R.string.folder)) + .toolbarImageTitle(getString(R.string.tap_to_select)) .toolbarArrowColor(Color.BLACK) .single() .showCamera(false) @@ -458,7 +458,7 @@ public class EditEntryActivity extends AegisActivity { private void onSaveError(String msg) { new AlertDialog.Builder(this) - .setTitle("Error saving profile") + .setTitle(getString(R.string.saving_profile_error)) .setMessage(msg) .setPositiveButton(android.R.string.ok, null) .show(); diff --git a/app/src/main/java/me/impy/aegis/ui/IntroActivity.java b/app/src/main/java/me/impy/aegis/ui/IntroActivity.java index fe8aa06c..d3ed6452 100644 --- a/app/src/main/java/me/impy/aegis/ui/IntroActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/IntroActivity.java @@ -64,9 +64,9 @@ public class IntroActivity extends AppIntro2 implements DerivationTask.Callback setBarColor(getResources().getColor(R.color.colorPrimary)); SliderPage homeSliderPage = new SliderPage(); - homeSliderPage.setTitle("Welcome"); + homeSliderPage.setTitle(getString(R.string.welcome)); homeSliderPage.setTitleColor(getResources().getColor(R.color.primary_text_dark)); - homeSliderPage.setDescription("Aegis is a secure, free and open source 2FA app"); + homeSliderPage.setDescription(getString(R.string.app_description)); homeSliderPage.setDescColor(getResources().getColor(R.color.primary_text_dark)); homeSliderPage.setBgColor(getResources().getColor(R.color.colorSecondary)); addSlide(AppIntroFragment.newInstance(homeSliderPage)); @@ -80,8 +80,8 @@ public class IntroActivity extends AppIntro2 implements DerivationTask.Callback addSlide(_authenticatedSlide); SliderPage endSliderPage = new SliderPage(); - endSliderPage.setTitle("All done!"); - endSliderPage.setDescription("Aegis has been set up and is ready to go."); + endSliderPage.setTitle(getString(R.string.setup_completed)); + endSliderPage.setDescription(getString(R.string.setup_completed_description)); endSliderPage.setBgColor(getResources().getColor(R.color.colorSecondary)); _endSlide = AppIntroFragment.newInstance(endSliderPage); addSlide(_endSlide); diff --git a/app/src/main/java/me/impy/aegis/ui/MainActivity.java b/app/src/main/java/me/impy/aegis/ui/MainActivity.java index 11622530..e3bb318e 100644 --- a/app/src/main/java/me/impy/aegis/ui/MainActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/MainActivity.java @@ -137,7 +137,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (!PermissionHelper.checkResults(grantResults)) { - Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.permission_denied), Toast.LENGTH_SHORT).show(); return; } @@ -273,7 +273,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene if (!_db.isLoaded() && !_db.fileExists()) { // the db doesn't exist, start the intro if (getPreferences().isIntroDone()) { - Toast.makeText(this, "Database file not found, starting intro...", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.vault_not_found), Toast.LENGTH_SHORT).show(); } Intent intro = new Intent(this, IntroActivity.class); startActivityForResult(intro, CODE_DO_INTRO); @@ -304,7 +304,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("text/plain", entry.getInfo().getOtp()); clipboard.setPrimaryClip(clip); - Toast.makeText(this, "Code copied to the clipboard", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.code_copied), Toast.LENGTH_SHORT).show(); }); dialog.findViewById(R.id.delete_button).setOnClickListener(view -> { @@ -379,7 +379,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene } } } catch (DatabaseManagerException e) { - Toast.makeText(this, "An error occurred while trying to load/decrypt the database", Toast.LENGTH_LONG).show(); + Toast.makeText(this, getString(R.string.decryption_error), Toast.LENGTH_LONG).show(); startAuthActivity(); return; } @@ -403,7 +403,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene try { _db.save(); } catch (DatabaseManagerException e) { - Toast.makeText(this, "An error occurred while trying to save the database", Toast.LENGTH_LONG).show(); + Toast.makeText(this, getString(R.string.saving_error), Toast.LENGTH_LONG).show(); } } diff --git a/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java b/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java index 01b666e3..550e244f 100644 --- a/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java +++ b/app/src/main/java/me/impy/aegis/ui/PreferencesFragment.java @@ -144,14 +144,14 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas dialog.show(getActivity().getSupportFragmentManager(), null); } else { new AlertDialog.Builder(getActivity()) - .setTitle("Disable encryption") - .setMessage("Are you sure you want to disable encryption? This will cause the database to be stored in plain text") + .setTitle(getString(R.string.disable_encryption)) + .setMessage(getString(R.string.disable_encryption_description)) .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { try { _db.disableEncryption(); } catch (DatabaseManagerException e) { - Toast.makeText(getActivity(), "An error occurred while enabling encryption", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.encrypting_error), Toast.LENGTH_SHORT).show(); } updateEncryptionPreference(); } @@ -178,7 +178,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (!PermissionHelper.checkResults(grantResults)) { - Toast.makeText(getActivity(), "Permission denied", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.permission_denied), Toast.LENGTH_SHORT).show(); return; } @@ -229,7 +229,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas String[] names = importers.keySet().toArray(new String[importers.size()]); new AlertDialog.Builder(getActivity()) - .setTitle("Select the application you'd like to import a database from") + .setTitle(getString(R.string.choose_application)) .setSingleChoiceItems(names, 0, null) .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { @@ -256,7 +256,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas try { importDatabase(_importer); } catch (DatabaseImporterException e) { - Toast.makeText(getActivity(), "An error occurred while trying to parse the file", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.parsing_file_error), Toast.LENGTH_SHORT).show(); } _importer = null; @@ -273,11 +273,11 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas try (InputStream fileStream = getActivity().getContentResolver().openInputStream(uri)) { stream = ByteInputStream.create(fileStream); } catch (FileNotFoundException e) { - Toast.makeText(getActivity(), "Error: File not found", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.file_not_found), Toast.LENGTH_SHORT).show(); return; } catch (IOException e) { e.printStackTrace(); - Toast.makeText(getActivity(), "An error occurred while trying to read the file", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.reading_file_error), Toast.LENGTH_SHORT).show(); return; } @@ -298,7 +298,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas importDatabase(importer); } catch (DatabaseImporterException e) { e.printStackTrace(); - Toast.makeText(getActivity(), "An error occurred while trying to parse the file", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.parsing_file_error), Toast.LENGTH_SHORT).show(); } } @@ -318,7 +318,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas } _result.putExtra("needsRecreate", true); - Toast.makeText(getActivity(), String.format(Locale.getDefault(), "Imported %d entries", entries.size()), Toast.LENGTH_LONG).show(); + Toast.makeText(getActivity(), String.format(Locale.getDefault(), getString(R.string.imported_entries_count), entries.size()), Toast.LENGTH_LONG).show(); } private void onExport() { @@ -335,14 +335,14 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas try { filename = _db.export(checked[0]); } catch (DatabaseManagerException e) { - Toast.makeText(getActivity(), "An error occurred while trying to export the database", Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.exporting_database_error), Toast.LENGTH_SHORT).show(); return; } // make sure the new file is visible MediaScannerConnection.scanFile(getActivity(), new String[]{filename}, null, null); - Toast.makeText(getActivity(), "The database has been exported to: " + filename, Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.export_database_location) + filename, Toast.LENGTH_SHORT).show(); }) .setNegativeButton(android.R.string.cancel, null); if (_db.isEncryptionEnabled()) { @@ -355,7 +355,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas } }); } else { - builder.setMessage("This action will export the database out of Android's private storage."); + builder.setMessage(getString(R.string.export_warning)); } builder.show(); } @@ -374,7 +374,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas try { _db.save(); } catch (DatabaseManagerException e) { - Toast.makeText(getActivity(), "An error occurred while trying to save the database", Toast.LENGTH_LONG).show(); + Toast.makeText(getActivity(), getString(R.string.saving_error), Toast.LENGTH_LONG).show(); return false; } @@ -400,7 +400,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Pas @Override public void onException(Exception e) { updateEncryptionPreference(); - Toast.makeText(getActivity(), "An error occurred while trying to set the password: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(getActivity(), getString(R.string.encryption_set_password_error) + e.getMessage(), Toast.LENGTH_SHORT).show(); } private void updateEncryptionPreference() { diff --git a/app/src/main/java/me/impy/aegis/ui/ScannerActivity.java b/app/src/main/java/me/impy/aegis/ui/ScannerActivity.java index bc887da5..b7f8f720 100644 --- a/app/src/main/java/me/impy/aegis/ui/ScannerActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/ScannerActivity.java @@ -47,7 +47,7 @@ public class ScannerActivity extends AegisActivity implements ZXingScannerView.R if (camera == -1) { camera = getFrontCameraId(); if (camera == -1) { - Toast.makeText(this, "No cameras available", Toast.LENGTH_LONG).show(); + Toast.makeText(this, getString(R.string.no_cameras_available), Toast.LENGTH_LONG).show(); finish(); } _facing = CAMERA_FACING_FRONT; @@ -117,7 +117,7 @@ public class ScannerActivity extends AegisActivity implements ZXingScannerView.R setResult(RESULT_OK, intent); finish(); } catch (GoogleAuthInfoException e) { - Toast.makeText(this, "An error occurred while trying to parse the QR code contents", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.read_qr_error), Toast.LENGTH_SHORT).show(); } _scannerView.resumeCameraPreview(this); diff --git a/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java b/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java index e6b974e9..b6ba141a 100644 --- a/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java +++ b/app/src/main/java/me/impy/aegis/ui/SlotManagerActivity.java @@ -150,13 +150,13 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li public void onRemoveSlot(Slot slot) { SlotList slots = _creds.getSlots(); if (slot instanceof PasswordSlot && slots.findAll(PasswordSlot.class).size() <= 1) { - Toast.makeText(this, "You must have at least one password slot", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.password_slot_error, Toast.LENGTH_SHORT).show(); return; } new AlertDialog.Builder(this) - .setTitle("Remove slot") - .setMessage("Are you sure you want to remove this slot?") + .setTitle(R.string.remove_slot) + .setMessage(R.string.remove_slot_description) .setPositiveButton(android.R.string.yes, (dialog, whichButton) -> { slots.remove(slot); _adapter.removeSlot(slot); @@ -184,6 +184,6 @@ public class SlotManagerActivity extends AegisActivity implements SlotAdapter.Li @Override public void onException(Exception e) { - Toast.makeText(this, "An error occurred while trying to add a new slot: " + e.getMessage(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, getString(R.string.adding_new_slot_error) + e.getMessage(), Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java b/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java index 411a5087..d1459c8d 100644 --- a/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java +++ b/app/src/main/java/me/impy/aegis/ui/dialogs/Dialogs.java @@ -13,8 +13,8 @@ public class Dialogs { public static AlertDialog showDeleteEntryDialog(Activity activity, DialogInterface.OnClickListener onDelete) { return new AlertDialog.Builder(activity) - .setTitle("Delete entry") - .setMessage("Are you sure you want to delete this entry?") + .setTitle(activity.getString(R.string.delete_entry)) + .setMessage(activity.getString(R.string.delete_entry_description)) .setPositiveButton(android.R.string.yes, onDelete) .setNegativeButton(android.R.string.no, null) .show(); @@ -22,8 +22,8 @@ public class Dialogs { public static AlertDialog showDiscardDialog(Activity activity, DialogInterface.OnClickListener onSave, DialogInterface.OnClickListener onDiscard) { return new AlertDialog.Builder(activity) - .setTitle("Discard changes?") - .setMessage("Your changes have not been saved") + .setTitle(activity.getString(R.string.discard_changes)) + .setMessage(activity.getString(R.string.discard_changes_description)) .setPositiveButton(R.string.save, onSave) .setNegativeButton(R.string.discard, onDiscard) .show(); diff --git a/app/src/main/java/me/impy/aegis/ui/dialogs/FingerprintDialogFragment.java b/app/src/main/java/me/impy/aegis/ui/dialogs/FingerprintDialogFragment.java index e79b71c5..ff5b8a7b 100644 --- a/app/src/main/java/me/impy/aegis/ui/dialogs/FingerprintDialogFragment.java +++ b/app/src/main/java/me/impy/aegis/ui/dialogs/FingerprintDialogFragment.java @@ -45,7 +45,7 @@ public class FingerprintDialogFragment extends SlotDialogFragment implements Fin } return new AlertDialog.Builder(getActivity()) - .setTitle("Register a new fingerprint") + .setTitle(R.string.register_fingerprint) .setView(view) .setNegativeButton(android.R.string.cancel, null) .create(); diff --git a/app/src/main/java/me/impy/aegis/ui/dialogs/PasswordDialogFragment.java b/app/src/main/java/me/impy/aegis/ui/dialogs/PasswordDialogFragment.java index 584b909c..d2d72462 100644 --- a/app/src/main/java/me/impy/aegis/ui/dialogs/PasswordDialogFragment.java +++ b/app/src/main/java/me/impy/aegis/ui/dialogs/PasswordDialogFragment.java @@ -30,7 +30,7 @@ public class PasswordDialogFragment extends SlotDialogFragment { EditText textPasswordConfirm = view.findViewById(R.id.text_password_confirm); AlertDialog alert = new AlertDialog.Builder(getActivity()) - .setTitle("Enter a new password") + .setTitle(R.string.set_password) .setView(view) .setPositiveButton(android.R.string.ok, null) .setNegativeButton(android.R.string.cancel, null) diff --git a/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticatedSlide.java b/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticatedSlide.java index 5fd63b5f..f4ec1c40 100644 --- a/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticatedSlide.java +++ b/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticatedSlide.java @@ -154,9 +154,9 @@ public class CustomAuthenticatedSlide extends Fragment implements FingerprintUiH public void onUserIllegallyRequestedNextPage() { String message; if (!EditTextHelper.areEditTextsEqual(_textPassword, _textPasswordConfirm)) { - message = "Passwords should be equal and non-empty"; + message = getString(R.string.password_equality_error); } else if (!_fingerAuthenticated) { - message = "Register your fingerprint"; + message = getString(R.string.register_fingerprint); } else { return; } diff --git a/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticationSlide.java b/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticationSlide.java index bab1b86a..3fd89dad 100644 --- a/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticationSlide.java +++ b/app/src/main/java/me/impy/aegis/ui/slides/CustomAuthenticationSlide.java @@ -57,7 +57,7 @@ public class CustomAuthenticationSlide extends Fragment implements ISlidePolicy, @Override public void onUserIllegallyRequestedNextPage() { - Snackbar snackbar = Snackbar.make(getView(), "Please select an authentication method", Snackbar.LENGTH_LONG); + Snackbar snackbar = Snackbar.make(getView(), getString(R.string.snackbar_authentication_method), Snackbar.LENGTH_LONG); snackbar.show(); } diff --git a/app/src/main/java/me/impy/aegis/ui/tasks/DerivationTask.java b/app/src/main/java/me/impy/aegis/ui/tasks/DerivationTask.java index 794ff0c3..d8e32bfc 100644 --- a/app/src/main/java/me/impy/aegis/ui/tasks/DerivationTask.java +++ b/app/src/main/java/me/impy/aegis/ui/tasks/DerivationTask.java @@ -4,6 +4,7 @@ import android.content.Context; import javax.crypto.SecretKey; +import me.impy.aegis.R; import me.impy.aegis.crypto.CryptoUtils; import me.impy.aegis.crypto.SCryptParameters; import me.impy.aegis.db.slots.PasswordSlot; @@ -12,7 +13,7 @@ public class DerivationTask extends ProgressDialogTask extends ProgressDialogTask _type; public SlotListTask(Class type, Context context, Callback cb) { - super(context, "Decrypting database"); + super(context, context.getString(R.string.unlocking_vault)); _cb = cb; _type = type; } diff --git a/app/src/main/java/me/impy/aegis/ui/views/SlotHolder.java b/app/src/main/java/me/impy/aegis/ui/views/SlotHolder.java index be0efc24..e6314fc7 100644 --- a/app/src/main/java/me/impy/aegis/ui/views/SlotHolder.java +++ b/app/src/main/java/me/impy/aegis/ui/views/SlotHolder.java @@ -33,10 +33,10 @@ public class SlotHolder extends RecyclerView.ViewHolder { public void setData(Slot slot) { if (slot instanceof PasswordSlot) { - _slotName.setText("Password"); + _slotName.setText(R.string.password); _slotImg.setImageResource(R.drawable.ic_create_black_24dp); } else if (slot instanceof FingerprintSlot) { - _slotName.setText("Finger"); + _slotName.setText(R.string.authentication_method_fingerprint); _slotImg.setImageResource(R.drawable.ic_fingerprint_black_24dp); if (FingerprintHelper.isSupported()) { try { @@ -47,7 +47,7 @@ public class SlotHolder extends RecyclerView.ViewHolder { } catch (KeyStoreHandleException e) { } } } else if (slot instanceof RawSlot) { - _slotName.setText("Raw"); + _slotName.setText(R.string.authentication_method_raw); _slotImg.setImageResource(R.drawable.ic_vpn_key_black_24dp); } else { throw new RuntimeException(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c5f0f5cf..a1104706 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,6 @@ Aegis + AegisDev Settings Import Delete @@ -84,4 +85,48 @@ Delete Password Confirm password + New profile + Add new profile + Couldn\'t unlock vault + Incorrect password. Make sure you didn\'t mistype your password. + Passwords should be equal and non-empty + Register your fingerprint + Please select an authentication method + Encrypting the vault + Delete entry + Are you sure you want to delete this entry? + Discard changes? + Your changes have not been saved + Folder + Tap to select + Error saving profile + Welcome + Aegis is a secure, free and open source 2FA app + Setup completed + Aegis has been setup and is ready to go. + Vault not found, starting setup… + Code copied to the clipboard + An error occurred while trying to unlock the vault + An error occurred while trying to save the vault + Disable encryption + Are you sure you want to disable encryption? This will cause the vault to be stored in plain text. + An error occurred while enabling encryption + Permission denied + Select the application you\'d like to import a database from + An error occurred while trying to parse the file + Error: File not found + An error occurred while trying to read the file + Imported %d entries + An error occurred while trying to export the database + The database has been exported to: + This action will export the database out of Aegis\' private storage. + An error occurred while trying to set the password: + No cameras available + An error occurred while trying to read the QR code + Raw + Unlocking the vault + You must have at least one password slot + Remove slot + Are you sure you want to remove this slot? + An error occurred while trying to add a new slot: