mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Compare commits
52 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e6b33d60c3 | ||
|
|
3fd06890d7 | ||
|
|
4af4ad7663 | ||
|
|
6ca8501e28 | ||
|
|
432b385f60 | ||
|
|
6cebdefa4a | ||
|
|
bc665eb83d | ||
|
|
cb187300fe | ||
|
|
f34e007ecd | ||
|
|
3b6ad080b4 | ||
|
|
9919e90ba5 | ||
|
|
f4af44925b | ||
|
|
4bb366b568 | ||
|
|
7e7ab4ce19 | ||
|
|
4d833d25ce | ||
|
|
a9c508ecd9 | ||
|
|
ef4dbb8fdb | ||
|
|
3fd13f3e3b | ||
|
|
319c9cad4b | ||
|
|
c12297c98d | ||
|
|
7c38361844 | ||
|
|
559554a975 | ||
|
|
7e2ffa2124 | ||
|
|
66dbac4bb2 | ||
|
|
8b6a843a85 | ||
|
|
976cff2751 | ||
|
|
f7c30fa8eb | ||
|
|
7757c8218b | ||
|
|
2928b7daa3 | ||
|
|
3a55dea276 | ||
|
|
2a25213d66 | ||
|
|
035ffd8135 | ||
|
|
b040487f1f | ||
|
|
6fc821aecf | ||
|
|
cdceb1fb6f | ||
|
|
07d185913d | ||
|
|
f2a245a9c8 | ||
|
|
33338f4759 | ||
|
|
f7a4370b29 | ||
|
|
77b7afedda | ||
|
|
caa13039e5 | ||
|
|
02845d93ed | ||
|
|
9ef4695cc7 | ||
|
|
d619e089c0 | ||
|
|
3c50348a79 | ||
|
|
167ea3b82b | ||
|
|
9eda3e62f7 | ||
|
|
99c4319b51 | ||
|
|
790b25db65 | ||
|
|
97d4972f9a | ||
|
|
8e6853756f | ||
|
|
6d3aae187b |
16
CHANGELOG
16
CHANGELOG
@@ -1,3 +1,19 @@
|
|||||||
|
KeePassDX(2.9.12)
|
||||||
|
* Fix OTP token type #863
|
||||||
|
* Fix auto open biometric prompt #862
|
||||||
|
* Fix back appearance setting #865
|
||||||
|
* Fix orientation change in settings #872
|
||||||
|
* Change memory unit to MiB #851
|
||||||
|
* Small changes #642
|
||||||
|
|
||||||
|
KeePassDX(2.9.11)
|
||||||
|
* Add Keyfile XML version 2 (fix hex) #844
|
||||||
|
* Fix hex Keyfile #861
|
||||||
|
|
||||||
|
KeePassDX(2.9.10)
|
||||||
|
* Try to fix autofill #852
|
||||||
|
* Fix database change dialog displayed too often #853
|
||||||
|
|
||||||
KeePassDX(2.9.9)
|
KeePassDX(2.9.9)
|
||||||
* Detect file changes and reload database #794
|
* Detect file changes and reload database #794
|
||||||
* Inline suggestions autofill with compatible keyboard (Android R) #827
|
* Inline suggestions autofill with compatible keyboard (Android R) #827
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ android {
|
|||||||
applicationId "com.kunzisoft.keepass"
|
applicationId "com.kunzisoft.keepass"
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode = 53
|
versionCode = 56
|
||||||
versionName = "2.9.9"
|
versionName = "2.9.12"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
||||||
testApplicationId = "com.kunzisoft.keepass.tests"
|
testApplicationId = "com.kunzisoft.keepass.tests"
|
||||||
|
|||||||
@@ -29,10 +29,7 @@ import android.view.MotionEvent
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.widget.AdapterView
|
import android.widget.*
|
||||||
import android.widget.ArrayAdapter
|
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.Spinner
|
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
@@ -57,6 +54,7 @@ class SetOTPDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
private var mOtpElement: OtpElement = OtpElement()
|
private var mOtpElement: OtpElement = OtpElement()
|
||||||
|
|
||||||
|
private var otpTypeMessage: TextView? = null
|
||||||
private var otpTypeSpinner: Spinner? = null
|
private var otpTypeSpinner: Spinner? = null
|
||||||
private var otpTokenTypeSpinner: Spinner? = null
|
private var otpTokenTypeSpinner: Spinner? = null
|
||||||
private var otpSecretContainer: TextInputLayout? = null
|
private var otpSecretContainer: TextInputLayout? = null
|
||||||
@@ -74,6 +72,8 @@ class SetOTPDialogFragment : DialogFragment() {
|
|||||||
private var totpTokenTypeAdapter: ArrayAdapter<OtpTokenType>? = null
|
private var totpTokenTypeAdapter: ArrayAdapter<OtpTokenType>? = null
|
||||||
private var hotpTokenTypeAdapter: ArrayAdapter<OtpTokenType>? = null
|
private var hotpTokenTypeAdapter: ArrayAdapter<OtpTokenType>? = null
|
||||||
private var otpAlgorithmAdapter: ArrayAdapter<TokenCalculator.HashAlgorithm>? = null
|
private var otpAlgorithmAdapter: ArrayAdapter<TokenCalculator.HashAlgorithm>? = null
|
||||||
|
private var mHotpTokenTypeArray: Array<OtpTokenType>? = null
|
||||||
|
private var mTotpTokenTypeArray: Array<OtpTokenType>? = null
|
||||||
|
|
||||||
private var mManualEvent = false
|
private var mManualEvent = false
|
||||||
private var mOnFocusChangeListener = View.OnFocusChangeListener { _, isFocus ->
|
private var mOnFocusChangeListener = View.OnFocusChangeListener { _, isFocus ->
|
||||||
@@ -134,6 +134,7 @@ class SetOTPDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
activity?.let { activity ->
|
activity?.let { activity ->
|
||||||
val root = activity.layoutInflater.inflate(R.layout.fragment_set_otp, null) as ViewGroup?
|
val root = activity.layoutInflater.inflate(R.layout.fragment_set_otp, null) as ViewGroup?
|
||||||
|
otpTypeMessage = root?.findViewById(R.id.setup_otp_type_message)
|
||||||
otpTypeSpinner = root?.findViewById(R.id.setup_otp_type)
|
otpTypeSpinner = root?.findViewById(R.id.setup_otp_type)
|
||||||
otpTokenTypeSpinner = root?.findViewById(R.id.setup_otp_token_type)
|
otpTokenTypeSpinner = root?.findViewById(R.id.setup_otp_token_type)
|
||||||
otpSecretContainer = root?.findViewById(R.id.setup_otp_secret_label)
|
otpSecretContainer = root?.findViewById(R.id.setup_otp_secret_label)
|
||||||
@@ -183,23 +184,23 @@ class SetOTPDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
// HOTP / TOTP Type selection
|
// HOTP / TOTP Type selection
|
||||||
val otpTypeArray = OtpType.values()
|
val otpTypeArray = OtpType.values()
|
||||||
otpTypeAdapter = ArrayAdapter<OtpType>(activity,
|
otpTypeAdapter = ArrayAdapter(activity,
|
||||||
android.R.layout.simple_spinner_item, otpTypeArray).apply {
|
android.R.layout.simple_spinner_item, otpTypeArray).apply {
|
||||||
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
}
|
}
|
||||||
otpTypeSpinner?.adapter = otpTypeAdapter
|
otpTypeSpinner?.adapter = otpTypeAdapter
|
||||||
|
|
||||||
// Otp Token type selection
|
// Otp Token type selection
|
||||||
val hotpTokenTypeArray = OtpTokenType.getHotpTokenTypeValues()
|
mHotpTokenTypeArray = OtpTokenType.getHotpTokenTypeValues()
|
||||||
hotpTokenTypeAdapter = ArrayAdapter(activity,
|
hotpTokenTypeAdapter = ArrayAdapter(activity,
|
||||||
android.R.layout.simple_spinner_item, hotpTokenTypeArray).apply {
|
android.R.layout.simple_spinner_item, mHotpTokenTypeArray!!).apply {
|
||||||
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
}
|
}
|
||||||
// Proprietary only on closed and full version
|
// Proprietary only on closed and full version
|
||||||
val totpTokenTypeArray = OtpTokenType.getTotpTokenTypeValues(
|
mTotpTokenTypeArray = OtpTokenType.getTotpTokenTypeValues(
|
||||||
BuildConfig.CLOSED_STORE && BuildConfig.FULL_VERSION)
|
BuildConfig.CLOSED_STORE && BuildConfig.FULL_VERSION)
|
||||||
totpTokenTypeAdapter = ArrayAdapter(activity,
|
totpTokenTypeAdapter = ArrayAdapter(activity,
|
||||||
android.R.layout.simple_spinner_item, totpTokenTypeArray).apply {
|
android.R.layout.simple_spinner_item, mTotpTokenTypeArray!!).apply {
|
||||||
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
}
|
}
|
||||||
otpTokenTypeAdapter = hotpTokenTypeAdapter
|
otpTokenTypeAdapter = hotpTokenTypeAdapter
|
||||||
@@ -207,7 +208,7 @@ class SetOTPDialogFragment : DialogFragment() {
|
|||||||
|
|
||||||
// OTP Algorithm
|
// OTP Algorithm
|
||||||
val otpAlgorithmArray = TokenCalculator.HashAlgorithm.values()
|
val otpAlgorithmArray = TokenCalculator.HashAlgorithm.values()
|
||||||
otpAlgorithmAdapter = ArrayAdapter<TokenCalculator.HashAlgorithm>(activity,
|
otpAlgorithmAdapter = ArrayAdapter(activity,
|
||||||
android.R.layout.simple_spinner_item, otpAlgorithmArray).apply {
|
android.R.layout.simple_spinner_item, otpAlgorithmArray).apply {
|
||||||
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
}
|
}
|
||||||
@@ -372,24 +373,40 @@ class SetOTPDialogFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun upgradeTokenType() {
|
private fun upgradeTokenType() {
|
||||||
|
val tokenType = mOtpElement.tokenType
|
||||||
when (mOtpElement.type) {
|
when (mOtpElement.type) {
|
||||||
OtpType.HOTP -> {
|
OtpType.HOTP -> {
|
||||||
otpPeriodContainer?.visibility = View.GONE
|
otpPeriodContainer?.visibility = View.GONE
|
||||||
otpCounterContainer?.visibility = View.VISIBLE
|
otpCounterContainer?.visibility = View.VISIBLE
|
||||||
otpTokenTypeSpinner?.adapter = hotpTokenTypeAdapter
|
otpTokenTypeSpinner?.adapter = hotpTokenTypeAdapter
|
||||||
otpTokenTypeSpinner?.setSelection(OtpTokenType
|
mHotpTokenTypeArray?.let { otpTokenTypeArray ->
|
||||||
.getHotpTokenTypeValues().indexOf(mOtpElement.tokenType))
|
defineOtpTokenTypeSpinner(otpTokenTypeArray, tokenType, OtpTokenType.RFC4226)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
OtpType.TOTP -> {
|
OtpType.TOTP -> {
|
||||||
otpPeriodContainer?.visibility = View.VISIBLE
|
otpPeriodContainer?.visibility = View.VISIBLE
|
||||||
otpCounterContainer?.visibility = View.GONE
|
otpCounterContainer?.visibility = View.GONE
|
||||||
otpTokenTypeSpinner?.adapter = totpTokenTypeAdapter
|
otpTokenTypeSpinner?.adapter = totpTokenTypeAdapter
|
||||||
otpTokenTypeSpinner?.setSelection(OtpTokenType
|
mTotpTokenTypeArray?.let { otpTokenTypeArray ->
|
||||||
.getTotpTokenTypeValues().indexOf(mOtpElement.tokenType))
|
defineOtpTokenTypeSpinner(otpTokenTypeArray, tokenType, OtpTokenType.RFC6238)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun defineOtpTokenTypeSpinner(otpTokenTypeArray: Array<OtpTokenType>,
|
||||||
|
tokenType: OtpTokenType,
|
||||||
|
defaultTokenType: OtpTokenType) {
|
||||||
|
val formTokenType = if (otpTokenTypeArray.contains(tokenType)) {
|
||||||
|
otpTypeMessage?.visibility = View.GONE
|
||||||
|
tokenType
|
||||||
|
} else {
|
||||||
|
otpTypeMessage?.visibility = View.VISIBLE
|
||||||
|
defaultTokenType
|
||||||
|
}
|
||||||
|
otpTokenTypeSpinner?.setSelection(otpTokenTypeArray.indexOf(formTokenType))
|
||||||
|
}
|
||||||
|
|
||||||
private fun upgradeParameters() {
|
private fun upgradeParameters() {
|
||||||
otpAlgorithmSpinner?.setSelection(TokenCalculator.HashAlgorithm.values()
|
otpAlgorithmSpinner?.setSelection(TokenCalculator.HashAlgorithm.values()
|
||||||
.indexOf(mOtpElement.algorithm))
|
.indexOf(mOtpElement.algorithm))
|
||||||
|
|||||||
@@ -60,6 +60,9 @@ abstract class LockingActivity : SpecialModeActivity() {
|
|||||||
private set
|
private set
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
|
||||||
|
mProgressDatabaseTaskProvider = ProgressDatabaseTaskProvider(this)
|
||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
if (savedInstanceState != null
|
if (savedInstanceState != null
|
||||||
@@ -84,8 +87,6 @@ abstract class LockingActivity : SpecialModeActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mExitLock = false
|
mExitLock = false
|
||||||
|
|
||||||
mProgressDatabaseTaskProvider = ProgressDatabaseTaskProvider(this)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
|||||||
@@ -34,7 +34,12 @@ class IOActionTask<T>(
|
|||||||
mainScope.launch {
|
mainScope.launch {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
val asyncResult: Deferred<T?> = async {
|
val asyncResult: Deferred<T?> = async {
|
||||||
action.invoke()
|
try {
|
||||||
|
action.invoke()
|
||||||
|
} catch (e: Exception) {
|
||||||
|
e.printStackTrace()
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
afterActionDatabaseListener?.invoke(asyncResult.await())
|
afterActionDatabaseListener?.invoke(asyncResult.await())
|
||||||
|
|||||||
@@ -64,8 +64,12 @@ object AutofillHelper {
|
|||||||
|
|
||||||
fun retrieveAutofillComponent(intent: Intent?): AutofillComponent? {
|
fun retrieveAutofillComponent(intent: Intent?): AutofillComponent? {
|
||||||
intent?.getParcelableExtra<AssistStructure?>(EXTRA_ASSIST_STRUCTURE)?.let { assistStructure ->
|
intent?.getParcelableExtra<AssistStructure?>(EXTRA_ASSIST_STRUCTURE)?.let { assistStructure ->
|
||||||
return AutofillComponent(assistStructure,
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
intent.getParcelableExtra(EXTRA_INLINE_SUGGESTIONS_REQUEST))
|
AutofillComponent(assistStructure,
|
||||||
|
intent.getParcelableExtra(EXTRA_INLINE_SUGGESTIONS_REQUEST))
|
||||||
|
} else {
|
||||||
|
AutofillComponent(assistStructure, null)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@@ -205,10 +209,14 @@ object AutofillHelper {
|
|||||||
activity.intent?.getParcelableExtra<AssistStructure>(EXTRA_ASSIST_STRUCTURE)?.let { structure ->
|
activity.intent?.getParcelableExtra<AssistStructure>(EXTRA_ASSIST_STRUCTURE)?.let { structure ->
|
||||||
StructureParser(structure).parse()?.let { result ->
|
StructureParser(structure).parse()?.let { result ->
|
||||||
// New Response
|
// New Response
|
||||||
val inlineSuggestionsRequest = activity.intent?.getParcelableExtra<InlineSuggestionsRequest?>(EXTRA_INLINE_SUGGESTIONS_REQUEST)
|
val response = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
val response = buildResponse(activity, entriesInfo, result, inlineSuggestionsRequest)
|
val inlineSuggestionsRequest = activity.intent?.getParcelableExtra<InlineSuggestionsRequest?>(EXTRA_INLINE_SUGGESTIONS_REQUEST)
|
||||||
if (inlineSuggestionsRequest != null) {
|
if (inlineSuggestionsRequest != null) {
|
||||||
Toast.makeText(activity.applicationContext, R.string.autofill_inline_suggestions_keyboard, Toast.LENGTH_SHORT).show()
|
Toast.makeText(activity.applicationContext, R.string.autofill_inline_suggestions_keyboard, Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
buildResponse(activity, entriesInfo, result, inlineSuggestionsRequest)
|
||||||
|
} else {
|
||||||
|
buildResponse(activity, entriesInfo, result, null)
|
||||||
}
|
}
|
||||||
val mReplyIntent = Intent()
|
val mReplyIntent = Intent()
|
||||||
Log.d(activity.javaClass.name, "Successed Autofill auth.")
|
Log.d(activity.javaClass.name, "Successed Autofill auth.")
|
||||||
|
|||||||
@@ -174,9 +174,9 @@ class KeeAutofillService : AutofillService() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Build inline presentation
|
// Build inline presentation
|
||||||
var inlinePresentation: InlinePresentation? = null
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
|
||||||
&& autofillInlineSuggestionsEnabled) {
|
&& autofillInlineSuggestionsEnabled) {
|
||||||
|
var inlinePresentation: InlinePresentation? = null
|
||||||
inlineSuggestionsRequest?.let {
|
inlineSuggestionsRequest?.let {
|
||||||
val inlinePresentationSpecs = inlineSuggestionsRequest.inlinePresentationSpecs
|
val inlinePresentationSpecs = inlineSuggestionsRequest.inlinePresentationSpecs
|
||||||
if (inlineSuggestionsRequest.maxSuggestionCount > 0
|
if (inlineSuggestionsRequest.maxSuggestionCount > 0
|
||||||
@@ -203,14 +203,10 @@ class KeeAutofillService : AutofillService() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// Build response
|
||||||
|
|
||||||
// Build response
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
|
||||||
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)
|
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)
|
||||||
} else {
|
|
||||||
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock)
|
|
||||||
}
|
}
|
||||||
|
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock)
|
||||||
callback.onSuccess(responseBuilder.build())
|
callback.onSuccess(responseBuilder.build())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,8 +162,8 @@ class AdvancedUnlockFragment: StylishFragment(), AdvancedUnlockManager.AdvancedU
|
|||||||
disconnect()
|
disconnect()
|
||||||
}
|
}
|
||||||
} ?: run {
|
} ?: run {
|
||||||
connect(databaseUri)
|
|
||||||
this.mAutoOpenPrompt = autoOpenPrompt
|
this.mAutoOpenPrompt = autoOpenPrompt
|
||||||
|
connect(databaseUri)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
disconnect()
|
disconnect()
|
||||||
|
|||||||
@@ -43,11 +43,11 @@ import com.kunzisoft.keepass.database.element.security.MemoryProtectionConfig
|
|||||||
import com.kunzisoft.keepass.database.exception.UnknownKDF
|
import com.kunzisoft.keepass.database.exception.UnknownKDF
|
||||||
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_32_3
|
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_32_3
|
||||||
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_32_4
|
import com.kunzisoft.keepass.database.file.DatabaseHeaderKDBX.Companion.FILE_VERSION_32_4
|
||||||
import com.kunzisoft.keepass.utils.StringUtil.hexStringToByteArray
|
|
||||||
import com.kunzisoft.keepass.utils.StringUtil.removeSpaceChars
|
import com.kunzisoft.keepass.utils.StringUtil.removeSpaceChars
|
||||||
import com.kunzisoft.keepass.utils.StringUtil.toHexString
|
import com.kunzisoft.keepass.utils.StringUtil.toHexString
|
||||||
import com.kunzisoft.keepass.utils.UnsignedInt
|
import com.kunzisoft.keepass.utils.UnsignedInt
|
||||||
import com.kunzisoft.keepass.utils.VariantDictionary
|
import com.kunzisoft.keepass.utils.VariantDictionary
|
||||||
|
import org.apache.commons.codec.binary.Hex
|
||||||
import org.w3c.dom.Node
|
import org.w3c.dom.Node
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
@@ -445,16 +445,19 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
|||||||
when (xmlKeyFileVersion) {
|
when (xmlKeyFileVersion) {
|
||||||
1F -> {
|
1F -> {
|
||||||
// No hash in KeyFile XML version 1
|
// No hash in KeyFile XML version 1
|
||||||
|
return Base64.decode(dataString, BASE_64_FLAG)
|
||||||
}
|
}
|
||||||
2F -> {
|
2F -> {
|
||||||
if (hashString != null
|
return if (hashString != null
|
||||||
&& checkKeyFileHash(dataString, hashString))
|
&& checkKeyFileHash(dataString, hashString)) {
|
||||||
Log.i(TAG, "Successful key file hash check.")
|
Log.i(TAG, "Successful key file hash check.")
|
||||||
else
|
Hex.decodeHex(dataString.toCharArray())
|
||||||
|
} else {
|
||||||
Log.e(TAG, "Unable to check the hash of the key file.")
|
Log.e(TAG, "Unable to check the hash of the key file.")
|
||||||
|
null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Base64.decode(dataString, BASE_64_FLAG)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -474,7 +477,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
|||||||
digest = MessageDigest.getInstance("SHA-256")
|
digest = MessageDigest.getInstance("SHA-256")
|
||||||
digest?.reset()
|
digest?.reset()
|
||||||
// hexadecimal encoding of the first 4 bytes of the SHA-256 hash of the key.
|
// hexadecimal encoding of the first 4 bytes of the SHA-256 hash of the key.
|
||||||
val dataDigest = digest.digest(data.hexStringToByteArray())
|
val dataDigest = digest.digest(Hex.decodeHex(data.toCharArray()))
|
||||||
.copyOfRange(0, 4)
|
.copyOfRange(0, 4)
|
||||||
.toHexString()
|
.toHexString()
|
||||||
success = dataDigest == hash
|
success = dataDigest == hash
|
||||||
@@ -698,8 +701,8 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
|||||||
private const val DEFAULT_HISTORY_MAX_SIZE = (6 * 1024 * 1024).toLong() // -1 unlimited
|
private const val DEFAULT_HISTORY_MAX_SIZE = (6 * 1024 * 1024).toLong() // -1 unlimited
|
||||||
|
|
||||||
private const val XML_NODE_ROOT_NAME = "KeyFile"
|
private const val XML_NODE_ROOT_NAME = "KeyFile"
|
||||||
private const val XML_NODE_META_NAME = "Meta";
|
private const val XML_NODE_META_NAME = "Meta"
|
||||||
private const val XML_NODE_VERSION_NAME = "Version";
|
private const val XML_NODE_VERSION_NAME = "Version"
|
||||||
private const val XML_NODE_KEY_NAME = "Key"
|
private const val XML_NODE_KEY_NAME = "Key"
|
||||||
private const val XML_NODE_DATA_NAME = "Data"
|
private const val XML_NODE_DATA_NAME = "Data"
|
||||||
private const val XML_ATTRIBUTE_DATA_HASH = "Hash"
|
private const val XML_ATTRIBUTE_DATA_HASH = "Hash"
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import com.kunzisoft.keepass.database.element.node.NodeId
|
|||||||
import com.kunzisoft.keepass.database.element.node.Type
|
import com.kunzisoft.keepass.database.element.node.Type
|
||||||
import com.kunzisoft.keepass.database.element.security.EncryptionAlgorithm
|
import com.kunzisoft.keepass.database.element.security.EncryptionAlgorithm
|
||||||
import com.kunzisoft.keepass.database.exception.DuplicateUuidDatabaseException
|
import com.kunzisoft.keepass.database.exception.DuplicateUuidDatabaseException
|
||||||
|
import org.apache.commons.codec.binary.Hex
|
||||||
import java.io.ByteArrayInputStream
|
import java.io.ByteArrayInputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
@@ -129,17 +130,22 @@ abstract class DatabaseVersioned<
|
|||||||
|
|
||||||
val keyData = keyInputStream.readBytes()
|
val keyData = keyInputStream.readBytes()
|
||||||
|
|
||||||
// Check 32 bits key file
|
|
||||||
if (keyData.size == 32) {
|
|
||||||
return keyData
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check XML key file
|
// Check XML key file
|
||||||
val xmlKeyByteArray = loadXmlKeyFile(ByteArrayInputStream(keyData))
|
val xmlKeyByteArray = loadXmlKeyFile(ByteArrayInputStream(keyData))
|
||||||
if (xmlKeyByteArray != null) {
|
if (xmlKeyByteArray != null) {
|
||||||
return xmlKeyByteArray
|
return xmlKeyByteArray
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check 32 bytes key file
|
||||||
|
when (keyData.size) {
|
||||||
|
32 -> return keyData
|
||||||
|
64 -> try {
|
||||||
|
return Hex.decodeHex(String(keyData).toCharArray())
|
||||||
|
} catch (ignoredException: Exception) {
|
||||||
|
// Key is not base 64, treat it as binary data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Hash file as binary data
|
// Hash file as binary data
|
||||||
try {
|
try {
|
||||||
return MessageDigest.getInstance("SHA-256").digest(keyData)
|
return MessageDigest.getInstance("SHA-256").digest(keyData)
|
||||||
|
|||||||
@@ -42,6 +42,26 @@ data class SnapFileDatabaseInfo(var fileUri: Uri?,
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (other !is SnapFileDatabaseInfo) return false
|
||||||
|
|
||||||
|
if (fileUri != other.fileUri) return false
|
||||||
|
if (exists != other.exists) return false
|
||||||
|
if (lastModification != other.lastModification) return false
|
||||||
|
if (size != other.size) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = fileUri?.hashCode() ?: 0
|
||||||
|
result = 31 * result + exists.hashCode()
|
||||||
|
result = 31 * result + (lastModification?.hashCode() ?: 0)
|
||||||
|
result = 31 * result + (size?.hashCode() ?: 0)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
companion object CREATOR : Parcelable.Creator<SnapFileDatabaseInfo> {
|
companion object CREATOR : Parcelable.Creator<SnapFileDatabaseInfo> {
|
||||||
override fun createFromParcel(parcel: Parcel): SnapFileDatabaseInfo {
|
override fun createFromParcel(parcel: Parcel): SnapFileDatabaseInfo {
|
||||||
return SnapFileDatabaseInfo(parcel)
|
return SnapFileDatabaseInfo(parcel)
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
|||||||
private var mAllowFinishAction = AtomicBoolean()
|
private var mAllowFinishAction = AtomicBoolean()
|
||||||
private var mActionRunning = false
|
private var mActionRunning = false
|
||||||
|
|
||||||
private var mSnapFileDatabaseInfo: SnapFileDatabaseInfo? = null
|
|
||||||
private var mDatabaseInfoListeners = LinkedList<DatabaseInfoListener>()
|
private var mDatabaseInfoListeners = LinkedList<DatabaseInfoListener>()
|
||||||
|
|
||||||
private var mIconId: Int = R.drawable.notification_ic_database_load
|
private var mIconId: Int = R.drawable.notification_ic_database_load
|
||||||
@@ -130,27 +129,49 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun checkDatabaseInfo() {
|
fun checkDatabaseInfo() {
|
||||||
mDatabase.fileUri?.let {
|
try {
|
||||||
val previousDatabaseInfo = mSnapFileDatabaseInfo
|
mDatabase.fileUri?.let {
|
||||||
val lastFileDatabaseInfo = SnapFileDatabaseInfo.fromFileDatabaseInfo(
|
val previousDatabaseInfo = mSnapFileDatabaseInfo
|
||||||
FileDatabaseInfo(applicationContext, it))
|
val lastFileDatabaseInfo = SnapFileDatabaseInfo.fromFileDatabaseInfo(
|
||||||
if (previousDatabaseInfo != null) {
|
FileDatabaseInfo(applicationContext, it))
|
||||||
if (previousDatabaseInfo != lastFileDatabaseInfo) {
|
|
||||||
|
val oldDatabaseModification = previousDatabaseInfo?.lastModification
|
||||||
|
val newDatabaseModification = lastFileDatabaseInfo.lastModification
|
||||||
|
|
||||||
|
val conditionExists = previousDatabaseInfo != null
|
||||||
|
&& previousDatabaseInfo.exists != lastFileDatabaseInfo.exists
|
||||||
|
// To prevent dialog opening too often
|
||||||
|
val conditionLastModification = (oldDatabaseModification != null && newDatabaseModification != null
|
||||||
|
&& oldDatabaseModification < newDatabaseModification
|
||||||
|
&& mLastLocalSaveTime + 5000 < newDatabaseModification)
|
||||||
|
|
||||||
|
if (conditionExists || conditionLastModification) {
|
||||||
|
// Show the dialog only if it's real new info and not a delay after a save
|
||||||
Log.i(TAG, "Database file modified " +
|
Log.i(TAG, "Database file modified " +
|
||||||
"$previousDatabaseInfo != $lastFileDatabaseInfo ")
|
"$previousDatabaseInfo != $lastFileDatabaseInfo ")
|
||||||
// Call listener to indicate a change in database info
|
// Call listener to indicate a change in database info
|
||||||
mDatabaseInfoListeners.forEach { listener ->
|
if (previousDatabaseInfo != null) {
|
||||||
listener.onDatabaseInfoChanged(previousDatabaseInfo, lastFileDatabaseInfo)
|
mDatabaseInfoListeners.forEach { listener ->
|
||||||
|
listener.onDatabaseInfoChanged(previousDatabaseInfo, lastFileDatabaseInfo)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
mSnapFileDatabaseInfo = lastFileDatabaseInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Unable to check database info", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveDatabaseInfo() {
|
fun saveDatabaseInfo() {
|
||||||
mDatabase.fileUri?.let {
|
try {
|
||||||
mSnapFileDatabaseInfo = SnapFileDatabaseInfo.fromFileDatabaseInfo(
|
mDatabase.fileUri?.let {
|
||||||
FileDatabaseInfo(applicationContext, it))
|
mSnapFileDatabaseInfo = SnapFileDatabaseInfo.fromFileDatabaseInfo(
|
||||||
|
FileDatabaseInfo(applicationContext, it))
|
||||||
|
Log.i(TAG, "Database file saved $mSnapFileDatabaseInfo")
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e(TAG, "Unable to check database info", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,9 +256,21 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
|||||||
actionTaskListener.onStopAction(intentAction!!, result)
|
actionTaskListener.onStopAction(intentAction!!, result)
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
// Save the database info before performing action
|
||||||
|
if (intentAction == ACTION_DATABASE_LOAD_TASK) {
|
||||||
|
saveDatabaseInfo()
|
||||||
|
}
|
||||||
|
// Save the database info after performing save action
|
||||||
|
if (intentAction == ACTION_DATABASE_SAVE
|
||||||
|
|| intent?.getBooleanExtra(SAVE_DATABASE_KEY, false) == true) {
|
||||||
|
mDatabase.fileUri?.let {
|
||||||
|
val newSnapFileDatabaseInfo = SnapFileDatabaseInfo.fromFileDatabaseInfo(
|
||||||
|
FileDatabaseInfo(applicationContext, it))
|
||||||
|
mLastLocalSaveTime = System.currentTimeMillis()
|
||||||
|
mSnapFileDatabaseInfo = newSnapFileDatabaseInfo
|
||||||
|
}
|
||||||
|
}
|
||||||
removeIntentData(intent)
|
removeIntentData(intent)
|
||||||
// Save the database info after performing action
|
|
||||||
saveDatabaseInfo()
|
|
||||||
TimeoutHelper.releaseTemporarilyDisableTimeout()
|
TimeoutHelper.releaseTemporarilyDisableTimeout()
|
||||||
if (TimeoutHelper.checkTimeAndLockIfTimeout(this@DatabaseTaskNotificationService)) {
|
if (TimeoutHelper.checkTimeAndLockIfTimeout(this@DatabaseTaskNotificationService)) {
|
||||||
if (!mDatabase.loaded) {
|
if (!mDatabase.loaded) {
|
||||||
@@ -884,6 +917,9 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
|||||||
const val OLD_ELEMENT_KEY = "OLD_ELEMENT_KEY" // Warning type of this thing change every time
|
const val OLD_ELEMENT_KEY = "OLD_ELEMENT_KEY" // Warning type of this thing change every time
|
||||||
const val NEW_ELEMENT_KEY = "NEW_ELEMENT_KEY" // Warning type of this thing change every time
|
const val NEW_ELEMENT_KEY = "NEW_ELEMENT_KEY" // Warning type of this thing change every time
|
||||||
|
|
||||||
|
private var mSnapFileDatabaseInfo: SnapFileDatabaseInfo? = null
|
||||||
|
private var mLastLocalSaveTime: Long = 0
|
||||||
|
|
||||||
fun getListNodesFromBundle(database: Database, bundle: Bundle): List<Node> {
|
fun getListNodesFromBundle(database: Database, bundle: Bundle): List<Node> {
|
||||||
val nodesAction = ArrayList<Node>()
|
val nodesAction = ArrayList<Node>()
|
||||||
bundle.getParcelableArrayList<NodeId<*>>(GROUPS_ID_KEY)?.forEach {
|
bundle.getParcelableArrayList<NodeId<*>>(GROUPS_ID_KEY)?.forEach {
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ data class OtpElement(var otpModel: OtpModel = OtpModel()) {
|
|||||||
@Throws(IllegalArgumentException::class)
|
@Throws(IllegalArgumentException::class)
|
||||||
fun setHexSecret(secret: String) {
|
fun setHexSecret(secret: String) {
|
||||||
if (secret.isNotEmpty())
|
if (secret.isNotEmpty())
|
||||||
otpModel.secret = Hex.decodeHex(secret)
|
otpModel.secret = Hex.decodeHex(secret.toCharArray())
|
||||||
else
|
else
|
||||||
throw IllegalArgumentException()
|
throw IllegalArgumentException()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -386,7 +386,13 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
|
|||||||
}
|
}
|
||||||
if (styleEnabled) {
|
if (styleEnabled) {
|
||||||
Stylish.assignStyle(styleIdString)
|
Stylish.assignStyle(styleIdString)
|
||||||
activity.recreate()
|
// Relaunch the current activity to redraw theme
|
||||||
|
(activity as? SettingsActivity?)?.apply {
|
||||||
|
keepCurrentScreen()
|
||||||
|
startActivity(intent)
|
||||||
|
finish()
|
||||||
|
activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
styleEnabled
|
styleEnabled
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
private var mEncryptionAlgorithmPref: DialogListExplanationPreference? = null
|
private var mEncryptionAlgorithmPref: DialogListExplanationPreference? = null
|
||||||
private var mKeyDerivationPref: DialogListExplanationPreference? = null
|
private var mKeyDerivationPref: DialogListExplanationPreference? = null
|
||||||
private var mRoundPref: InputKdfNumberPreference? = null
|
private var mRoundPref: InputKdfNumberPreference? = null
|
||||||
private var mMemoryPref: InputKdfNumberPreference? = null
|
private var mMemoryPref: InputKdfSizePreference? = null
|
||||||
private var mParallelismPref: InputKdfNumberPreference? = null
|
private var mParallelismPref: InputKdfNumberPreference? = null
|
||||||
|
|
||||||
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
@@ -231,7 +231,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Memory Usage
|
// Memory Usage
|
||||||
mMemoryPref = findPreference<InputKdfNumberPreference>(getString(R.string.memory_usage_key))?.apply {
|
mMemoryPref = findPreference<InputKdfSizePreference>(getString(R.string.memory_usage_key))?.apply {
|
||||||
summary = mDatabase.memoryUsage.toString()
|
summary = mDatabase.memoryUsage.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -553,7 +553,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
|
|||||||
true
|
true
|
||||||
}
|
}
|
||||||
R.id.menu_reload_database -> {
|
R.id.menu_reload_database -> {
|
||||||
settingActivity?.mProgressDatabaseTaskProvider?.startDatabaseReload(false)
|
settingActivity?.apply {
|
||||||
|
keepCurrentScreen()
|
||||||
|
mProgressDatabaseTaskProvider?.startDatabaseReload(false)
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,9 +35,13 @@ abstract class NestedSettingsFragment : PreferenceFragmentCompat() {
|
|||||||
APPLICATION, FORM_FILLING, ADVANCED_UNLOCK, APPEARANCE, DATABASE, DATABASE_SECURITY, DATABASE_MASTER_KEY
|
APPLICATION, FORM_FILLING, ADVANCED_UNLOCK, APPEARANCE, DATABASE, DATABASE_SECURITY, DATABASE_MASTER_KEY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getScreen(): Screen {
|
||||||
|
return Screen.values()[requireArguments().getInt(TAG_KEY)]
|
||||||
|
}
|
||||||
|
|
||||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||||
onCreateScreenPreference(
|
onCreateScreenPreference(
|
||||||
Screen.values()[requireArguments().getInt(TAG_KEY)],
|
getScreen(),
|
||||||
savedInstanceState,
|
savedInstanceState,
|
||||||
rootKey)
|
rootKey)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,6 +117,8 @@ open class SettingsActivity
|
|||||||
intent.extras?.getString(FRAGMENT_ARG)?.let { fragmentScreenName ->
|
intent.extras?.getString(FRAGMENT_ARG)?.let { fragmentScreenName ->
|
||||||
onNestedPreferenceSelected(NestedSettingsFragment.Screen.valueOf(fragmentScreenName), true)
|
onNestedPreferenceSelected(NestedSettingsFragment.Screen.valueOf(fragmentScreenName), true)
|
||||||
}
|
}
|
||||||
|
// Eat state
|
||||||
|
intent.removeExtra(FRAGMENT_ARG)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,11 +226,19 @@ open class SettingsActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
toolbar?.title = NestedSettingsFragment.retrieveTitle(resources, key)
|
toolbar?.title = NestedSettingsFragment.retrieveTitle(resources, key)
|
||||||
// To reload the current screen
|
|
||||||
intent.putExtra(FRAGMENT_ARG, key.name)
|
|
||||||
hideOrShowLockButton(key)
|
hideOrShowLockButton(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To keep the current screen when activity is reloaded
|
||||||
|
*/
|
||||||
|
fun keepCurrentScreen() {
|
||||||
|
(supportFragmentManager.findFragmentByTag(TAG_NESTED) as? NestedSettingsFragment?)
|
||||||
|
?.getScreen()?.let { fragmentKey ->
|
||||||
|
intent.putExtra(FRAGMENT_ARG, fragmentKey.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onNestedPreferenceSelected(key: NestedSettingsFragment.Screen, reload: Boolean) {
|
override fun onNestedPreferenceSelected(key: NestedSettingsFragment.Screen, reload: Boolean) {
|
||||||
if (mTimeoutEnable)
|
if (mTimeoutEnable)
|
||||||
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(this) {
|
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(this) {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import androidx.preference.DialogPreference
|
|||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.crypto.keyDerivation.KdfEngine
|
import com.kunzisoft.keepass.crypto.keyDerivation.KdfEngine
|
||||||
|
|
||||||
class InputKdfNumberPreference @JvmOverloads constructor(context: Context,
|
open class InputKdfNumberPreference @JvmOverloads constructor(context: Context,
|
||||||
attrs: AttributeSet? = null,
|
attrs: AttributeSet? = null,
|
||||||
defStyleAttr: Int = R.attr.dialogPreferenceStyle,
|
defStyleAttr: Int = R.attr.dialogPreferenceStyle,
|
||||||
defStyleRes: Int = defStyleAttr)
|
defStyleRes: Int = defStyleAttr)
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 Jeremy Jamet / Kunzisoft.
|
||||||
|
*
|
||||||
|
* This file is part of KeePassDX.
|
||||||
|
*
|
||||||
|
* KeePassDX is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* KeePassDX is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.kunzisoft.keepass.settings.preference
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.utils.DataByte
|
||||||
|
|
||||||
|
class InputKdfSizePreference @JvmOverloads constructor(context: Context,
|
||||||
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = R.attr.dialogPreferenceStyle,
|
||||||
|
defStyleRes: Int = defStyleAttr)
|
||||||
|
: InputKdfNumberPreference(context, attrs, defStyleAttr, defStyleRes) {
|
||||||
|
|
||||||
|
override fun setSummary(summary: CharSequence) {
|
||||||
|
if (summary == UNKNOWN_VALUE_STRING) {
|
||||||
|
super.setSummary("")
|
||||||
|
} else {
|
||||||
|
var summaryString = summary
|
||||||
|
try {
|
||||||
|
val memorySize = summary.toString().toLong()
|
||||||
|
summaryString = if (memorySize > 0) {
|
||||||
|
// To convert bytes to mebibytes
|
||||||
|
DataByte(memorySize, DataByte.ByteFormat.BYTE)
|
||||||
|
.toBetterByteFormat().toString(context)
|
||||||
|
} else {
|
||||||
|
memorySize.toString()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
} finally {
|
||||||
|
super.setSummary(summaryString)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,7 +36,7 @@ open class InputNumberPreference @JvmOverloads constructor(context: Context,
|
|||||||
|
|
||||||
override fun setSummary(summary: CharSequence) {
|
override fun setSummary(summary: CharSequence) {
|
||||||
if (summary == INFINITE_VALUE_STRING) {
|
if (summary == INFINITE_VALUE_STRING) {
|
||||||
super.setSummary("")
|
super.setSummary("∞")
|
||||||
} else {
|
} else {
|
||||||
super.setSummary(summary)
|
super.setSummary(summary)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2019 Jeremy Jamet / Kunzisoft.
|
||||||
|
*
|
||||||
|
* This file is part of KeePassDX.
|
||||||
|
*
|
||||||
|
* KeePassDX is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* KeePassDX is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.kunzisoft.keepass.settings.preference
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.utils.DataByte
|
||||||
|
|
||||||
|
open class InputSizePreference @JvmOverloads constructor(context: Context,
|
||||||
|
attrs: AttributeSet? = null,
|
||||||
|
defStyleAttr: Int = R.attr.dialogPreferenceStyle,
|
||||||
|
defStyleRes: Int = defStyleAttr)
|
||||||
|
: InputNumberPreference(context, attrs, defStyleAttr, defStyleRes) {
|
||||||
|
|
||||||
|
override fun setSummary(summary: CharSequence) {
|
||||||
|
var summaryString = summary
|
||||||
|
try {
|
||||||
|
val memorySize = summary.toString().toLong()
|
||||||
|
summaryString = if (memorySize >= 0) {
|
||||||
|
// To convert bytes to mebibytes
|
||||||
|
DataByte(memorySize, DataByte.ByteFormat.BYTE)
|
||||||
|
.toBetterByteFormat().toString(context)
|
||||||
|
} else {
|
||||||
|
memorySize.toString()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
} finally {
|
||||||
|
super.setSummary(summaryString)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,6 +33,7 @@ import com.kunzisoft.keepass.R
|
|||||||
abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCompat() {
|
abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
private var inputTextView: EditText? = null
|
private var inputTextView: EditText? = null
|
||||||
|
private var textUnitView: TextView? = null
|
||||||
private var textExplanationView: TextView? = null
|
private var textExplanationView: TextView? = null
|
||||||
private var switchElementView: CompoundButton? = null
|
private var switchElementView: CompoundButton? = null
|
||||||
|
|
||||||
@@ -47,6 +48,14 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setInoutText(@StringRes inputTextId: Int) {
|
||||||
|
inputText = getString(inputTextId)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun showInputText(show: Boolean) {
|
||||||
|
inputTextView?.visibility = if (show) View.VISIBLE else View.GONE
|
||||||
|
}
|
||||||
|
|
||||||
fun setInputTextError(error: CharSequence) {
|
fun setInputTextError(error: CharSequence) {
|
||||||
this.inputTextView?.error = error
|
this.inputTextView?.error = error
|
||||||
}
|
}
|
||||||
@@ -55,6 +64,24 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
|
|||||||
this.mOnInputTextEditorActionListener = onEditorActionListener
|
this.mOnInputTextEditorActionListener = onEditorActionListener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var unitText: String?
|
||||||
|
get() = textUnitView?.text?.toString() ?: ""
|
||||||
|
set(unitText) {
|
||||||
|
textUnitView?.apply {
|
||||||
|
if (unitText != null && unitText.isNotEmpty()) {
|
||||||
|
text = unitText
|
||||||
|
visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
text = ""
|
||||||
|
visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setUnitText(@StringRes unitTextId: Int) {
|
||||||
|
unitText = getString(unitTextId)
|
||||||
|
}
|
||||||
|
|
||||||
var explanationText: String?
|
var explanationText: String?
|
||||||
get() = textExplanationView?.text?.toString() ?: ""
|
get() = textExplanationView?.text?.toString() ?: ""
|
||||||
set(explanationText) {
|
set(explanationText) {
|
||||||
@@ -69,6 +96,10 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setExplanationText(@StringRes explanationTextId: Int) {
|
||||||
|
explanationText = getString(explanationTextId)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
@@ -93,6 +124,8 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
textUnitView = view.findViewById(R.id.input_text_unit)
|
||||||
|
textUnitView?.visibility = View.GONE
|
||||||
textExplanationView = view.findViewById(R.id.explanation_text)
|
textExplanationView = view.findViewById(R.id.explanation_text)
|
||||||
textExplanationView?.visibility = View.GONE
|
textExplanationView?.visibility = View.GONE
|
||||||
switchElementView = view.findViewById(R.id.switch_element)
|
switchElementView = view.findViewById(R.id.switch_element)
|
||||||
@@ -113,18 +146,6 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setInoutText(@StringRes inputTextId: Int) {
|
|
||||||
inputText = getString(inputTextId)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun showInputText(show: Boolean) {
|
|
||||||
inputTextView?.visibility = if (show) View.VISIBLE else View.GONE
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setExplanationText(@StringRes explanationTextId: Int) {
|
|
||||||
explanationText = getString(explanationTextId)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setSwitchAction(onCheckedChange: ((isChecked: Boolean)-> Unit)?, defaultChecked: Boolean) {
|
fun setSwitchAction(onCheckedChange: ((isChecked: Boolean)-> Unit)?, defaultChecked: Boolean) {
|
||||||
switchElementView?.visibility = if (onCheckedChange == null) View.GONE else View.VISIBLE
|
switchElementView?.visibility = if (onCheckedChange == null) View.GONE else View.VISIBLE
|
||||||
switchElementView?.isChecked = defaultChecked
|
switchElementView?.isChecked = defaultChecked
|
||||||
|
|||||||
@@ -22,50 +22,76 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.utils.DataByte
|
||||||
|
|
||||||
class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
|
private var dataByte = DataByte(2L, DataByte.ByteFormat.MEBIBYTE)
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
setExplanationText(R.string.max_history_size_summary)
|
setExplanationText(R.string.max_history_size_summary)
|
||||||
database?.historyMaxSize?.let { maxItemsDatabase ->
|
database?.historyMaxSize?.let { maxItemsDatabase ->
|
||||||
inputText = maxItemsDatabase.toString()
|
dataByte = DataByte(maxItemsDatabase, DataByte.ByteFormat.BYTE)
|
||||||
|
.toBetterByteFormat()
|
||||||
|
inputText = dataByte.number.toString()
|
||||||
|
if (dataByte.number >= 0) {
|
||||||
|
setUnitText(dataByte.format.stringId)
|
||||||
|
} else {
|
||||||
|
unitText = null
|
||||||
|
}
|
||||||
|
|
||||||
setSwitchAction({ isChecked ->
|
setSwitchAction({ isChecked ->
|
||||||
inputText = if (!isChecked) {
|
if (!isChecked) {
|
||||||
INFINITE_MAX_HISTORY_SIZE.toString()
|
dataByte = INFINITE_MAX_HISTORY_SIZE_DATA_BYTE
|
||||||
} else
|
inputText = INFINITE_MAX_HISTORY_SIZE.toString()
|
||||||
DEFAULT_MAX_HISTORY_SIZE.toString()
|
unitText = null
|
||||||
|
} else {
|
||||||
|
dataByte = DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE
|
||||||
|
inputText = dataByte.number.toString()
|
||||||
|
setUnitText(dataByte.format.stringId)
|
||||||
|
}
|
||||||
showInputText(isChecked)
|
showInputText(isChecked)
|
||||||
}, maxItemsDatabase > INFINITE_MAX_HISTORY_SIZE)
|
}, maxItemsDatabase > INFINITE_MAX_HISTORY_SIZE)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(positiveResult: Boolean) {
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
database?.let { database ->
|
database?.let { database ->
|
||||||
var maxHistorySize: Long = try {
|
val maxHistorySize: Long = try {
|
||||||
inputText.toLong()
|
inputText.toLong()
|
||||||
} catch (e: NumberFormatException) {
|
} catch (e: NumberFormatException) {
|
||||||
DEFAULT_MAX_HISTORY_SIZE
|
DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE.toBytes()
|
||||||
}
|
}
|
||||||
if (maxHistorySize < INFINITE_MAX_HISTORY_SIZE) {
|
val numberOfBytes = if (maxHistorySize >= 0) {
|
||||||
maxHistorySize = INFINITE_MAX_HISTORY_SIZE
|
val dataByteConversion = DataByte(maxHistorySize, dataByte.format)
|
||||||
|
var bytes = dataByteConversion.toBytes()
|
||||||
|
if (bytes > Long.MAX_VALUE) {
|
||||||
|
bytes = Long.MAX_VALUE
|
||||||
|
}
|
||||||
|
bytes
|
||||||
|
} else {
|
||||||
|
INFINITE_MAX_HISTORY_SIZE
|
||||||
}
|
}
|
||||||
|
|
||||||
val oldMaxHistorySize = database.historyMaxSize
|
val oldMaxHistorySize = database.historyMaxSize
|
||||||
database.historyMaxSize = maxHistorySize
|
database.historyMaxSize = numberOfBytes
|
||||||
|
|
||||||
mProgressDatabaseTaskProvider?.startDatabaseSaveMaxHistorySize(oldMaxHistorySize, maxHistorySize, mDatabaseAutoSaveEnable)
|
mProgressDatabaseTaskProvider?.startDatabaseSaveMaxHistorySize(oldMaxHistorySize, numberOfBytes, mDatabaseAutoSaveEnable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
const val DEFAULT_MAX_HISTORY_SIZE = 134217728L
|
|
||||||
const val INFINITE_MAX_HISTORY_SIZE = -1L
|
const val INFINITE_MAX_HISTORY_SIZE = -1L
|
||||||
|
|
||||||
|
private val INFINITE_MAX_HISTORY_SIZE_DATA_BYTE = DataByte(INFINITE_MAX_HISTORY_SIZE, DataByte.ByteFormat.MEBIBYTE)
|
||||||
|
private val DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE = DataByte(6L, DataByte.ByteFormat.MEBIBYTE)
|
||||||
|
|
||||||
fun newInstance(key: String): MaxHistorySizePreferenceDialogFragmentCompat {
|
fun newInstance(key: String): MaxHistorySizePreferenceDialogFragmentCompat {
|
||||||
val fragment = MaxHistorySizePreferenceDialogFragmentCompat()
|
val fragment = MaxHistorySizePreferenceDialogFragmentCompat()
|
||||||
val bundle = Bundle(1)
|
val bundle = Bundle(1)
|
||||||
|
|||||||
@@ -22,33 +22,46 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
|
import com.kunzisoft.keepass.utils.DataByte
|
||||||
|
|
||||||
class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
|
||||||
|
|
||||||
|
private var dataByte = DataByte(MIN_MEMORY_USAGE, DataByte.ByteFormat.BYTE)
|
||||||
|
|
||||||
override fun onBindDialogView(view: View) {
|
override fun onBindDialogView(view: View) {
|
||||||
super.onBindDialogView(view)
|
super.onBindDialogView(view)
|
||||||
|
|
||||||
setExplanationText(R.string.memory_usage_explanation)
|
setExplanationText(R.string.memory_usage_explanation)
|
||||||
inputText = database?.memoryUsage?.toString()?: MIN_MEMORY_USAGE.toString()
|
|
||||||
|
val memoryBytes = database?.memoryUsage ?: MIN_MEMORY_USAGE
|
||||||
|
dataByte = DataByte(memoryBytes, DataByte.ByteFormat.BYTE)
|
||||||
|
.toBetterByteFormat()
|
||||||
|
inputText = dataByte.number.toString()
|
||||||
|
setUnitText(dataByte.format.stringId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDialogClosed(positiveResult: Boolean) {
|
override fun onDialogClosed(positiveResult: Boolean) {
|
||||||
if (positiveResult) {
|
if (positiveResult) {
|
||||||
database?.let { database ->
|
database?.let { database ->
|
||||||
var memoryUsage: Long = try {
|
var newMemoryUsage: Long = try {
|
||||||
inputText.toLong()
|
inputText.toLong()
|
||||||
} catch (e: NumberFormatException) {
|
} catch (e: NumberFormatException) {
|
||||||
MIN_MEMORY_USAGE
|
MIN_MEMORY_USAGE
|
||||||
}
|
}
|
||||||
if (memoryUsage < MIN_MEMORY_USAGE) {
|
if (newMemoryUsage < MIN_MEMORY_USAGE) {
|
||||||
memoryUsage = MIN_MEMORY_USAGE
|
newMemoryUsage = MIN_MEMORY_USAGE
|
||||||
|
}
|
||||||
|
// To transform in bytes
|
||||||
|
dataByte.number = newMemoryUsage
|
||||||
|
var numberOfBytes = dataByte.toBytes()
|
||||||
|
if (numberOfBytes > Long.MAX_VALUE) {
|
||||||
|
numberOfBytes = Long.MAX_VALUE
|
||||||
}
|
}
|
||||||
// TODO Max Memory
|
|
||||||
|
|
||||||
val oldMemoryUsage = database.memoryUsage
|
val oldMemoryUsage = database.memoryUsage
|
||||||
database.memoryUsage = memoryUsage
|
database.memoryUsage = numberOfBytes
|
||||||
|
|
||||||
mProgressDatabaseTaskProvider?.startDatabaseSaveMemoryUsage(oldMemoryUsage, memoryUsage, mDatabaseAutoSaveEnable)
|
mProgressDatabaseTaskProvider?.startDatabaseSaveMemoryUsage(oldMemoryUsage, numberOfBytes, mDatabaseAutoSaveEnable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
84
app/src/main/java/com/kunzisoft/keepass/utils/DataByte.kt
Normal file
84
app/src/main/java/com/kunzisoft/keepass/utils/DataByte.kt
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 Jeremy Jamet / Kunzisoft.
|
||||||
|
*
|
||||||
|
* This file is part of KeePassDX.
|
||||||
|
*
|
||||||
|
* KeePassDX is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* KeePassDX is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package com.kunzisoft.keepass.utils
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import androidx.annotation.StringRes
|
||||||
|
import com.kunzisoft.keepass.R
|
||||||
|
|
||||||
|
class DataByte(var number: Long, var format: ByteFormat) {
|
||||||
|
|
||||||
|
fun toBetterByteFormat(): DataByte {
|
||||||
|
return when (this.format) {
|
||||||
|
ByteFormat.BYTE -> {
|
||||||
|
when {
|
||||||
|
//this.number % GIBIBYTES == 0L -> {
|
||||||
|
// DataByte((this.number / GIBIBYTES), ByteFormat.GIBIBYTE)
|
||||||
|
//}
|
||||||
|
this.number % MEBIBYTES == 0L -> {
|
||||||
|
DataByte((this.number / MEBIBYTES), ByteFormat.MEBIBYTE)
|
||||||
|
}
|
||||||
|
this.number % KIBIBYTES == 0L -> {
|
||||||
|
DataByte((this.number / KIBIBYTES), ByteFormat.KIBIBYTE)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
DataByte(this.number, ByteFormat.BYTE)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
DataByte(toBytes(), ByteFormat.BYTE).toBetterByteFormat()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of bytes in current DataByte
|
||||||
|
*/
|
||||||
|
fun toBytes(): Long {
|
||||||
|
return when (this.format) {
|
||||||
|
ByteFormat.BYTE -> this.number
|
||||||
|
ByteFormat.KIBIBYTE -> this.number * KIBIBYTES
|
||||||
|
ByteFormat.MEBIBYTE -> this.number * MEBIBYTES
|
||||||
|
//ByteFormat.GIBIBYTE -> this.number * GIBIBYTES
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun toString(): String {
|
||||||
|
return "$number ${format.name}"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun toString(context: Context): String {
|
||||||
|
return "$number ${context.getString(format.stringId)}"
|
||||||
|
}
|
||||||
|
|
||||||
|
enum class ByteFormat(@StringRes var stringId: Int) {
|
||||||
|
BYTE(R.string.unit_byte),
|
||||||
|
KIBIBYTE(R.string.unit_kibibyte),
|
||||||
|
MEBIBYTE(R.string.unit_mebibyte)
|
||||||
|
//GIBIBYTE(R.string.unit_gibibyte)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val KIBIBYTES = 1024L
|
||||||
|
const val MEBIBYTES = 1048576L
|
||||||
|
const val GIBIBYTES = 1073741824L
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -10,17 +10,5 @@ object StringUtil {
|
|||||||
return this.replace("[\\r|\\n|\\t|\\s|\\u00A0]+".toRegex(), "")
|
return this.replace("[\\r|\\n|\\t|\\s|\\u00A0]+".toRegex(), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun String.hexStringToByteArray(): ByteArray {
|
|
||||||
val len = this.length
|
|
||||||
val data = ByteArray(len / 2)
|
|
||||||
var i = 0
|
|
||||||
while (i < len) {
|
|
||||||
data[i / 2] = ((Character.digit(this[i], 16) shl 4)
|
|
||||||
+ Character.digit(this[i + 1], 16)).toByte()
|
|
||||||
i += 2
|
|
||||||
}
|
|
||||||
return data
|
|
||||||
}
|
|
||||||
|
|
||||||
fun ByteArray.toHexString() = joinToString("") { "%02X".format(it) }
|
fun ByteArray.toHexString() = joinToString("") { "%02X".format(it) }
|
||||||
}
|
}
|
||||||
@@ -157,8 +157,8 @@
|
|||||||
android:inputType="textPassword"
|
android:inputType="textPassword"
|
||||||
android:importantForAccessibility="no"
|
android:importantForAccessibility="no"
|
||||||
android:importantForAutofill="yes"
|
android:importantForAutofill="yes"
|
||||||
android:autofillHints="password|"
|
android:autofillHints="password"
|
||||||
android:imeOptions="actionDone"
|
android:imeOptions="actionDone|flagNoPersonalizedLearning"
|
||||||
android:maxLines="1"/>
|
android:maxLines="1"/>
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|||||||
@@ -106,6 +106,7 @@
|
|||||||
android:inputType="textPassword|textMultiLine"
|
android:inputType="textPassword|textMultiLine"
|
||||||
android:importantForAccessibility="no"
|
android:importantForAccessibility="no"
|
||||||
android:importantForAutofill="no"
|
android:importantForAutofill="no"
|
||||||
|
android:imeOptions="flagNoPersonalizedLearning"
|
||||||
android:ems="10"
|
android:ems="10"
|
||||||
android:maxLines="10"
|
android:maxLines="10"
|
||||||
android:hint="@string/entry_password"/>
|
android:hint="@string/entry_password"/>
|
||||||
|
|||||||
@@ -29,6 +29,18 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:importantForAutofill="noExcludeDescendants"
|
android:importantForAutofill="noExcludeDescendants"
|
||||||
tools:targetApi="o">
|
tools:targetApi="o">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/setup_otp_type_message"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/card_view_margin"
|
||||||
|
android:layout_marginLeft="@dimen/card_view_margin"
|
||||||
|
android:layout_marginEnd="@dimen/card_view_margin"
|
||||||
|
android:layout_marginRight="@dimen/card_view_margin"
|
||||||
|
android:text="@string/error_otp_type"
|
||||||
|
style="@style/KeepassDXStyle.TextAppearance.WarningTextStyle"/>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:id="@+id/card_view_otp_selection"
|
android:id="@+id/card_view_otp_selection"
|
||||||
android:layout_margin="4dp"
|
android:layout_margin="4dp"
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:inputType="textMultiLine"
|
android:inputType="textMultiLine"
|
||||||
|
android:imeOptions="flagNoPersonalizedLearning"
|
||||||
android:focusable="true"
|
android:focusable="true"
|
||||||
android:focusableInTouchMode="true"
|
android:focusableInTouchMode="true"
|
||||||
android:importantForAccessibility="no"
|
android:importantForAccessibility="no"
|
||||||
|
|||||||
@@ -46,14 +46,24 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@+id/explanation_text"
|
app:layout_constraintTop_toBottomOf="@+id/explanation_text"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
android:minHeight="48dp"/>
|
android:minHeight="48dp"/>
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatEditText
|
<androidx.appcompat.widget.AppCompatEditText
|
||||||
android:id="@+id/input_text"
|
android:id="@+id/input_text"
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/switch_element"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:minHeight="48dp"
|
|
||||||
android:digits="0123456789"
|
android:digits="0123456789"
|
||||||
android:inputType="number"/>
|
android:inputType="number"
|
||||||
|
android:minHeight="48dp"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/input_text_unit"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@+id/switch_element" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
|
android:id="@+id/input_text_unit"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:layout_constraintBottom_toBottomOf="@+id/input_text"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="@+id/input_text" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -248,7 +248,7 @@
|
|||||||
<string name="content_description_background">الخلفية</string>
|
<string name="content_description_background">الخلفية</string>
|
||||||
<string name="rounds">دورات التحويل</string>
|
<string name="rounds">دورات التحويل</string>
|
||||||
<string name="rounds_explanation">توفر الدورات الاضافية ضد هجوم توليد التركيبات ،لكنها تبطئ التحميل والحفظ.</string>
|
<string name="rounds_explanation">توفر الدورات الاضافية ضد هجوم توليد التركيبات ،لكنها تبطئ التحميل والحفظ.</string>
|
||||||
<string name="memory_usage_explanation">مقدار الذاكرة (بالبايت) لاستخدامها في دالة اشتقاق المفتاح.</string>
|
<string name="memory_usage_explanation">مقدار الذاكرة لاستخدامها في دالة اشتقاق المفتاح.</string>
|
||||||
<string name="parallelism_explanation">درجة التوازي (عدد العمليات) لدالة اشتقاق المفتاح.</string>
|
<string name="parallelism_explanation">درجة التوازي (عدد العمليات) لدالة اشتقاق المفتاح.</string>
|
||||||
<string name="sort_groups_before">مجموعات قبل</string>
|
<string name="sort_groups_before">مجموعات قبل</string>
|
||||||
<string name="selection_mode">نمط التحديد</string>
|
<string name="selection_mode">نمط التحديد</string>
|
||||||
@@ -404,7 +404,7 @@
|
|||||||
<string name="settings_database_force_changing_master_key_summary">يطالبك بتغيير المفتاح الرئيسي (بالأيام)</string>
|
<string name="settings_database_force_changing_master_key_summary">يطالبك بتغيير المفتاح الرئيسي (بالأيام)</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">اقترح تجديد المفتاح الرئيسي (بالأيام)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">اقترح تجديد المفتاح الرئيسي (بالأيام)</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">اقترح التجديد</string>
|
<string name="settings_database_recommend_changing_master_key_title">اقترح التجديد</string>
|
||||||
<string name="max_history_size_summary">حجم التأريخ ( بالبايت) لكل مدخل</string>
|
<string name="max_history_size_summary">حجم التأريخ لكل مدخل</string>
|
||||||
<string name="max_history_size_title">الحجم الأقصى</string>
|
<string name="max_history_size_title">الحجم الأقصى</string>
|
||||||
<string name="max_history_items_summary">عدد عناصر التأريخ لكل مدخل</string>
|
<string name="max_history_items_summary">عدد عناصر التأريخ لكل مدخل</string>
|
||||||
<string name="education_generate_password_title">أنشئ كلمة سر قوية</string>
|
<string name="education_generate_password_title">أنشئ كلمة سر قوية</string>
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
<string name="settings_database_force_changing_master_key_title">Forsiraj obnovu</string>
|
<string name="settings_database_force_changing_master_key_title">Forsiraj obnovu</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Preporučiti promenu glavnog ključa (u danima)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Preporučiti promenu glavnog ključa (u danima)</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Preporučiti obnavljanje</string>
|
<string name="settings_database_recommend_changing_master_key_title">Preporučiti obnavljanje</string>
|
||||||
<string name="max_history_size_summary">Ograniči veličinu istorije (u bajtovima) po unosu</string>
|
<string name="max_history_size_summary">Ograniči veličinu istorije po unosu</string>
|
||||||
<string name="max_history_size_title">Maksimalna veličina</string>
|
<string name="max_history_size_title">Maksimalna veličina</string>
|
||||||
<string name="max_history_items_summary">Ograniči broja stavki istorije po unosu</string>
|
<string name="max_history_items_summary">Ograniči broja stavki istorije po unosu</string>
|
||||||
<string name="max_history_items_title">Maksimalan broj</string>
|
<string name="max_history_items_title">Maksimalan broj</string>
|
||||||
|
|||||||
@@ -207,7 +207,7 @@
|
|||||||
<string name="command_execution">S\'executa l\'ordre…</string>
|
<string name="command_execution">S\'executa l\'ordre…</string>
|
||||||
<string name="parallelism_explanation">Grau de paral·lelisme (és a dir, nombre de fils) fets servir per la funció de derivació de la clau.</string>
|
<string name="parallelism_explanation">Grau de paral·lelisme (és a dir, nombre de fils) fets servir per la funció de derivació de la clau.</string>
|
||||||
<string name="parallelism">Paral·lelisme</string>
|
<string name="parallelism">Paral·lelisme</string>
|
||||||
<string name="memory_usage_explanation">Quantitat de memòria (en bytes) usada per la funció de derivació de la clau.</string>
|
<string name="memory_usage_explanation">Quantitat de memòria usada per la funció de derivació de la clau.</string>
|
||||||
<string name="memory_usage">Ús de la memòria</string>
|
<string name="memory_usage">Ús de la memòria</string>
|
||||||
<string name="hide_broken_locations_summary">Amaga els enllaços trencats en la llista de bases de dades recents</string>
|
<string name="hide_broken_locations_summary">Amaga els enllaços trencats en la llista de bases de dades recents</string>
|
||||||
<string name="show_recent_files_summary">Mostra la ubicació de les bases de dades recents</string>
|
<string name="show_recent_files_summary">Mostra la ubicació de les bases de dades recents</string>
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
<string name="encryption_explanation">Algoritmus šifrování databáze použit pro všechna data.</string>
|
<string name="encryption_explanation">Algoritmus šifrování databáze použit pro všechna data.</string>
|
||||||
<string name="kdf_explanation">Klíč pro šifrovací algoritmus je vytvořen transformací hlavního klíče pomocí funkce odvození klíče s náhodně přidanou složkou, tzv. solí.</string>
|
<string name="kdf_explanation">Klíč pro šifrovací algoritmus je vytvořen transformací hlavního klíče pomocí funkce odvození klíče s náhodně přidanou složkou, tzv. solí.</string>
|
||||||
<string name="memory_usage">Využití paměti</string>
|
<string name="memory_usage">Využití paměti</string>
|
||||||
<string name="memory_usage_explanation">Množství paměti (v bajtech) použitých funkcí pro odvození klíče.</string>
|
<string name="memory_usage_explanation">Množství paměti použitých funkcí pro odvození klíče.</string>
|
||||||
<string name="parallelism">Souběžné zpracovávání</string>
|
<string name="parallelism">Souběžné zpracovávání</string>
|
||||||
<string name="parallelism_explanation">Stupeň souběžného zpracovávání (počet vláken) použitý funkcí pro odvození klíče.</string>
|
<string name="parallelism_explanation">Stupeň souběžného zpracovávání (počet vláken) použitý funkcí pro odvození klíče.</string>
|
||||||
<string name="sort_menu">Seřadit</string>
|
<string name="sort_menu">Seřadit</string>
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
<string name="max_history_items_title">Maximální počet</string>
|
<string name="max_history_items_title">Maximální počet</string>
|
||||||
<string name="max_history_items_summary">Omezit počet položek v historii záznamu</string>
|
<string name="max_history_items_summary">Omezit počet položek v historii záznamu</string>
|
||||||
<string name="max_history_size_title">Maximální velikost</string>
|
<string name="max_history_size_title">Maximální velikost</string>
|
||||||
<string name="max_history_size_summary">Omezit velikost historie na záznam (v bajtech)</string>
|
<string name="max_history_size_summary">Omezit velikost historie na záznam</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Doporučit změnu</string>
|
<string name="settings_database_recommend_changing_master_key_title">Doporučit změnu</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Dporučit změnu hlavního klíče (dny)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Dporučit změnu hlavního klíče (dny)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Vynutit změnu</string>
|
<string name="settings_database_force_changing_master_key_title">Vynutit změnu</string>
|
||||||
@@ -546,4 +546,11 @@
|
|||||||
<string name="content">Obsah</string>
|
<string name="content">Obsah</string>
|
||||||
<string name="error_rebuild_list">Seznam nelze řádně sestavit.</string>
|
<string name="error_rebuild_list">Seznam nelze řádně sestavit.</string>
|
||||||
<string name="error_database_uri_null">URI databáze nelze načíst.</string>
|
<string name="error_database_uri_null">URI databáze nelze načíst.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Návrhy samovyplnění přidány.</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Návrhy inline</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Pokusí ze zobrazit návrhy samovyplnění přímo z kompatibilní klávesnice</string>
|
||||||
|
<string name="warning_database_revoked">Přístup k souboru odebrán správcem souborů, uzavřete databázi a nově ji otevřete z jejího adresáře.</string>
|
||||||
|
<string name="menu_reload_database">Databázi nově načíst</string>
|
||||||
|
<string name="warning_database_info_changed_options">Přepsat externí změny uložením databáze nebo databázi včetně posledních změn nově načíst.</string>
|
||||||
|
<string name="warning_database_info_changed">Informace obsažená ve Vašem databázovém souboru by změněna mimo aplikaci.</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
<string name="encryption_explanation">Databasekrypteringsalgoritme anvendt for alle data.</string>
|
<string name="encryption_explanation">Databasekrypteringsalgoritme anvendt for alle data.</string>
|
||||||
<string name="kdf_explanation">For at generere nøglen til krypteringsalgoritmen, omdannes hovednøglen ved hjælp af en tilfældigt saltet nøgleafledningsfunktion.</string>
|
<string name="kdf_explanation">For at generere nøglen til krypteringsalgoritmen, omdannes hovednøglen ved hjælp af en tilfældigt saltet nøgleafledningsfunktion.</string>
|
||||||
<string name="memory_usage">Hukommelsesforbrug</string>
|
<string name="memory_usage">Hukommelsesforbrug</string>
|
||||||
<string name="memory_usage_explanation">Hukommelse (i bytes), som anvendes af nøgleafledningsfunktion.</string>
|
<string name="memory_usage_explanation">Hukommelse, som anvendes af nøgleafledningsfunktion.</string>
|
||||||
<string name="parallelism">Parallelitet</string>
|
<string name="parallelism">Parallelitet</string>
|
||||||
<string name="parallelism_explanation">Grad af parallelitet (dvs. antallet af tråde), som anvendes af nøgleafledningsfunktion.</string>
|
<string name="parallelism_explanation">Grad af parallelitet (dvs. antallet af tråde), som anvendes af nøgleafledningsfunktion.</string>
|
||||||
<string name="sort_menu">Sorter</string>
|
<string name="sort_menu">Sorter</string>
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
<string name="max_history_items_title">Max. antal</string>
|
<string name="max_history_items_title">Max. antal</string>
|
||||||
<string name="max_history_items_summary">Begræns antallet af historikposter pr. indtastning</string>
|
<string name="max_history_items_summary">Begræns antallet af historikposter pr. indtastning</string>
|
||||||
<string name="max_history_size_title">Max. størrelse</string>
|
<string name="max_history_size_title">Max. størrelse</string>
|
||||||
<string name="max_history_size_summary">Begræns historikstørrelsen (i bytes) pr. post</string>
|
<string name="max_history_size_summary">Begræns historikstørrelsen pr. post</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Anbefalet fornyelse</string>
|
<string name="settings_database_recommend_changing_master_key_title">Anbefalet fornyelse</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Anbefal ændring af hovednøglen (dage)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Anbefal ændring af hovednøglen (dage)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Gennemtving fornyelse</string>
|
<string name="settings_database_force_changing_master_key_title">Gennemtving fornyelse</string>
|
||||||
|
|||||||
@@ -199,7 +199,7 @@
|
|||||||
<string name="encryption_explanation">Verschlüsselungsalgorithmus der Datenbank wird für sämtliche Daten verwendet.</string>
|
<string name="encryption_explanation">Verschlüsselungsalgorithmus der Datenbank wird für sämtliche Daten verwendet.</string>
|
||||||
<string name="kdf_explanation">Um den Schlüssel für den Verschlüsselungsalgorithmus zu generieren, wird der Hauptschlüssel umgewandelt, wobei ein zufälliger Salt in der Schlüsselberechnung verwendet wird.</string>
|
<string name="kdf_explanation">Um den Schlüssel für den Verschlüsselungsalgorithmus zu generieren, wird der Hauptschlüssel umgewandelt, wobei ein zufälliger Salt in der Schlüsselberechnung verwendet wird.</string>
|
||||||
<string name="memory_usage">Speichernutzung</string>
|
<string name="memory_usage">Speichernutzung</string>
|
||||||
<string name="memory_usage_explanation">Größe des Speichers (in Bytes) der für die Schlüsselableitung genutzt wird.</string>
|
<string name="memory_usage_explanation">Größe des Speichers der für die Schlüsselableitung genutzt wird.</string>
|
||||||
<string name="parallelism">Parallelismus</string>
|
<string name="parallelism">Parallelismus</string>
|
||||||
<string name="parallelism_explanation">Grad des Parallelismus (d. h. Anzahl der Threads), der für die Schlüsselableitung genutzt wird.</string>
|
<string name="parallelism_explanation">Grad des Parallelismus (d. h. Anzahl der Threads), der für die Schlüsselableitung genutzt wird.</string>
|
||||||
<string name="sort_menu">Sortieren</string>
|
<string name="sort_menu">Sortieren</string>
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
<string name="max_history_items_title">Maximale Anzahl</string>
|
<string name="max_history_items_title">Maximale Anzahl</string>
|
||||||
<string name="max_history_items_summary">Anzahl der Verlaufseinträge pro Eintrag begrenzen</string>
|
<string name="max_history_items_summary">Anzahl der Verlaufseinträge pro Eintrag begrenzen</string>
|
||||||
<string name="max_history_size_title">Maximale Größe</string>
|
<string name="max_history_size_title">Maximale Größe</string>
|
||||||
<string name="max_history_size_summary">Verlaufsumfang (in Bytes) pro Eintrag begrenzen</string>
|
<string name="max_history_size_summary">Verlaufsumfang pro Eintrag begrenzen</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Erneuerung empfehlen</string>
|
<string name="settings_database_recommend_changing_master_key_title">Erneuerung empfehlen</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">(Nach Tagen) Änderung des Hauptschlüssels empfehlen</string>
|
<string name="settings_database_recommend_changing_master_key_summary">(Nach Tagen) Änderung des Hauptschlüssels empfehlen</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Erneuerung erzwingen</string>
|
<string name="settings_database_force_changing_master_key_title">Erneuerung erzwingen</string>
|
||||||
@@ -557,4 +557,5 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Die Liste kann nicht ordnungsgemäß neu erstellt werden.</string>
|
<string name="error_rebuild_list">Die Liste kann nicht ordnungsgemäß neu erstellt werden.</string>
|
||||||
<string name="error_database_uri_null">Datenbank-URI kann nicht abgerufen werden.</string>
|
<string name="error_database_uri_null">Datenbank-URI kann nicht abgerufen werden.</string>
|
||||||
|
<string name="menu_reload_database">Datenbank neu laden</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
<string name="encryption_explanation">Αλγόριθμος κρυπτογράφησης βάσης δεδομένων που χρησιμοποιείται για όλα τα δεδομένα.</string>
|
<string name="encryption_explanation">Αλγόριθμος κρυπτογράφησης βάσης δεδομένων που χρησιμοποιείται για όλα τα δεδομένα.</string>
|
||||||
<string name="kdf_explanation">Για να δημιουργηθεί το κλειδί για τον αλγόριθμο κρυπτογράφησης, το κύριο κλειδί μετασχηματίζεται χρησιμοποιώντας μια τυχαία αλατισμένη λειτουργία εξαγωγής κλειδιών.</string>
|
<string name="kdf_explanation">Για να δημιουργηθεί το κλειδί για τον αλγόριθμο κρυπτογράφησης, το κύριο κλειδί μετασχηματίζεται χρησιμοποιώντας μια τυχαία αλατισμένη λειτουργία εξαγωγής κλειδιών.</string>
|
||||||
<string name="memory_usage">Χρήση μνήμης</string>
|
<string name="memory_usage">Χρήση μνήμης</string>
|
||||||
<string name="memory_usage_explanation">Ποσότητα μνήμης (σε bytes) που θα χρησιμοποιηθεί από τη λειτουργία εξαγωγής κλειδιών.</string>
|
<string name="memory_usage_explanation">Ποσότητα μνήμης που θα χρησιμοποιηθεί από τη λειτουργία εξαγωγής κλειδιών.</string>
|
||||||
<string name="parallelism">Παραλληλισμός</string>
|
<string name="parallelism">Παραλληλισμός</string>
|
||||||
<string name="parallelism_explanation">Βαθμός παραλληλισμού (δηλ. Αριθμός νημάτων) που χρησιμοποιείται από τη συνάρτηση εξαγωγής κλειδιών.</string>
|
<string name="parallelism_explanation">Βαθμός παραλληλισμού (δηλ. Αριθμός νημάτων) που χρησιμοποιείται από τη συνάρτηση εξαγωγής κλειδιών.</string>
|
||||||
<string name="sort_menu">Ταξινόμηση</string>
|
<string name="sort_menu">Ταξινόμηση</string>
|
||||||
@@ -392,7 +392,7 @@
|
|||||||
<string name="max_history_items_title">Μέγιστος αριθμός</string>
|
<string name="max_history_items_title">Μέγιστος αριθμός</string>
|
||||||
<string name="max_history_items_summary">Περιορίστε τον αριθμό των στοιχείων ιστορικού ανά καταχώριση</string>
|
<string name="max_history_items_summary">Περιορίστε τον αριθμό των στοιχείων ιστορικού ανά καταχώριση</string>
|
||||||
<string name="max_history_size_title">Μέγιστο μέγεθος</string>
|
<string name="max_history_size_title">Μέγιστο μέγεθος</string>
|
||||||
<string name="max_history_size_summary">Περιορίστε το μέγεθος ιστορικού (σε bytes) ανά καταχώριση</string>
|
<string name="max_history_size_summary">Περιορίστε το μέγεθος ιστορικού ανά καταχώριση</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Συστήστε ανανέωση</string>
|
<string name="settings_database_recommend_changing_master_key_title">Συστήστε ανανέωση</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Προτεινόμενη αλλαγή του κύριου κλειδιού (ημέρες)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Προτεινόμενη αλλαγή του κύριου κλειδιού (ημέρες)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Εξαναγκαστική ανανέωση</string>
|
<string name="settings_database_force_changing_master_key_title">Εξαναγκαστική ανανέωση</string>
|
||||||
@@ -545,4 +545,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Δεν είναι δυνατή η σωστή αναδημιουργία της λίστας.</string>
|
<string name="error_rebuild_list">Δεν είναι δυνατή η σωστή αναδημιουργία της λίστας.</string>
|
||||||
<string name="error_database_uri_null">Δεν είναι δυνατή η ανάκτηση του URI βάσης δεδομένων.</string>
|
<string name="error_database_uri_null">Δεν είναι δυνατή η ανάκτηση του URI βάσης δεδομένων.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Προστέθηκαν προτάσεις αυτόματης συμπλήρωσης.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Απόπειρα εμφάνισης προτάσεων αυτόματης συμπλήρωσης απευθείας από ένα συμβατό πληκτρολόγιο</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Προτάσεις στην ίδια γραμμή</string>
|
||||||
|
<string name="warning_database_revoked">Πρόσβαση στο αρχείο που ανακλήθηκε από το διαχειριστή αρχείων, κλείστε τη βάση δεδομένων και ανοίξτε το ξανά από τη θέση του.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Αντικαταστήστε τις εξωτερικές τροποποιήσεις αποθηκεύοντας τη βάση δεδομένων ή φορτώστε την ξανά με τις πιο πρόσφατες αλλαγές.</string>
|
||||||
|
<string name="warning_database_info_changed">Οι πληροφορίες που περιέχονται στο αρχείο της βάσης δεδομένων σας έχουν τροποποιηθεί εκτός της εφαρμογής.</string>
|
||||||
|
<string name="menu_reload_database">Επαναφόρτωση βάσης δεδομένων</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -165,7 +165,7 @@
|
|||||||
<string name="encryption_explanation">Algoritmo de cifrado utilizado para todos los datos.</string>
|
<string name="encryption_explanation">Algoritmo de cifrado utilizado para todos los datos.</string>
|
||||||
<string name="kdf_explanation">Para generar la clave del algoritmo de cifrado, la clave maestra se transforma mediante una función de derivación de claves con una sal aleatoria.</string>
|
<string name="kdf_explanation">Para generar la clave del algoritmo de cifrado, la clave maestra se transforma mediante una función de derivación de claves con una sal aleatoria.</string>
|
||||||
<string name="memory_usage">Uso de memoria</string>
|
<string name="memory_usage">Uso de memoria</string>
|
||||||
<string name="memory_usage_explanation">Cantidad de memoria (en bytes) que usará la función de derivación de clave.</string>
|
<string name="memory_usage_explanation">Cantidad de memoria que usará la función de derivación de clave.</string>
|
||||||
<string name="parallelism">Paralelismo</string>
|
<string name="parallelism">Paralelismo</string>
|
||||||
<string name="parallelism_explanation">Grado de paralelismo (p. ej. número de hilos) usados por la función de derivación de clave.</string>
|
<string name="parallelism_explanation">Grado de paralelismo (p. ej. número de hilos) usados por la función de derivación de clave.</string>
|
||||||
<string name="sort_menu">Ordenar</string>
|
<string name="sort_menu">Ordenar</string>
|
||||||
@@ -498,7 +498,7 @@
|
|||||||
<string name="error_field_name_already_exists">El nombre del campo ya existe.</string>
|
<string name="error_field_name_already_exists">El nombre del campo ya existe.</string>
|
||||||
<string name="error_registration_read_only">Guardar un nuevo elemento no está permitido en una base de datos de sólo lectura</string>
|
<string name="error_registration_read_only">Guardar un nuevo elemento no está permitido en una base de datos de sólo lectura</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Recomendar la renovación</string>
|
<string name="settings_database_recommend_changing_master_key_title">Recomendar la renovación</string>
|
||||||
<string name="max_history_size_summary">Limitar el tamaño del historial (en bytes) por entrada</string>
|
<string name="max_history_size_summary">Limitar el tamaño del historial por entrada</string>
|
||||||
<string name="max_history_items_summary">Limitar el número de elementos del historial por entrada</string>
|
<string name="max_history_items_summary">Limitar el número de elementos del historial por entrada</string>
|
||||||
<string name="max_history_items_title">Número máximo</string>
|
<string name="max_history_items_title">Número máximo</string>
|
||||||
<string name="device_keyboard_setting_title">Configuración del teclado del dispositivo</string>
|
<string name="device_keyboard_setting_title">Configuración del teclado del dispositivo</string>
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
<string name="saving_database">در حال ذخیره پایگاه داده</string>
|
<string name="saving_database">در حال ذخیره پایگاه داده</string>
|
||||||
<string name="parallelism_explanation">درجه موازی سازی (یعنی تعداد موضوعات) که توسط عملکرد مشتق کلیدی استفاده می شود.</string>
|
<string name="parallelism_explanation">درجه موازی سازی (یعنی تعداد موضوعات) که توسط عملکرد مشتق کلیدی استفاده می شود.</string>
|
||||||
<string name="parallelism">موازی کاری</string>
|
<string name="parallelism">موازی کاری</string>
|
||||||
<string name="memory_usage_explanation">مقدار حافظه (در بایت) که توسط تابع مشتق کلید مورد استفاده قرار گیرد.</string>
|
<string name="memory_usage_explanation">مقدار حافظه که توسط تابع مشتق کلید مورد استفاده قرار گیرد.</string>
|
||||||
<string name="memory_usage">استفاده از حافظه</string>
|
<string name="memory_usage">استفاده از حافظه</string>
|
||||||
<string name="rounds_explanation">دورهای رمزگذاری اضافی محافظت بالاتری در برابر حملات نیروی وحشی ایجاد می کنند ، اما در واقع می توانند سرعت و بارگذاری را کاهش دهند.</string>
|
<string name="rounds_explanation">دورهای رمزگذاری اضافی محافظت بالاتری در برابر حملات نیروی وحشی ایجاد می کنند ، اما در واقع می توانند سرعت و بارگذاری را کاهش دهند.</string>
|
||||||
<string name="rounds">دور تحول</string>
|
<string name="rounds">دور تحول</string>
|
||||||
|
|||||||
@@ -249,7 +249,7 @@
|
|||||||
<string name="list_password_generator_options_title">Salasanamerkit</string>
|
<string name="list_password_generator_options_title">Salasanamerkit</string>
|
||||||
<string name="password_size_summary">Asettaa oletuspituuden generoiduille salasanoille</string>
|
<string name="password_size_summary">Asettaa oletuspituuden generoiduille salasanoille</string>
|
||||||
<string name="parallelism">Rinnakkaisuus</string>
|
<string name="parallelism">Rinnakkaisuus</string>
|
||||||
<string name="memory_usage_explanation">Avaimen johtamisfunktion käyttämän muistin (tavuina) määrä.</string>
|
<string name="memory_usage_explanation">Avaimen johtamisfunktion käyttämän muistin määrä.</string>
|
||||||
<string name="memory_usage">Muistin käyttö</string>
|
<string name="memory_usage">Muistin käyttö</string>
|
||||||
<string name="kdf_explanation">Pääavain muunnetaan käyttäen satunnaista suolattua avaimen johtamisfunktiota, jotta salausalgoritmin avain voidaan generoida.</string>
|
<string name="kdf_explanation">Pääavain muunnetaan käyttäen satunnaista suolattua avaimen johtamisfunktiota, jotta salausalgoritmin avain voidaan generoida.</string>
|
||||||
<string name="encryption_explanation">Salasanatietokannan salausalgoritmi, jota käytetään kaikelle datalle.</string>
|
<string name="encryption_explanation">Salasanatietokannan salausalgoritmi, jota käytetään kaikelle datalle.</string>
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
<string name="rounds">Tours de transformation</string>
|
<string name="rounds">Tours de transformation</string>
|
||||||
<string name="rounds_explanation">Des tours de chiffrement supplémentaires fournissent une protection plus élevée contre les attaques par force brute, mais cela peut considérablement ralentir les opérations de chargement et d’enregistrement.</string>
|
<string name="rounds_explanation">Des tours de chiffrement supplémentaires fournissent une protection plus élevée contre les attaques par force brute, mais cela peut considérablement ralentir les opérations de chargement et d’enregistrement.</string>
|
||||||
<string name="memory_usage">Utilisation de la mémoire</string>
|
<string name="memory_usage">Utilisation de la mémoire</string>
|
||||||
<string name="memory_usage_explanation">Quantité de mémoire (en octets) à utiliser par la fonction de dérivation de clé.</string>
|
<string name="memory_usage_explanation">Quantité de mémoire à utiliser par la fonction de dérivation de clé.</string>
|
||||||
<string name="parallelism">Parallélisme</string>
|
<string name="parallelism">Parallélisme</string>
|
||||||
<string name="parallelism_explanation">Degré de parallélisme (nombre de fils d’exécution) utilisé par la fonction de dérivation de clé.</string>
|
<string name="parallelism_explanation">Degré de parallélisme (nombre de fils d’exécution) utilisé par la fonction de dérivation de clé.</string>
|
||||||
<string name="saving_database">Enregistrement de la base de données…</string>
|
<string name="saving_database">Enregistrement de la base de données…</string>
|
||||||
@@ -408,7 +408,7 @@
|
|||||||
<string name="max_history_items_title">Nombre maximum</string>
|
<string name="max_history_items_title">Nombre maximum</string>
|
||||||
<string name="max_history_items_summary">Limite le nombre d’éléments de l’historique par entrée</string>
|
<string name="max_history_items_summary">Limite le nombre d’éléments de l’historique par entrée</string>
|
||||||
<string name="max_history_size_title">Taille maximum</string>
|
<string name="max_history_size_title">Taille maximum</string>
|
||||||
<string name="max_history_size_summary">Limite la taille de l’historique (en octets) par entrée</string>
|
<string name="max_history_size_summary">Limite la taille de l’historique par entrée</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Recommander le renouvellement</string>
|
<string name="settings_database_recommend_changing_master_key_title">Recommander le renouvellement</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Recommande le changement de la clé principale (jours)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Recommande le changement de la clé principale (jours)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Forcer le renouvellement</string>
|
<string name="settings_database_force_changing_master_key_title">Forcer le renouvellement</string>
|
||||||
@@ -554,4 +554,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Impossible de reconstruire correctement la liste.</string>
|
<string name="error_rebuild_list">Impossible de reconstruire correctement la liste.</string>
|
||||||
<string name="error_database_uri_null">L\'URI de la base de données ne peut pas être récupéré.</string>
|
<string name="error_database_uri_null">L\'URI de la base de données ne peut pas être récupéré.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Suggestions de remplissage automatique ajoutées.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Tente d\'afficher des suggestions de remplissage automatique directement à partir d\'un clavier compatible</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Suggestions en ligne</string>
|
||||||
|
<string name="warning_database_info_changed_options">Écraser les modifications externes en sauvegardant la base de données ou recharger-la avec les dernières modifications.</string>
|
||||||
|
<string name="warning_database_revoked">Accès au dossier révoqué par le gestionnaire de fichiers, fermer la base de données et la rouvrir à partir de son emplacement.</string>
|
||||||
|
<string name="warning_database_info_changed">Les informations contenues dans votre fichier de base de données ont été modifiées en dehors de l\'application.</string>
|
||||||
|
<string name="menu_reload_database">Recharger la base de données</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -266,7 +266,7 @@
|
|||||||
<string name="read_only_warning">Ovisno o upravitelju datoteka, KeePassDX možda neće moći pisati u tvoje spremište.</string>
|
<string name="read_only_warning">Ovisno o upravitelju datoteka, KeePassDX možda neće moći pisati u tvoje spremište.</string>
|
||||||
<string name="contains_duplicate_uuid_procedure">Riješiti problem generiranjem novih UUID-ova za duplikate\?</string>
|
<string name="contains_duplicate_uuid_procedure">Riješiti problem generiranjem novih UUID-ova za duplikate\?</string>
|
||||||
<string name="root">Korijen</string>
|
<string name="root">Korijen</string>
|
||||||
<string name="memory_usage_explanation">Količina memorije (u bajtovima) koju će koristiti funkcija za generiranje ključeva.</string>
|
<string name="memory_usage_explanation">Količina memorije koju će koristiti funkcija za generiranje ključeva.</string>
|
||||||
<string name="do_not_kill_app">Ne zatvaraj aplikaciju …</string>
|
<string name="do_not_kill_app">Ne zatvaraj aplikaciju …</string>
|
||||||
<string name="sort_last_access_time">Zadnji pristup</string>
|
<string name="sort_last_access_time">Zadnji pristup</string>
|
||||||
<string name="special">Posebni znakovi</string>
|
<string name="special">Posebni znakovi</string>
|
||||||
@@ -286,7 +286,7 @@
|
|||||||
<string name="recycle_bin_summary">Premijesti grupe i unose u koš za smeće prije brisanja</string>
|
<string name="recycle_bin_summary">Premijesti grupe i unose u koš za smeće prije brisanja</string>
|
||||||
<string name="recycle_bin_group_title">Grupa koša za smeće</string>
|
<string name="recycle_bin_group_title">Grupa koša za smeće</string>
|
||||||
<string name="max_history_items_summary">Ograniči broj spremljenih povijesti po unosu</string>
|
<string name="max_history_items_summary">Ograniči broj spremljenih povijesti po unosu</string>
|
||||||
<string name="max_history_size_summary">Ograniči veličinu povijesti (u bajtovima) po unosu</string>
|
<string name="max_history_size_summary">Ograniči veličinu povijesti po unosu</string>
|
||||||
<string name="allow_copy_password_title">Povjerenje međuspremniku</string>
|
<string name="allow_copy_password_title">Povjerenje međuspremniku</string>
|
||||||
<string name="allow_copy_password_summary">Dozvoli kopiranje lozinke i zaštićenih polja u međuspremnik</string>
|
<string name="allow_copy_password_summary">Dozvoli kopiranje lozinke i zaštićenih polja u međuspremnik</string>
|
||||||
<string name="allow_copy_password_warning">Upozorenje: Međuspremnik dijele sve aplikacije. Ako se kopiraju osjetljivi podaci, druga aplikacija ih može vidjeti.</string>
|
<string name="allow_copy_password_warning">Upozorenje: Međuspremnik dijele sve aplikacije. Ako se kopiraju osjetljivi podaci, druga aplikacija ih može vidjeti.</string>
|
||||||
@@ -529,4 +529,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Nije moguće ispravno obnoviti popis.</string>
|
<string name="error_rebuild_list">Nije moguće ispravno obnoviti popis.</string>
|
||||||
<string name="error_database_uri_null">URI baze podataka nije moguće dobiti.</string>
|
<string name="error_database_uri_null">URI baze podataka nije moguće dobiti.</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Umetnuti prijedlozi</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Prijedlozi za automatsko popunjavanje su dodani.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Pokušaj prikazivanja prijedloga za automatsko popunjavanje izravno s kompatibilne tipkovnice</string>
|
||||||
|
<string name="warning_database_revoked">Pristup datoteci koju je opozvao upravljač datoteka. Zatvori bazu podataka i ponovo je otvori s njezinog mjesta.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Prepiši vanjske promjene spremanjem baze podataka ili je ponovo učitaj s najnovijim promjenama.</string>
|
||||||
|
<string name="warning_database_info_changed">Podaci u datoteci tvoje baze podataka izmijenjeni su izvan programa.</string>
|
||||||
|
<string name="menu_reload_database">Ponovo učitaj bazu podataka</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -182,7 +182,7 @@
|
|||||||
<string name="encryption_explanation">Az összes adathoz használt adatbázis-titkosítási algoritmus.</string>
|
<string name="encryption_explanation">Az összes adathoz használt adatbázis-titkosítási algoritmus.</string>
|
||||||
<string name="kdf_explanation">A kulcs előállításához a titkosítási algoritmushoz, a mesterkulcs átalakításra került egy véletlenszerűen sózott kulcselőállítási függvénnyel.</string>
|
<string name="kdf_explanation">A kulcs előállításához a titkosítási algoritmushoz, a mesterkulcs átalakításra került egy véletlenszerűen sózott kulcselőállítási függvénnyel.</string>
|
||||||
<string name="memory_usage">Memóriahasználat</string>
|
<string name="memory_usage">Memóriahasználat</string>
|
||||||
<string name="memory_usage_explanation">A kulcselőállítási függvényhez használt memóriamennyiség (bájtban).</string>
|
<string name="memory_usage_explanation">A kulcselőállítási függvényhez használt memóriamennyiség.</string>
|
||||||
<string name="parallelism">Párhuzamosság</string>
|
<string name="parallelism">Párhuzamosság</string>
|
||||||
<string name="parallelism_explanation">A kulcselőállítási függvény párhuzamosságának mértéke (azaz a szálak száma).</string>
|
<string name="parallelism_explanation">A kulcselőállítási függvény párhuzamosságának mértéke (azaz a szálak száma).</string>
|
||||||
<string name="sort_menu">Rendezés</string>
|
<string name="sort_menu">Rendezés</string>
|
||||||
@@ -398,7 +398,7 @@
|
|||||||
<string name="settings_database_force_changing_master_key_title">Megújítás kényszerítése</string>
|
<string name="settings_database_force_changing_master_key_title">Megújítás kényszerítése</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">A mesterkulcs módosításának javaslata (napban)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">A mesterkulcs módosításának javaslata (napban)</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Javasolt megújítás</string>
|
<string name="settings_database_recommend_changing_master_key_title">Javasolt megújítás</string>
|
||||||
<string name="max_history_size_summary">Korlátozza az előzmények méretét bejegyzésenként (bájtban)</string>
|
<string name="max_history_size_summary">Korlátozza az előzmények méretét bejegyzésenként</string>
|
||||||
<string name="max_history_size_title">Maximális méret</string>
|
<string name="max_history_size_title">Maximális méret</string>
|
||||||
<string name="max_history_items_summary">Korlátozza az előzmények számát bejegyzésenként</string>
|
<string name="max_history_items_summary">Korlátozza az előzmények számát bejegyzésenként</string>
|
||||||
<string name="max_history_items_title">Maximális szám</string>
|
<string name="max_history_items_title">Maximális szám</string>
|
||||||
|
|||||||
@@ -176,7 +176,7 @@
|
|||||||
<string name="encryption_explanation">Algoritmo di cifratura del database usato per tutti i dati.</string>
|
<string name="encryption_explanation">Algoritmo di cifratura del database usato per tutti i dati.</string>
|
||||||
<string name="kdf_explanation">Per generare la chiave per l\'algoritmo di cifratura, la chiave principale viene trasformata usando una funzione di derivazione della chiave (con un sale casuale).</string>
|
<string name="kdf_explanation">Per generare la chiave per l\'algoritmo di cifratura, la chiave principale viene trasformata usando una funzione di derivazione della chiave (con un sale casuale).</string>
|
||||||
<string name="memory_usage">Utilizzo di memoria</string>
|
<string name="memory_usage">Utilizzo di memoria</string>
|
||||||
<string name="memory_usage_explanation">Quantità di memoria (in byte) utilizzabili dalla funzione di derivazione della chiave.</string>
|
<string name="memory_usage_explanation">Quantità di memoria utilizzabili dalla funzione di derivazione della chiave.</string>
|
||||||
<string name="parallelism">Parallelismo</string>
|
<string name="parallelism">Parallelismo</string>
|
||||||
<string name="parallelism_explanation">Grado di parallelismo (cioè numero di thread) usato dalla funzione di derivazione della chiave.</string>
|
<string name="parallelism_explanation">Grado di parallelismo (cioè numero di thread) usato dalla funzione di derivazione della chiave.</string>
|
||||||
<string name="sort_menu">Ordina</string>
|
<string name="sort_menu">Ordina</string>
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
<string name="autofill_service_name">Autocompletamento di KeePassDX</string>
|
<string name="autofill_service_name">Autocompletamento di KeePassDX</string>
|
||||||
<string name="autofill_sign_in_prompt">Accedi con KeePassDX</string>
|
<string name="autofill_sign_in_prompt">Accedi con KeePassDX</string>
|
||||||
<string name="set_autofill_service_title">Imposta servizio predefinito di autocompletamento</string>
|
<string name="set_autofill_service_title">Imposta servizio predefinito di autocompletamento</string>
|
||||||
<string name="autofill_explanation_summary">Attiva l\'autocompletamento per compilare velocemente i moduli in altre app</string>
|
<string name="autofill_explanation_summary">Attiva l\'autocompletamento per riempire velocemente i campi in altre app</string>
|
||||||
<string name="password_size_title">Dimensione password generata</string>
|
<string name="password_size_title">Dimensione password generata</string>
|
||||||
<string name="password_size_summary">Imposta la dimensione predefinita delle password generate</string>
|
<string name="password_size_summary">Imposta la dimensione predefinita delle password generate</string>
|
||||||
<string name="list_password_generator_options_title">Caratteri password</string>
|
<string name="list_password_generator_options_title">Caratteri password</string>
|
||||||
@@ -235,7 +235,7 @@
|
|||||||
<string name="other">Altro</string>
|
<string name="other">Altro</string>
|
||||||
<string name="keyboard">Tastiera</string>
|
<string name="keyboard">Tastiera</string>
|
||||||
<string name="magic_keyboard_title">Magitastiera</string>
|
<string name="magic_keyboard_title">Magitastiera</string>
|
||||||
<string name="magic_keyboard_explanation_summary">Attiva una tastiera personale che popola le tue password e i campi di identità</string>
|
<string name="magic_keyboard_explanation_summary">Attiva una tastiera personale che inserisce le tue password e i campi di identità</string>
|
||||||
<string name="allow_no_password_title">Non consentire nessuna chiave principale</string>
|
<string name="allow_no_password_title">Non consentire nessuna chiave principale</string>
|
||||||
<string name="allow_no_password_summary">Permetti di toccare il pulsante \"Apri\" se non sono selezionate credenziali</string>
|
<string name="allow_no_password_summary">Permetti di toccare il pulsante \"Apri\" se non sono selezionate credenziali</string>
|
||||||
<string name="enable_read_only_title">Protetto da scrittura</string>
|
<string name="enable_read_only_title">Protetto da scrittura</string>
|
||||||
@@ -413,7 +413,7 @@
|
|||||||
<string name="max_history_size_title">Dimensione massima</string>
|
<string name="max_history_size_title">Dimensione massima</string>
|
||||||
<string name="max_history_items_title">Numero massimo</string>
|
<string name="max_history_items_title">Numero massimo</string>
|
||||||
<string name="biometric_auto_open_prompt_title">Apri automaticamente la richiesta</string>
|
<string name="biometric_auto_open_prompt_title">Apri automaticamente la richiesta</string>
|
||||||
<string name="max_history_size_summary">Limita la dimensione (in byte) della cronologia per voce</string>
|
<string name="max_history_size_summary">Limita la dimensione della cronologia per voce</string>
|
||||||
<string name="max_history_items_summary">Limita il numero di elementi della cronologia per voce</string>
|
<string name="max_history_items_summary">Limita il numero di elementi della cronologia per voce</string>
|
||||||
<string name="recycle_bin_group_title">Gruppo cestino</string>
|
<string name="recycle_bin_group_title">Gruppo cestino</string>
|
||||||
<string name="database_data_compression_summary">La compressione dei dati riduce le dimensioni del database</string>
|
<string name="database_data_compression_summary">La compressione dei dati riduce le dimensioni del database</string>
|
||||||
@@ -548,4 +548,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Non è possibile ricostruire la lista correttamente.</string>
|
<string name="error_rebuild_list">Non è possibile ricostruire la lista correttamente.</string>
|
||||||
<string name="error_database_uri_null">Non è stato recuperato l\'indirizzo del database.</string>
|
<string name="error_database_uri_null">Non è stato recuperato l\'indirizzo del database.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Suggerimento di riempimento aggiunto.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Mostra i suggerimenti di riempimento campi in una tastiera compatibile</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Suggerimenti in linea</string>
|
||||||
|
<string name="warning_database_revoked">L\'accesso al file è stato revocato dal file manager, chiudi il database e riaprilo dalla sua posizione originale.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Sovrascrivi le modifiche esterne salvano il database o ricaricalo con gli ultimi cambiamenti.</string>
|
||||||
|
<string name="warning_database_info_changed">I dati nel tuo database sono stati modificati al di fuori di questa app.</string>
|
||||||
|
<string name="menu_reload_database">Ricarica database</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -226,7 +226,7 @@
|
|||||||
<string name="rounds">変換ラウンド</string>
|
<string name="rounds">変換ラウンド</string>
|
||||||
<string name="rounds_explanation">変換ラウンドを増やすことでブルート フォース攻撃に対する保護が強化されますが、読み込みと保存が本当に遅くなる可能性があります。</string>
|
<string name="rounds_explanation">変換ラウンドを増やすことでブルート フォース攻撃に対する保護が強化されますが、読み込みと保存が本当に遅くなる可能性があります。</string>
|
||||||
<string name="memory_usage">メモリ使用量</string>
|
<string name="memory_usage">メモリ使用量</string>
|
||||||
<string name="memory_usage_explanation">鍵導出関数が使用するメモリの量(バイト単位)です。</string>
|
<string name="memory_usage_explanation">鍵導出関数が使用するメモリの量です。</string>
|
||||||
<string name="parallelism">並列処理</string>
|
<string name="parallelism">並列処理</string>
|
||||||
<string name="parallelism_explanation">鍵導出関数が使用する並列処理のレベル(スレッド数)です。</string>
|
<string name="parallelism_explanation">鍵導出関数が使用する並列処理のレベル(スレッド数)です。</string>
|
||||||
<string name="saving_database">データベースを保存しています…</string>
|
<string name="saving_database">データベースを保存しています…</string>
|
||||||
@@ -325,7 +325,7 @@
|
|||||||
<string name="max_history_items_title">最大値</string>
|
<string name="max_history_items_title">最大値</string>
|
||||||
<string name="max_history_items_summary">エントリーあたりの履歴項目の数を制限します</string>
|
<string name="max_history_items_summary">エントリーあたりの履歴項目の数を制限します</string>
|
||||||
<string name="max_history_size_title">最大サイズ</string>
|
<string name="max_history_size_title">最大サイズ</string>
|
||||||
<string name="max_history_size_summary">エントリーあたりの履歴のサイズ(バイト単位)を制限します</string>
|
<string name="max_history_size_summary">エントリーあたりの履歴のサイズを制限します</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">更新を推奨</string>
|
<string name="settings_database_recommend_changing_master_key_title">更新を推奨</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">マスターキーの変更を推奨します(日数)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">マスターキーの変更を推奨します(日数)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">更新を強制</string>
|
<string name="settings_database_force_changing_master_key_title">更新を強制</string>
|
||||||
@@ -543,5 +543,13 @@
|
|||||||
<string name="content">コンテンツ</string>
|
<string name="content">コンテンツ</string>
|
||||||
<string name="kdf_Argon2id">Argon2id</string>
|
<string name="kdf_Argon2id">Argon2id</string>
|
||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_database_uri_null">データベースのURIが見つかりません。</string>
|
<string name="error_database_uri_null">データベースの URI が取得できません。</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">自動入力候補が追加されました。</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">自動入力候補を互換性のあるキーボード上に直接表示することを試みます</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">インライン自動入力</string>
|
||||||
|
<string name="warning_database_revoked">ファイルへのアクセス権がファイル マネージャーによって取り消されました。データベースを閉じて、ファイルの場所から再度開いてください。</string>
|
||||||
|
<string name="warning_database_info_changed_options">データベースを保存して外部の変更を上書きするか、再度読み込んで最新の変更を反映させてください。</string>
|
||||||
|
<string name="warning_database_info_changed">データベース ファイルに含まれる情報は、アプリの外部で変更されています。</string>
|
||||||
|
<string name="menu_reload_database">データベースを再度読み込む</string>
|
||||||
|
<string name="error_rebuild_list">リストを正しく再構築できません。</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
<string name="entry_keyfile">Rakto failas</string>
|
<string name="entry_keyfile">Rakto failas</string>
|
||||||
<string name="search">Įrašo pavadinimas/aprašymas</string>
|
<string name="search">Įrašo pavadinimas/aprašymas</string>
|
||||||
<string name="menu_change_key_settings">Pakeisti master raktą</string>
|
<string name="menu_change_key_settings">Pakeisti master raktą</string>
|
||||||
<string name="entry_accessed">Naudota:</string>
|
<string name="entry_accessed">Naudota</string>
|
||||||
<string name="hide_password_title">Maskuoti slaptažodį</string>
|
<string name="hide_password_title">Maskuoti slaptažodį</string>
|
||||||
<string name="space">Tarpas</string>
|
<string name="space">Tarpas</string>
|
||||||
<string name="special">Specialus</string>
|
<string name="special">Specialus</string>
|
||||||
|
|||||||
@@ -300,7 +300,7 @@
|
|||||||
<string name="sort_groups_before">മുമ്പുള്ള ഗ്രൂപ്പുകൾ</string>
|
<string name="sort_groups_before">മുമ്പുള്ള ഗ്രൂപ്പുകൾ</string>
|
||||||
<string name="sort_ascending">ആദ്യത്തേത് ഏറ്റവും കുറഞ്ഞത്↓</string>
|
<string name="sort_ascending">ആദ്യത്തേത് ഏറ്റവും കുറഞ്ഞത്↓</string>
|
||||||
<string name="parallelism_explanation">കീ ഡെറിവേഷൻ ഫംഗ്ഷൻ ഉപയോഗിക്കുന്ന സമാന്തരതയുടെ ബിരുദം (അതായത് ത്രെഡുകളുടെ എണ്ണം).</string>
|
<string name="parallelism_explanation">കീ ഡെറിവേഷൻ ഫംഗ്ഷൻ ഉപയോഗിക്കുന്ന സമാന്തരതയുടെ ബിരുദം (അതായത് ത്രെഡുകളുടെ എണ്ണം).</string>
|
||||||
<string name="memory_usage_explanation">കീ ഡെറിവേഷൻ ഫംഗ്ഷൻ ഉപയോഗിക്കുന്ന മെമ്മറിയുടെ അളവ് (ബൈറ്റുകളിൽ).</string>
|
<string name="memory_usage_explanation">കീ ഡെറിവേഷൻ ഫംഗ്ഷൻ ഉപയോഗിക്കുന്ന മെമ്മറിയുടെ അളവ് .</string>
|
||||||
<string name="encryption_explanation">എല്ലാ ഡാറ്റയ്ക്കും ഉപയോഗിക്കുന്ന ഡാറ്റാബേസ് എൻക്രിപ്ഷൻ അൽഗോരിതം.</string>
|
<string name="encryption_explanation">എല്ലാ ഡാറ്റയ്ക്കും ഉപയോഗിക്കുന്ന ഡാറ്റാബേസ് എൻക്രിപ്ഷൻ അൽഗോരിതം.</string>
|
||||||
<string name="hide_broken_locations_summary">സമീപകാല ഡാറ്റാബേസുകളുടെ പട്ടികയിൽ നിന്ന് തകർന്ന ലിങ്കുകൾ മറയ്ക്കുക</string>
|
<string name="hide_broken_locations_summary">സമീപകാല ഡാറ്റാബേസുകളുടെ പട്ടികയിൽ നിന്ന് തകർന്ന ലിങ്കുകൾ മറയ്ക്കുക</string>
|
||||||
<string name="hide_broken_locations_title">തകർന്ന ഡാറ്റാബേസ് ലിങ്കുകൾ മറയ്ക്കുക</string>
|
<string name="hide_broken_locations_title">തകർന്ന ഡാറ്റാബേസ് ലിങ്കുകൾ മറയ്ക്കുക</string>
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
<string name="rounds">Krypteringsomganger</string>
|
<string name="rounds">Krypteringsomganger</string>
|
||||||
<string name="rounds_explanation">Flere krypteringsomganger gir ytterligere beskyttelse mot råmaktsangrep, men kan virkelig sakke ned innlasting og lagring.</string>
|
<string name="rounds_explanation">Flere krypteringsomganger gir ytterligere beskyttelse mot råmaktsangrep, men kan virkelig sakke ned innlasting og lagring.</string>
|
||||||
<string name="memory_usage">Minnebruk</string>
|
<string name="memory_usage">Minnebruk</string>
|
||||||
<string name="memory_usage_explanation">Mengden minne (i byte) brukt til nøkkelutledelsesfunksjonen.</string>
|
<string name="memory_usage_explanation">Mengden minne brukt til nøkkelutledelsesfunksjonen.</string>
|
||||||
<string name="parallelism">Parallellitet</string>
|
<string name="parallelism">Parallellitet</string>
|
||||||
<string name="parallelism_explanation">Graden av parallellitet (dvs. antallet tråder) brukt av nøkkelutledingsfunksjonen.</string>
|
<string name="parallelism_explanation">Graden av parallellitet (dvs. antallet tråder) brukt av nøkkelutledingsfunksjonen.</string>
|
||||||
<string name="saving_database">Lagrer database…</string>
|
<string name="saving_database">Lagrer database…</string>
|
||||||
|
|||||||
@@ -180,7 +180,7 @@
|
|||||||
<string name="encryption_explanation">Database-encryptie-algoritme dat voor alle gegevens wordt gebruikt.</string>
|
<string name="encryption_explanation">Database-encryptie-algoritme dat voor alle gegevens wordt gebruikt.</string>
|
||||||
<string name="kdf_explanation">Om de sleutel voor het algoritme te kunnen genereren, wordt de hoofdsleutel getransformeerd middels een willekeurige afleidingsfunctie.</string>
|
<string name="kdf_explanation">Om de sleutel voor het algoritme te kunnen genereren, wordt de hoofdsleutel getransformeerd middels een willekeurige afleidingsfunctie.</string>
|
||||||
<string name="memory_usage">Geheugengebruik</string>
|
<string name="memory_usage">Geheugengebruik</string>
|
||||||
<string name="memory_usage_explanation">De hoeveelheid geheugen (bytes) dat de afleidingsfunctie mag gebruiken.</string>
|
<string name="memory_usage_explanation">De hoeveelheid geheugen dat de afleidingsfunctie mag gebruiken.</string>
|
||||||
<string name="parallelism">Parallellen</string>
|
<string name="parallelism">Parallellen</string>
|
||||||
<string name="parallelism_explanation">Het aantal parallellen (aantal threads) dat de afleidingsfunctie mag gebruiken.</string>
|
<string name="parallelism_explanation">Het aantal parallellen (aantal threads) dat de afleidingsfunctie mag gebruiken.</string>
|
||||||
<string name="sort_menu">Sorteren</string>
|
<string name="sort_menu">Sorteren</string>
|
||||||
@@ -397,7 +397,7 @@
|
|||||||
<string name="max_history_items_title">Maximum aantal</string>
|
<string name="max_history_items_title">Maximum aantal</string>
|
||||||
<string name="max_history_items_summary">Beperk het aantal geschiedenisitems per item</string>
|
<string name="max_history_items_summary">Beperk het aantal geschiedenisitems per item</string>
|
||||||
<string name="max_history_size_title">Maximum</string>
|
<string name="max_history_size_title">Maximum</string>
|
||||||
<string name="max_history_size_summary">Geschiedenis (bytes) per item beperken</string>
|
<string name="max_history_size_summary">Geschiedenis per item beperken</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Vernieuwing aanbevelen</string>
|
<string name="settings_database_recommend_changing_master_key_title">Vernieuwing aanbevelen</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Aanbeveling de hoofdsleutel te wijzigen (dagen)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Aanbeveling de hoofdsleutel te wijzigen (dagen)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Vernieuwing afdwingen</string>
|
<string name="settings_database_force_changing_master_key_title">Vernieuwing afdwingen</string>
|
||||||
|
|||||||
@@ -175,7 +175,7 @@
|
|||||||
<string name="encryption_explanation">Algorytm szyfrowania bazy danych używany dla wszystkich danych.</string>
|
<string name="encryption_explanation">Algorytm szyfrowania bazy danych używany dla wszystkich danych.</string>
|
||||||
<string name="kdf_explanation">Aby wygenerować klucz dla algorytmu szyfrowania, klucz główny jest transformowany przy użyciu losowo solonej funkcji wyprowadzania klucza.</string>
|
<string name="kdf_explanation">Aby wygenerować klucz dla algorytmu szyfrowania, klucz główny jest transformowany przy użyciu losowo solonej funkcji wyprowadzania klucza.</string>
|
||||||
<string name="memory_usage">Użycie pamięci</string>
|
<string name="memory_usage">Użycie pamięci</string>
|
||||||
<string name="memory_usage_explanation">Ilość pamięci (w bajtach) do użycia przez funkcję wyprowadzania klucza.</string>
|
<string name="memory_usage_explanation">Ilość pamięci do użycia przez funkcję wyprowadzania klucza.</string>
|
||||||
<string name="parallelism">Równoległy</string>
|
<string name="parallelism">Równoległy</string>
|
||||||
<string name="parallelism_explanation">Stopień równoległości (tj. Liczba wątków) wykorzystywany przez funkcję wyprowadzania klucza.</string>
|
<string name="parallelism_explanation">Stopień równoległości (tj. Liczba wątków) wykorzystywany przez funkcję wyprowadzania klucza.</string>
|
||||||
<string name="sort_menu">Sortuj</string>
|
<string name="sort_menu">Sortuj</string>
|
||||||
@@ -402,7 +402,7 @@
|
|||||||
<string name="advanced_unlock_explanation_summary">Użyj zaawansowanego odblokowywania w celu łatwiejszego otwierania bazy danych</string>
|
<string name="advanced_unlock_explanation_summary">Użyj zaawansowanego odblokowywania w celu łatwiejszego otwierania bazy danych</string>
|
||||||
<string name="database_data_compression_summary">Kompresja danych zmniejsza rozmiar bazy danych</string>
|
<string name="database_data_compression_summary">Kompresja danych zmniejsza rozmiar bazy danych</string>
|
||||||
<string name="max_history_items_title">Maksymalna liczba</string>
|
<string name="max_history_items_title">Maksymalna liczba</string>
|
||||||
<string name="max_history_size_summary">Ogranicz rozmiar historii (w bajtach) na wpis</string>
|
<string name="max_history_size_summary">Ogranicz rozmiar historii na wpis</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Wymuś odnowienie</string>
|
<string name="settings_database_force_changing_master_key_title">Wymuś odnowienie</string>
|
||||||
<string name="settings_database_force_changing_master_key_next_time_title">Wymuś odnowienie następnym razem</string>
|
<string name="settings_database_force_changing_master_key_next_time_title">Wymuś odnowienie następnym razem</string>
|
||||||
<string name="settings_database_force_changing_master_key_next_time_summary">Wymagaj zmiany klucza głównego następnym razem (raz)</string>
|
<string name="settings_database_force_changing_master_key_next_time_summary">Wymagaj zmiany klucza głównego następnym razem (raz)</string>
|
||||||
@@ -541,4 +541,15 @@
|
|||||||
<string name="advanced_unlock_scanning_error">Błąd zaawansowanego odblokowywania: %1$s</string>
|
<string name="advanced_unlock_scanning_error">Błąd zaawansowanego odblokowywania: %1$s</string>
|
||||||
<string name="error_rebuild_list">Nie można poprawnie odbudować listy.</string>
|
<string name="error_rebuild_list">Nie można poprawnie odbudować listy.</string>
|
||||||
<string name="error_database_uri_null">Nie można pobrać identyfikatora URI bazy danych.</string>
|
<string name="error_database_uri_null">Nie można pobrać identyfikatora URI bazy danych.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Dodano sugestie autouzupełniania.</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Sugestie wbudowane</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Spróbuj wyświetlić sugestie autouzupełniania bezpośrednio z kompatybilnej klawiatury</string>
|
||||||
|
<string name="temp_advanced_unlock_enable_title">Zaawansowane odblokowywanie tymczasowe</string>
|
||||||
|
<string name="advanced_unlock_prompt_not_initialized">Nie można zainicjować monitu odblokowania zaawansowanego.</string>
|
||||||
|
<string name="open_advanced_unlock_prompt_store_credential">Otwórz monit odblokowania zaawansowanego, aby odblokować bazę danych</string>
|
||||||
|
<string name="open_advanced_unlock_prompt_unlock_database">Otwórz monit odblokowania zaawansowanego, aby odblokować bazę danych</string>
|
||||||
|
<string name="warning_database_revoked">Dostęp do pliku odwołany przez menedżera plików, zamknij bazę danych i otwórz ją ponownie z jej lokalizacji.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Nadpisz zewnętrzne modyfikacje, zapisując bazę danych lub przeładuj ją z najnowszymi zmianami.</string>
|
||||||
|
<string name="warning_database_info_changed">Informacje zawarte w pliku bazy danych zostały zmodyfikowane poza aplikacją.</string>
|
||||||
|
<string name="menu_reload_database">Załaduj ponownie bazę danych</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -173,7 +173,7 @@
|
|||||||
<string name="encryption_explanation">Algoritmo de encriptação usado para todos os dados.</string>
|
<string name="encryption_explanation">Algoritmo de encriptação usado para todos os dados.</string>
|
||||||
<string name="kdf_explanation">Para gerar a chave para o algoritmo de criptografia, a chave mestra é transformada usando uma função de derivação de chave com sal aleatoriamente.</string>
|
<string name="kdf_explanation">Para gerar a chave para o algoritmo de criptografia, a chave mestra é transformada usando uma função de derivação de chave com sal aleatoriamente.</string>
|
||||||
<string name="memory_usage">Uso de memória</string>
|
<string name="memory_usage">Uso de memória</string>
|
||||||
<string name="memory_usage_explanation">Quantidade de memória (in bytes) a ser usada pela função de derivação de chave.</string>
|
<string name="memory_usage_explanation">Quantidade de memória a ser usada pela função de derivação de chave.</string>
|
||||||
<string name="parallelism">Paralelismo</string>
|
<string name="parallelism">Paralelismo</string>
|
||||||
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
|
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
|
||||||
<string name="sort_menu">Ordenar</string>
|
<string name="sort_menu">Ordenar</string>
|
||||||
@@ -395,7 +395,7 @@
|
|||||||
<string name="max_history_items_title">Número máximo</string>
|
<string name="max_history_items_title">Número máximo</string>
|
||||||
<string name="max_history_items_summary">Limitar o número de itens do histórico por entrada</string>
|
<string name="max_history_items_summary">Limitar o número de itens do histórico por entrada</string>
|
||||||
<string name="max_history_size_title">Tamanho máximo</string>
|
<string name="max_history_size_title">Tamanho máximo</string>
|
||||||
<string name="max_history_size_summary">Limitar o tamanho do histórico (em bytes) por entrada</string>
|
<string name="max_history_size_summary">Limitar o tamanho do histórico por entrada</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Renovação recomendada</string>
|
<string name="settings_database_recommend_changing_master_key_title">Renovação recomendada</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Recomende a mudança da chave mestra (em dias)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Recomende a mudança da chave mestra (em dias)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
|
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
<string name="create_keepass_file">Criar base de dados</string>
|
<string name="create_keepass_file">Criar base de dados</string>
|
||||||
<string name="kdf_explanation">Para gerar uma chave para o algoritmo de encriptação, a chave mestre comprimida (SHA-256) é transformada usando uma função de derivação de chave (com um salt aleatório).</string>
|
<string name="kdf_explanation">Para gerar uma chave para o algoritmo de encriptação, a chave mestre comprimida (SHA-256) é transformada usando uma função de derivação de chave (com um salt aleatório).</string>
|
||||||
<string name="memory_usage">Uso de memória</string>
|
<string name="memory_usage">Uso de memória</string>
|
||||||
<string name="memory_usage_explanation">Quantidade de memória (em bytes) a ser usada pela função de derivação de chave.</string>
|
<string name="memory_usage_explanation">Quantidade de memória a ser usada pela função de derivação de chave.</string>
|
||||||
<string name="parallelism">Paralelismo</string>
|
<string name="parallelism">Paralelismo</string>
|
||||||
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
|
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
|
||||||
<string name="sort_menu">Ordenar</string>
|
<string name="sort_menu">Ordenar</string>
|
||||||
@@ -399,7 +399,7 @@
|
|||||||
<string name="menu_security_settings">Configurações de segurança</string>
|
<string name="menu_security_settings">Configurações de segurança</string>
|
||||||
<string name="disable">Desativar</string>
|
<string name="disable">Desativar</string>
|
||||||
<string name="lock_database_show_button_summary">Mostrar o botão de bloqueio na interface do utilizador</string>
|
<string name="lock_database_show_button_summary">Mostrar o botão de bloqueio na interface do utilizador</string>
|
||||||
<string name="max_history_size_summary">Limitar o tamanho do histórico (em bytes) por entrada</string>
|
<string name="max_history_size_summary">Limitar o tamanho do histórico por entrada</string>
|
||||||
<string name="error_otp_secret_key">A chave secreta deve estar em formato Base32.</string>
|
<string name="error_otp_secret_key">A chave secreta deve estar em formato Base32.</string>
|
||||||
<string name="enable">Ativar</string>
|
<string name="enable">Ativar</string>
|
||||||
<string name="database_data_compression_title">Compressão dos dados</string>
|
<string name="database_data_compression_title">Compressão dos dados</string>
|
||||||
@@ -453,7 +453,7 @@
|
|||||||
<string name="entry_otp">OTP</string>
|
<string name="entry_otp">OTP</string>
|
||||||
<string name="compression_none">Nenhum</string>
|
<string name="compression_none">Nenhum</string>
|
||||||
<string name="enable_auto_save_database_summary">Gravar a base de dados automaticamente depois de uma ação importante (somente no modo \"Modificável\")</string>
|
<string name="enable_auto_save_database_summary">Gravar a base de dados automaticamente depois de uma ação importante (somente no modo \"Modificável\")</string>
|
||||||
<string name="error_copy_group_here">Mão pode copiar um grupo aqui.</string>
|
<string name="error_copy_group_here">Não pode copiar um grupo aqui.</string>
|
||||||
<string name="menu_delete_entry_history">Apagar histórico</string>
|
<string name="menu_delete_entry_history">Apagar histórico</string>
|
||||||
<string name="error_disallow_no_credentials">Ao menos uma credencial deve ser definida.</string>
|
<string name="error_disallow_no_credentials">Ao menos uma credencial deve ser definida.</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
|
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
|
||||||
@@ -491,4 +491,31 @@
|
|||||||
\n
|
\n
|
||||||
\nA sua base de dados pode se tornar muito grande e reduzir o desempenho com este envio.</string>
|
\nA sua base de dados pode se tornar muito grande e reduzir o desempenho com este envio.</string>
|
||||||
<string name="content_description_credentials_information">Informações sobre credenciais</string>
|
<string name="content_description_credentials_information">Informações sobre credenciais</string>
|
||||||
|
<string name="device_credential">Credencial do dispositivo</string>
|
||||||
|
<string name="credential_before_click_advanced_unlock_button">Digite a palavra-chave, e depois clique no botão \"Desbloqueio avançado\".</string>
|
||||||
|
<string name="advanced_unlock_prompt_not_initialized">Incapaz de inicializar o desbloqueio antecipado.</string>
|
||||||
|
<string name="advanced_unlock_scanning_error">Erro de desbloqueio avançado: %1$s</string>
|
||||||
|
<string name="advanced_unlock_not_recognized">Não conseguia reconhecer impressão de desbloqueio avançado</string>
|
||||||
|
<string name="advanced_unlock_invalid_key">Não consegue ler a chave de desbloqueio avançada. Por favor, apague-a e repita o procedimento de desbloqueio de reconhecimento.</string>
|
||||||
|
<string name="advanced_unlock_prompt_extract_credential_message">Extrair credencial de base de dados com dados de desbloqueio avançados</string>
|
||||||
|
<string name="advanced_unlock_prompt_extract_credential_title">Base de dados aberta com reconhecimento avançado de desbloqueio</string>
|
||||||
|
<string name="advanced_unlock_prompt_store_credential_message">Advertência: Ainda precisa de se lembrar da sua palavra-passe principal se usar o reconhecimento avançado de desbloqueio.</string>
|
||||||
|
<string name="advanced_unlock_prompt_store_credential_title">Reconhecimento avançado de desbloqueio</string>
|
||||||
|
<string name="open_advanced_unlock_prompt_store_credential">Abrir o alerta de desbloqueio avançado para armazenar as credenciais</string>
|
||||||
|
<string name="open_advanced_unlock_prompt_unlock_database">Abrir o alerta de desbloqueio avançado para desbloquear a base de dados</string>
|
||||||
|
<string name="biometric_security_update_required">É necessária uma actualização de segurança biométrica.</string>
|
||||||
|
<string name="configure_biometric">O escaneamento biométrico é suportado, mas não configurado.</string>
|
||||||
|
<string name="warning_database_revoked">Acesso ao ficheiro revogado pelo gestor do ficheiro, fechar a base de dados e reabri-la a partir da sua localização.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Sobregravar as modificações externas, guardando a base de dados ou recarregando-a com as últimas alterações.</string>
|
||||||
|
<string name="warning_database_info_changed">A informação contida no seu ficheiro de base de dados foi modificada fora da aplicação.</string>
|
||||||
|
<string name="warning_empty_recycle_bin">Apagar permanentemente todos os nós do caixote do lixo da reciclagem\?</string>
|
||||||
|
<string name="registration_mode">Modo de registo</string>
|
||||||
|
<string name="save_mode">Modo Guardar</string>
|
||||||
|
<string name="search_mode">Modo de pesquisa</string>
|
||||||
|
<string name="menu_keystore_remove_key">Apagar chave de desbloqueio avançada</string>
|
||||||
|
<string name="menu_reload_database">Recarregar base de dados</string>
|
||||||
|
<string name="error_rebuild_list">Incapaz de reconstruir adequadamente a lista.</string>
|
||||||
|
<string name="error_database_uri_null">O URI da base de dados não pode ser recuperado.</string>
|
||||||
|
<string name="error_field_name_already_exists">O nome do campo já existe.</string>
|
||||||
|
<string name="error_registration_read_only">Salvar um novo item não é permitido numa base de dados só de leitura</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
<string name="saving_database">A gravar a base de dados…</string>
|
<string name="saving_database">A gravar a base de dados…</string>
|
||||||
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
|
<string name="parallelism_explanation">Grau de paralelismo (ou seja, número de threads) usado pela função de derivação de chave.</string>
|
||||||
<string name="parallelism">Paralelismo</string>
|
<string name="parallelism">Paralelismo</string>
|
||||||
<string name="memory_usage_explanation">Quantidade de memória (em bytes) a ser usada pela função de derivação de chave.</string>
|
<string name="memory_usage_explanation">Quantidade de memória a ser usada pela função de derivação de chave.</string>
|
||||||
<string name="memory_usage">Uso de memória</string>
|
<string name="memory_usage">Uso de memória</string>
|
||||||
<string name="rounds_explanation">Rodadas adicionais de criptografia adicionam mais proteção contra ataques de força bruta, mas podem tornar o processo de carregar e gravar mais lentos.</string>
|
<string name="rounds_explanation">Rodadas adicionais de criptografia adicionam mais proteção contra ataques de força bruta, mas podem tornar o processo de carregar e gravar mais lentos.</string>
|
||||||
<string name="rounds">Rodadas de criptografia</string>
|
<string name="rounds">Rodadas de criptografia</string>
|
||||||
@@ -302,7 +302,7 @@
|
|||||||
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
|
<string name="settings_database_force_changing_master_key_title">Forçar renovação</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Recomendar mudança da chave mestre (em dias)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Recomendar mudança da chave mestre (em dias)</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Renovação recomendada</string>
|
<string name="settings_database_recommend_changing_master_key_title">Renovação recomendada</string>
|
||||||
<string name="max_history_size_summary">Limitar o tamanho do histórico (em bytes) por entrada</string>
|
<string name="max_history_size_summary">Limitar o tamanho do histórico por entrada</string>
|
||||||
<string name="max_history_size_title">Tamanho máximo</string>
|
<string name="max_history_size_title">Tamanho máximo</string>
|
||||||
<string name="max_history_items_summary">Limitar a quantidade de itens do histórico por entrada</string>
|
<string name="max_history_items_summary">Limitar a quantidade de itens do histórico por entrada</string>
|
||||||
<string name="max_history_items_title">Número máximo</string>
|
<string name="max_history_items_title">Número máximo</string>
|
||||||
|
|||||||
@@ -202,7 +202,7 @@
|
|||||||
<string name="rounds">Rundele de transformare</string>
|
<string name="rounds">Rundele de transformare</string>
|
||||||
<string name="rounds_explanation">Rundele suplimentare de criptare oferă o protecție mai mare împotriva atacurilor de forță brută, dar pot încetini cu adevărat încărcarea și economisirea.</string>
|
<string name="rounds_explanation">Rundele suplimentare de criptare oferă o protecție mai mare împotriva atacurilor de forță brută, dar pot încetini cu adevărat încărcarea și economisirea.</string>
|
||||||
<string name="memory_usage">Utilizarea memoriei</string>
|
<string name="memory_usage">Utilizarea memoriei</string>
|
||||||
<string name="memory_usage_explanation">Cantitatea de memorie (în octeți) care trebuie utilizată de funcția de derivare a cheilor.</string>
|
<string name="memory_usage_explanation">Cantitatea de memorie care trebuie utilizată de funcția de derivare a cheilor.</string>
|
||||||
<string name="parallelism">Paralelism</string>
|
<string name="parallelism">Paralelism</string>
|
||||||
<string name="parallelism_explanation">Gradul de paralelism (adică numărul de fire) utilizat de funcția de derivare a cheilor.</string>
|
<string name="parallelism_explanation">Gradul de paralelism (adică numărul de fire) utilizat de funcția de derivare a cheilor.</string>
|
||||||
<string name="saving_database">Salvarea bazei de date …</string>
|
<string name="saving_database">Salvarea bazei de date …</string>
|
||||||
@@ -282,7 +282,7 @@
|
|||||||
<string name="max_history_items_title">Număr maxim</string>
|
<string name="max_history_items_title">Număr maxim</string>
|
||||||
<string name="max_history_items_summary">Limitați numărul de articole istorice pe intrare</string>
|
<string name="max_history_items_summary">Limitați numărul de articole istorice pe intrare</string>
|
||||||
<string name="max_history_size_title">Dimensiune maximă</string>
|
<string name="max_history_size_title">Dimensiune maximă</string>
|
||||||
<string name="max_history_size_summary">Limitați dimensiunea istoricului (în octeți) pe intrare</string>
|
<string name="max_history_size_summary">Limitați dimensiunea istoricului pe intrare</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Recomandă reînnoirea</string>
|
<string name="settings_database_recommend_changing_master_key_title">Recomandă reînnoirea</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Recomandă schimbarea cheii master (zile)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Recomandă schimbarea cheii master (zile)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Forteaza reinoirea</string>
|
<string name="settings_database_force_changing_master_key_title">Forteaza reinoirea</string>
|
||||||
|
|||||||
@@ -95,7 +95,7 @@
|
|||||||
<string name="lowercase">Строчные</string>
|
<string name="lowercase">Строчные</string>
|
||||||
<string name="hide_password_title">Скрывать пароли</string>
|
<string name="hide_password_title">Скрывать пароли</string>
|
||||||
<string name="hide_password_summary">Скрывать пароли за (***) по умолчанию</string>
|
<string name="hide_password_summary">Скрывать пароли за (***) по умолчанию</string>
|
||||||
<string name="about">Сведения</string>
|
<string name="about">О программе</string>
|
||||||
<string name="menu_change_key_settings">Изменить главный пароль</string>
|
<string name="menu_change_key_settings">Изменить главный пароль</string>
|
||||||
<string name="settings">Настройки</string>
|
<string name="settings">Настройки</string>
|
||||||
<string name="menu_database_settings">Настройки базы</string>
|
<string name="menu_database_settings">Настройки базы</string>
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
<string name="encryption_explanation">Алгоритм шифрования базы для всех данных.</string>
|
<string name="encryption_explanation">Алгоритм шифрования базы для всех данных.</string>
|
||||||
<string name="kdf_explanation">При создании ключа для алгоритма шифрования, главный пароль преобразуется при помощи функции формирования ключа со случайной солью.</string>
|
<string name="kdf_explanation">При создании ключа для алгоритма шифрования, главный пароль преобразуется при помощи функции формирования ключа со случайной солью.</string>
|
||||||
<string name="memory_usage">Использование памяти</string>
|
<string name="memory_usage">Использование памяти</string>
|
||||||
<string name="memory_usage_explanation">Объём памяти (в байтах), который будет использоваться функцией формирования ключа.</string>
|
<string name="memory_usage_explanation">Объём памяти, который будет использоваться функцией формирования ключа.</string>
|
||||||
<string name="parallelism">Уровень параллелизма</string>
|
<string name="parallelism">Уровень параллелизма</string>
|
||||||
<string name="parallelism_explanation">Уровень параллелизма (т.е. количество потоков), используемый функцией формирования ключа.</string>
|
<string name="parallelism_explanation">Уровень параллелизма (т.е. количество потоков), используемый функцией формирования ключа.</string>
|
||||||
<string name="sort_menu">Сортировка</string>
|
<string name="sort_menu">Сортировка</string>
|
||||||
@@ -295,7 +295,7 @@
|
|||||||
<string name="html_text_dev_feature_work_hard">Мы прилагаем все усилия, чтобы быстро выпустить эту функцию.</string>
|
<string name="html_text_dev_feature_work_hard">Мы прилагаем все усилия, чтобы быстро выпустить эту функцию.</string>
|
||||||
<string name="html_text_dev_feature_upgrade">Не забывайте обновлять приложение.</string>
|
<string name="html_text_dev_feature_upgrade">Не забывайте обновлять приложение.</string>
|
||||||
<string name="download">Скачать</string>
|
<string name="download">Скачать</string>
|
||||||
<string name="contribute">Содействие</string>
|
<string name="contribute">Помочь проекту</string>
|
||||||
<string name="encryption_chacha20">ChaCha20</string>
|
<string name="encryption_chacha20">ChaCha20</string>
|
||||||
<string name="kdf_AES">AES</string>
|
<string name="kdf_AES">AES</string>
|
||||||
<string name="style_choose_title">Тема приложения</string>
|
<string name="style_choose_title">Тема приложения</string>
|
||||||
@@ -393,7 +393,7 @@
|
|||||||
<string name="max_history_items_title">Максимум записей</string>
|
<string name="max_history_items_title">Максимум записей</string>
|
||||||
<string name="max_history_items_summary">Ограничение числа элементов истории каждой записи</string>
|
<string name="max_history_items_summary">Ограничение числа элементов истории каждой записи</string>
|
||||||
<string name="max_history_size_title">Максимальный размер</string>
|
<string name="max_history_size_title">Максимальный размер</string>
|
||||||
<string name="max_history_size_summary">Ограничение размера истории каждой записи (в байтах)</string>
|
<string name="max_history_size_summary">Ограничение размера истории каждой записи</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Рекомендуемая смена</string>
|
<string name="settings_database_recommend_changing_master_key_title">Рекомендуемая смена</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Рекомендовать менять главный пароль (в днях)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Рекомендовать менять главный пароль (в днях)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Принудительная смена</string>
|
<string name="settings_database_force_changing_master_key_title">Принудительная смена</string>
|
||||||
@@ -545,4 +545,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2D</string>
|
<string name="kdf_Argon2d">Argon2D</string>
|
||||||
<string name="error_database_uri_null">Невозможно получить URI базы.</string>
|
<string name="error_database_uri_null">Невозможно получить URI базы.</string>
|
||||||
<string name="error_rebuild_list">Невозможно правильно перестроить список.</string>
|
<string name="error_rebuild_list">Невозможно правильно перестроить список.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Предложения автозаполнения добавлены.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Показывать предложения автозаполнения непосредственно в совместимой клавиатуре</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Встроенные предложения</string>
|
||||||
|
<string name="warning_database_revoked">Доступ к файлу отозван файловым менеджером, закройте базу и снова откройте.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Сохранить базу, перезаписав внешние изменения, или перезагрузить её с последними изменениями.</string>
|
||||||
|
<string name="warning_database_info_changed">Информация, содержащаяся в файле базы, была изменена вне этого приложения.</string>
|
||||||
|
<string name="menu_reload_database">Перезагрузить базу</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -184,7 +184,7 @@
|
|||||||
<string name="encryption_explanation">Krypteringsalgoritm som används för all data i databasen.</string>
|
<string name="encryption_explanation">Krypteringsalgoritm som används för all data i databasen.</string>
|
||||||
<string name="kdf_explanation">För att generera nyckeln till krypteringsalgoritmen kommer huvudnyckeln transformeras med en slumpmässigt saltad nyckelderivatsfunktion.</string>
|
<string name="kdf_explanation">För att generera nyckeln till krypteringsalgoritmen kommer huvudnyckeln transformeras med en slumpmässigt saltad nyckelderivatsfunktion.</string>
|
||||||
<string name="memory_usage">Minnesanvändning</string>
|
<string name="memory_usage">Minnesanvändning</string>
|
||||||
<string name="memory_usage_explanation">Mängd minne (i bytes) som ska användas av nyckelderivatsfunktionen.</string>
|
<string name="memory_usage_explanation">Mängd minne som ska användas av nyckelderivatsfunktionen.</string>
|
||||||
<string name="parallelism">Parallellism</string>
|
<string name="parallelism">Parallellism</string>
|
||||||
<string name="parallelism_explanation">Grad av parallellism (dvs. antal trådar) som används av nyckelderivatsfuntionen.</string>
|
<string name="parallelism_explanation">Grad av parallellism (dvs. antal trådar) som används av nyckelderivatsfuntionen.</string>
|
||||||
<string name="sort_menu">Sortera</string>
|
<string name="sort_menu">Sortera</string>
|
||||||
@@ -392,7 +392,7 @@
|
|||||||
<string name="max_history_items_title">Max. historikobjekt</string>
|
<string name="max_history_items_title">Max. historikobjekt</string>
|
||||||
<string name="max_history_items_summary">Begränsar antalet historikobjekt per post</string>
|
<string name="max_history_items_summary">Begränsar antalet historikobjekt per post</string>
|
||||||
<string name="max_history_size_title">Max. historikstorlek</string>
|
<string name="max_history_size_title">Max. historikstorlek</string>
|
||||||
<string name="max_history_size_summary">Begränsa historikens storlek per post (i bytes)</string>
|
<string name="max_history_size_summary">Begränsa historikens storlek per post</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Rekommenderas att ändra</string>
|
<string name="settings_database_recommend_changing_master_key_title">Rekommenderas att ändra</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Rekommenderas att ändra huvudnyckeln (dagar)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Rekommenderas att ändra huvudnyckeln (dagar)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Tvingad ändring</string>
|
<string name="settings_database_force_changing_master_key_title">Tvingad ändring</string>
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
<string name="rounds">Dönüşüm turları</string>
|
<string name="rounds">Dönüşüm turları</string>
|
||||||
<string name="rounds_explanation">Ek şifreleme turları, kaba kuvvet saldırılarına karşı daha yüksek koruma sağlar, ancak yükleme ve kaydetmeyi gerçekten yavaşlatabilir.</string>
|
<string name="rounds_explanation">Ek şifreleme turları, kaba kuvvet saldırılarına karşı daha yüksek koruma sağlar, ancak yükleme ve kaydetmeyi gerçekten yavaşlatabilir.</string>
|
||||||
<string name="memory_usage">Hafıza kullanımı</string>
|
<string name="memory_usage">Hafıza kullanımı</string>
|
||||||
<string name="memory_usage_explanation">Anahtar türetme işlevi tarafından kullanılacak bellek miktarı (bayt olarak).</string>
|
<string name="memory_usage_explanation">Anahtar türetme işlevi tarafından kullanılacak bellek miktarı.</string>
|
||||||
<string name="parallelism">Paralellik</string>
|
<string name="parallelism">Paralellik</string>
|
||||||
<string name="parallelism_explanation">Anahtar türev fonksiyonu tarafından kullanılan paralellik derecesi (yani iplik sayısı).</string>
|
<string name="parallelism_explanation">Anahtar türev fonksiyonu tarafından kullanılan paralellik derecesi (yani iplik sayısı).</string>
|
||||||
<string name="saving_database">Veri tabanı kaydediliyor…</string>
|
<string name="saving_database">Veri tabanı kaydediliyor…</string>
|
||||||
@@ -376,7 +376,7 @@
|
|||||||
<string name="max_history_items_title">Azami sayı</string>
|
<string name="max_history_items_title">Azami sayı</string>
|
||||||
<string name="max_history_items_summary">Girdi başına geçmiş ögelerinin sayısını sınırla</string>
|
<string name="max_history_items_summary">Girdi başına geçmiş ögelerinin sayısını sınırla</string>
|
||||||
<string name="max_history_size_title">Azami boyut</string>
|
<string name="max_history_size_title">Azami boyut</string>
|
||||||
<string name="max_history_size_summary">Girdi başına geçmiş boyutunu (bayt olarak) sınırla</string>
|
<string name="max_history_size_summary">Girdi başına geçmiş boyutunu sınırla</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Yenilemeyi öner</string>
|
<string name="settings_database_recommend_changing_master_key_title">Yenilemeyi öner</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Ana anahtarın değiştirilmesini öner (gün)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Ana anahtarın değiştirilmesini öner (gün)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Yenilemeyi zorla</string>
|
<string name="settings_database_force_changing_master_key_title">Yenilemeyi zorla</string>
|
||||||
@@ -529,4 +529,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Liste düzgün şekilde yeniden oluşturulamıyor.</string>
|
<string name="error_rebuild_list">Liste düzgün şekilde yeniden oluşturulamıyor.</string>
|
||||||
<string name="error_database_uri_null">Veri tabanı URI\'si alınamıyor.</string>
|
<string name="error_database_uri_null">Veri tabanı URI\'si alınamıyor.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Otomatik doldurma önerileri eklendi.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Doğrudan uyumlu bir klavyeden otomatik doldurma önerileri görüntülemeye çalış</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Satır içi öneriler</string>
|
||||||
|
<string name="warning_database_revoked">Dosyaya erişim dosya yöneticisi tarafından iptal edildi, veri tabanını kapatın ve bulunduğu yerden yeniden açın.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Veri tabanını kaydederek veya en son değişikliklerle yeniden yükleyerek harici değişikliklerin üzerine yazın.</string>
|
||||||
|
<string name="warning_database_info_changed">Veri tabanı dosyanızda bulunan bilgiler, uygulamanın dışında değiştirildi.</string>
|
||||||
|
<string name="menu_reload_database">Veri tabanını yeniden yükle</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -377,7 +377,7 @@
|
|||||||
<string name="settings_database_force_changing_master_key_title">Примусова зміна</string>
|
<string name="settings_database_force_changing_master_key_title">Примусова зміна</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Рекомендувати змінити головний ключ (днів)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Рекомендувати змінити головний ключ (днів)</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Рекомендувати змінити</string>
|
<string name="settings_database_recommend_changing_master_key_title">Рекомендувати змінити</string>
|
||||||
<string name="max_history_size_summary">Обмежити об\'єм історії (в байтах) кожного запису</string>
|
<string name="max_history_size_summary">Обмежити об\'єм історії кожного запису</string>
|
||||||
<string name="max_history_size_title">Максимальний об\'єм</string>
|
<string name="max_history_size_title">Максимальний об\'єм</string>
|
||||||
<string name="max_history_items_summary">Обмежити кількість елементів історії кожного запису</string>
|
<string name="max_history_items_summary">Обмежити кількість елементів історії кожного запису</string>
|
||||||
<string name="max_history_items_title">Максимальна кількість</string>
|
<string name="max_history_items_title">Максимальна кількість</string>
|
||||||
@@ -447,7 +447,7 @@
|
|||||||
<string name="sort_groups_before">Спочатку групи</string>
|
<string name="sort_groups_before">Спочатку групи</string>
|
||||||
<string name="sort_ascending">За зростанням ↓</string>
|
<string name="sort_ascending">За зростанням ↓</string>
|
||||||
<string name="sort_menu">Впорядкувати</string>
|
<string name="sort_menu">Впорядкувати</string>
|
||||||
<string name="memory_usage_explanation">Об\'єм пам\'яті (у байтах), необхідний для функції створення ключа.</string>
|
<string name="memory_usage_explanation">Об\'єм пам\'яті, необхідний для функції створення ключа.</string>
|
||||||
<string name="kdf_explanation">Для створення ключа алгоритму шифрування, головний ключ перетворюється за допомогою функції створення випадково приготованого ключа.</string>
|
<string name="kdf_explanation">Для створення ключа алгоритму шифрування, головний ключ перетворюється за допомогою функції створення випадково приготованого ключа.</string>
|
||||||
<string name="do_not_kill_app">Не закривайте застосунок…</string>
|
<string name="do_not_kill_app">Не закривайте застосунок…</string>
|
||||||
<string name="command_execution">Виконання команди…</string>
|
<string name="command_execution">Виконання команди…</string>
|
||||||
@@ -545,4 +545,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">Не вдалося належним чином відновити список.</string>
|
<string name="error_rebuild_list">Не вдалося належним чином відновити список.</string>
|
||||||
<string name="error_database_uri_null">Неможливо отримати URI бази даних.</string>
|
<string name="error_database_uri_null">Неможливо отримати URI бази даних.</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">Додано пропозиції автозаповнення.</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">Спробувати показ пропозицій автозаповнення безпосередньо з сумісної клавіатури</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">Вбудовані пропозиції</string>
|
||||||
|
<string name="warning_database_revoked">Доступ до файлу скасовано менеджером файлів, закрийте базу даних і знову відкрийте її з її розташування.</string>
|
||||||
|
<string name="warning_database_info_changed_options">Перезаписати зовнішні зміни, зберігши базу даних або перезавантажте її з найновішими змінами.</string>
|
||||||
|
<string name="warning_database_info_changed">Відомості, що містяться у файлі бази даних, змінено за межами застосунку.</string>
|
||||||
|
<string name="menu_reload_database">Перезавантажити базу даних</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -178,7 +178,7 @@
|
|||||||
<string name="encryption_explanation">加密所有数据时采用的算法。</string>
|
<string name="encryption_explanation">加密所有数据时采用的算法。</string>
|
||||||
<string name="kdf_explanation">将迭代主密钥以生成加密数据库所需的密钥,转换方式为随机加盐算法。</string>
|
<string name="kdf_explanation">将迭代主密钥以生成加密数据库所需的密钥,转换方式为随机加盐算法。</string>
|
||||||
<string name="memory_usage">内存使用量</string>
|
<string name="memory_usage">内存使用量</string>
|
||||||
<string name="memory_usage_explanation">密钥推导算法使用的内存(以二进制字节计)。</string>
|
<string name="memory_usage_explanation">密钥推导算法使用的内存。</string>
|
||||||
<string name="parallelism">并行</string>
|
<string name="parallelism">并行</string>
|
||||||
<string name="parallelism_explanation">密钥推导算法使用的并行运行程度(即线程数量)。</string>
|
<string name="parallelism_explanation">密钥推导算法使用的并行运行程度(即线程数量)。</string>
|
||||||
<string name="sort_menu">排序</string>
|
<string name="sort_menu">排序</string>
|
||||||
@@ -395,7 +395,7 @@
|
|||||||
<string name="max_history_items_title">最大数量</string>
|
<string name="max_history_items_title">最大数量</string>
|
||||||
<string name="max_history_items_summary">限制每个条目的历史记录条数</string>
|
<string name="max_history_items_summary">限制每个条目的历史记录条数</string>
|
||||||
<string name="max_history_size_title">最大大小</string>
|
<string name="max_history_size_title">最大大小</string>
|
||||||
<string name="max_history_size_summary">限制每个条目的历史记录大小(以字节为单位)</string>
|
<string name="max_history_size_summary">限制每个条目的历史记录大小</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">建议修改</string>
|
<string name="settings_database_recommend_changing_master_key_title">建议修改</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">建议修改主密钥(以天为单位)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">建议修改主密钥(以天为单位)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">强制修改</string>
|
<string name="settings_database_force_changing_master_key_title">强制修改</string>
|
||||||
@@ -545,4 +545,11 @@
|
|||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="error_rebuild_list">无法正确地重建列表。</string>
|
<string name="error_rebuild_list">无法正确地重建列表。</string>
|
||||||
<string name="error_database_uri_null">无法检索数据库 URI 。</string>
|
<string name="error_database_uri_null">无法检索数据库 URI 。</string>
|
||||||
|
<string name="autofill_inline_suggestions_keyboard">已添加自动填充建议。</string>
|
||||||
|
<string name="autofill_inline_suggestions_summary">尝试直接从兼容的键盘显示自动填充建议</string>
|
||||||
|
<string name="autofill_inline_suggestions_title">内联建议</string>
|
||||||
|
<string name="warning_database_revoked">文件管理器撤销了对此文件的访问,关闭数据库并从其位置重新打开它。</string>
|
||||||
|
<string name="warning_database_info_changed_options">通过保存数据库或用最新的更改重新加载数据库来覆盖外部修改。</string>
|
||||||
|
<string name="warning_database_info_changed">数据库文件中包含的信息已在应用程序之外被修改。</string>
|
||||||
|
<string name="menu_reload_database">重新加载数据库</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -181,7 +181,7 @@
|
|||||||
<bool name="monospace_font_fields_enable_default" translatable="false">true</bool>
|
<bool name="monospace_font_fields_enable_default" translatable="false">true</bool>
|
||||||
<string name="hide_expired_entries_key" translatable="false">hide_expired_entries_key</string>
|
<string name="hide_expired_entries_key" translatable="false">hide_expired_entries_key</string>
|
||||||
<bool name="hide_expired_entries_default" translatable="false">false</bool>
|
<bool name="hide_expired_entries_default" translatable="false">false</bool>
|
||||||
<string name="show_uuid_key" translatable="false">hide_expired_entries_key</string>
|
<string name="show_uuid_key" translatable="false">show_uuid_key</string>
|
||||||
<bool name="show_uuid_default" translatable="false">false</bool>
|
<bool name="show_uuid_default" translatable="false">false</bool>
|
||||||
<string name="enable_education_screens_key" translatable="false">enable_education_screens_key</string>
|
<string name="enable_education_screens_key" translatable="false">enable_education_screens_key</string>
|
||||||
<bool name="enable_education_screens_default" translatable="false">true</bool>
|
<bool name="enable_education_screens_default" translatable="false">true</bool>
|
||||||
|
|||||||
@@ -131,6 +131,7 @@
|
|||||||
<string name="error_otp_counter">Counter must be between %1$d and %2$d.</string>
|
<string name="error_otp_counter">Counter must be between %1$d and %2$d.</string>
|
||||||
<string name="error_otp_period">Period must be between %1$d and %2$d seconds.</string>
|
<string name="error_otp_period">Period must be between %1$d and %2$d seconds.</string>
|
||||||
<string name="error_otp_digits">Token must contain %1$d to %2$d digits.</string>
|
<string name="error_otp_digits">Token must contain %1$d to %2$d digits.</string>
|
||||||
|
<string name="error_otp_type">The existing OTP type is not recognized by this form, its validation may no longer correctly generate the token.</string>
|
||||||
<string name="error_string_type">This text does not match the requested item.</string>
|
<string name="error_string_type">This text does not match the requested item.</string>
|
||||||
<string name="error_registration_read_only">Saving a new item is not allowed in a read-only database</string>
|
<string name="error_registration_read_only">Saving a new item is not allowed in a read-only database</string>
|
||||||
<string name="error_field_name_already_exists">The field name already exists.</string>
|
<string name="error_field_name_already_exists">The field name already exists.</string>
|
||||||
@@ -233,7 +234,7 @@
|
|||||||
<string name="rounds">Transformation rounds</string>
|
<string name="rounds">Transformation rounds</string>
|
||||||
<string name="rounds_explanation">Additional encryption rounds provide higher protection against brute force attacks, but can really slow down loading and saving.</string>
|
<string name="rounds_explanation">Additional encryption rounds provide higher protection against brute force attacks, but can really slow down loading and saving.</string>
|
||||||
<string name="memory_usage">Memory usage</string>
|
<string name="memory_usage">Memory usage</string>
|
||||||
<string name="memory_usage_explanation">Amount of memory (in bytes) to be used by the key derivation function.</string>
|
<string name="memory_usage_explanation">Amount of memory to be used by the key derivation function.</string>
|
||||||
<string name="parallelism">Parallelism</string>
|
<string name="parallelism">Parallelism</string>
|
||||||
<string name="parallelism_explanation">Degree of parallelism (i.e. number of threads) used by the key derivation function.</string>
|
<string name="parallelism_explanation">Degree of parallelism (i.e. number of threads) used by the key derivation function.</string>
|
||||||
<string name="saving_database">Saving database…</string>
|
<string name="saving_database">Saving database…</string>
|
||||||
@@ -357,7 +358,7 @@
|
|||||||
<string name="max_history_items_title">Maximum number</string>
|
<string name="max_history_items_title">Maximum number</string>
|
||||||
<string name="max_history_items_summary">Limit the number of history items per entry</string>
|
<string name="max_history_items_summary">Limit the number of history items per entry</string>
|
||||||
<string name="max_history_size_title">Maximum size</string>
|
<string name="max_history_size_title">Maximum size</string>
|
||||||
<string name="max_history_size_summary">Limit the history size (in bytes) per entry</string>
|
<string name="max_history_size_summary">Limit the history size per entry</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_title">Recommend renewal</string>
|
<string name="settings_database_recommend_changing_master_key_title">Recommend renewal</string>
|
||||||
<string name="settings_database_recommend_changing_master_key_summary">Recommend changing the master key (days)</string>
|
<string name="settings_database_recommend_changing_master_key_summary">Recommend changing the master key (days)</string>
|
||||||
<string name="settings_database_force_changing_master_key_title">Force renewal</string>
|
<string name="settings_database_force_changing_master_key_title">Force renewal</string>
|
||||||
@@ -519,6 +520,10 @@
|
|||||||
<string name="kdf_AES">AES</string>
|
<string name="kdf_AES">AES</string>
|
||||||
<string name="kdf_Argon2d">Argon2d</string>
|
<string name="kdf_Argon2d">Argon2d</string>
|
||||||
<string name="kdf_Argon2id">Argon2id</string>
|
<string name="kdf_Argon2id">Argon2id</string>
|
||||||
|
<string name="unit_byte">B</string>
|
||||||
|
<string name="unit_kibibyte">KiB</string>
|
||||||
|
<string name="unit_mebibyte">MiB</string>
|
||||||
|
<string name="unit_gibibyte">GiB</string>
|
||||||
<string-array name="timeout_options">
|
<string-array name="timeout_options">
|
||||||
<item>5 seconds</item>
|
<item>5 seconds</item>
|
||||||
<item>10 seconds</item>
|
<item>10 seconds</item>
|
||||||
|
|||||||
@@ -101,7 +101,7 @@
|
|||||||
android:title="@string/max_history_items_title"
|
android:title="@string/max_history_items_title"
|
||||||
android:positiveButtonText="@string/save"
|
android:positiveButtonText="@string/save"
|
||||||
android:negativeButtonText="@string/entry_cancel"/>
|
android:negativeButtonText="@string/entry_cancel"/>
|
||||||
<com.kunzisoft.keepass.settings.preference.InputNumberPreference
|
<com.kunzisoft.keepass.settings.preference.InputSizePreference
|
||||||
android:key="@string/max_history_size_key"
|
android:key="@string/max_history_size_key"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/max_history_size_title"
|
android:title="@string/max_history_size_title"
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
custom:explanations="@string/rounds_explanation"
|
custom:explanations="@string/rounds_explanation"
|
||||||
android:positiveButtonText="@string/save"
|
android:positiveButtonText="@string/save"
|
||||||
android:negativeButtonText="@string/entry_cancel"/>
|
android:negativeButtonText="@string/entry_cancel"/>
|
||||||
<com.kunzisoft.keepass.settings.preference.InputKdfNumberPreference
|
<com.kunzisoft.keepass.settings.preference.InputKdfSizePreference
|
||||||
android:key="@string/memory_usage_key"
|
android:key="@string/memory_usage_key"
|
||||||
android:persistent="false"
|
android:persistent="false"
|
||||||
android:title="@string/memory_usage"
|
android:title="@string/memory_usage"
|
||||||
|
|||||||
2
fastlane/metadata/android/en-US/changelogs/54.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/54.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
* Try to fix autofill #852
|
||||||
|
* Fix database change dialog displayed too often #853
|
||||||
2
fastlane/metadata/android/en-US/changelogs/55.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/55.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
* Add Keyfile XML version 2 (fix hex) #844
|
||||||
|
* Fix hex Keyfile #861
|
||||||
6
fastlane/metadata/android/en-US/changelogs/56.txt
Normal file
6
fastlane/metadata/android/en-US/changelogs/56.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
* Fix OTP token type #863
|
||||||
|
* Fix auto open biometric prompt #862
|
||||||
|
* Fix back appearance setting #865
|
||||||
|
* Fix orientation change in settings #872
|
||||||
|
* Change memory unit to MiB #851
|
||||||
|
* Small changes #642
|
||||||
2
fastlane/metadata/android/fr-FR/changelogs/54.txt
Normal file
2
fastlane/metadata/android/fr-FR/changelogs/54.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
* Tentative de résolution de l'autofill #852
|
||||||
|
* Correction du dialogue de changement de base de données affiché trop souvent #853
|
||||||
2
fastlane/metadata/android/fr-FR/changelogs/55.txt
Normal file
2
fastlane/metadata/android/fr-FR/changelogs/55.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
* Ajout de fichier de clé XML version 2 (correction hex) #844
|
||||||
|
* Correction de fichier de clé hex #861
|
||||||
6
fastlane/metadata/android/fr-FR/changelogs/56.txt
Normal file
6
fastlane/metadata/android/fr-FR/changelogs/56.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
* Correction du type de token OTP #863
|
||||||
|
* Correction de l'ouverture automatique de l'invite biométrique #862
|
||||||
|
* Correction du retour dans les paramètres d'apparence #865
|
||||||
|
* Correction du changement d'orientation dans les paramètres #872
|
||||||
|
* Modification des unités de mémoire en MiB #851
|
||||||
|
* Petits changements #642
|
||||||
Reference in New Issue
Block a user