Compare commits

...

28 Commits

Author SHA1 Message Date
J-Jamet
e6b33d60c3 Merge branch 'release/2.9.12' 2021-01-23 13:44:33 +01:00
J-Jamet
3fd06890d7 Merge branch 'develop' of https://hosted.weblate.org/git/keepass-dx/strings into translations 2021-01-23 13:22:56 +01:00
J-Jamet
4af4ad7663 Fix show UUID key 2021-01-23 13:18:03 +01:00
J-Jamet
6ca8501e28 Keep current screen after theme change 2021-01-23 13:13:01 +01:00
J-Jamet
432b385f60 Fix orientation change in settings #872 2021-01-23 12:56:47 +01:00
Hosted Weblate
6cebdefa4a Merge branch 'origin/develop' into Weblate. 2021-01-23 12:48:39 +01:00
J-Jamet
bc665eb83d Fix orientation change in settings #872 2021-01-23 12:16:18 +01:00
J-Jamet
cb187300fe Deactivate GiB #851 2021-01-23 11:21:38 +01:00
J-Jamet
f34e007ecd Add kibibyte and gibibyte #851 2021-01-22 16:07:50 +01:00
J-Jamet
3b6ad080b4 Update CHANGELOG 2021-01-22 15:46:30 +01:00
J-Jamet
9919e90ba5 Change memory unit to MiB 2021-01-22 15:37:50 +01:00
WaldiS
f4af44925b Translated using Weblate (Polish)
Currently translated at 100.0% (507 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pl/
2021-01-21 21:45:29 +01:00
J-Jamet
4bb366b568 Capture exception in IO action task 2021-01-21 14:38:34 +01:00
J-Jamet
7e7ab4ce19 Catch exception when check database info 2021-01-21 14:32:11 +01:00
J-Jamet
4d833d25ce Add IME_FLAG_NO_PERSONALIZED_LEARNING options #642 2021-01-21 14:16:13 +01:00
J-Jamet
a9c508ecd9 Fix back appearance setting #865 2021-01-21 13:36:50 +01:00
J-Jamet
ef4dbb8fdb Fix auto open biometric prompt #862 2021-01-21 12:46:43 +01:00
J-Jamet
3fd13f3e3b Try to fix decodeHex method conflict in some devices 2021-01-20 11:42:09 +01:00
Kornelijus Tvarijanavičius
319c9cad4b Translated using Weblate (Lithuanian)
Currently translated at 15.1% (77 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/lt/
2021-01-20 11:32:13 +01:00
nautilusx
c12297c98d Translated using Weblate (German)
Currently translated at 98.8% (501 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2021-01-20 11:32:13 +01:00
J-Jamet
7c38361844 Fix OTP token type #863 2021-01-18 16:48:57 +01:00
J-Jamet
559554a975 Upgrade to 2.9.12 2021-01-18 16:47:48 +01:00
Darin Avdeyeva
7e2ffa2124 Translated using Weblate (Russian)
Currently translated at 100.0% (507 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2021-01-17 19:40:00 +01:00
Milo Ivir
66dbac4bb2 Translated using Weblate (Croatian)
Currently translated at 100.0% (507 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/hr/
2021-01-17 15:28:44 +01:00
Carlos Pinto
8b6a843a85 Translated using Weblate (Portuguese (Portugal))
Currently translated at 90.7% (460 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/pt_PT/
2021-01-17 15:28:43 +01:00
HARADA Hiroyuki
976cff2751 Translated using Weblate (Japanese)
Currently translated at 100.0% (507 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ja/
2021-01-17 15:28:43 +01:00
zeritti
f7c30fa8eb Translated using Weblate (Czech)
Currently translated at 100.0% (507 of 507 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2021-01-17 15:28:42 +01:00
J-Jamet
7757c8218b Merge tag '2.9.11' into develop
2.9.11
2021-01-16 19:09:33 +01:00
62 changed files with 559 additions and 160 deletions

View File

@@ -1,3 +1,11 @@
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

View File

@@ -12,8 +12,8 @@ android {
applicationId "com.kunzisoft.keepass"
minSdkVersion 14
targetSdkVersion 30
versionCode = 55
versionName = "2.9.11"
versionCode = 56
versionName = "2.9.12"
multiDexEnabled true
testApplicationId = "com.kunzisoft.keepass.tests"

View File

@@ -29,10 +29,7 @@ import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.EditText
import android.widget.Spinner
import android.widget.*
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import com.google.android.material.textfield.TextInputLayout
@@ -57,6 +54,7 @@ class SetOTPDialogFragment : DialogFragment() {
private var mOtpElement: OtpElement = OtpElement()
private var otpTypeMessage: TextView? = null
private var otpTypeSpinner: Spinner? = null
private var otpTokenTypeSpinner: Spinner? = null
private var otpSecretContainer: TextInputLayout? = null
@@ -74,6 +72,8 @@ class SetOTPDialogFragment : DialogFragment() {
private var totpTokenTypeAdapter: ArrayAdapter<OtpTokenType>? = null
private var hotpTokenTypeAdapter: ArrayAdapter<OtpTokenType>? = 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 mOnFocusChangeListener = View.OnFocusChangeListener { _, isFocus ->
@@ -134,6 +134,7 @@ class SetOTPDialogFragment : DialogFragment() {
activity?.let { activity ->
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)
otpTokenTypeSpinner = root?.findViewById(R.id.setup_otp_token_type)
otpSecretContainer = root?.findViewById(R.id.setup_otp_secret_label)
@@ -183,23 +184,23 @@ class SetOTPDialogFragment : DialogFragment() {
// HOTP / TOTP Type selection
val otpTypeArray = OtpType.values()
otpTypeAdapter = ArrayAdapter<OtpType>(activity,
otpTypeAdapter = ArrayAdapter(activity,
android.R.layout.simple_spinner_item, otpTypeArray).apply {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
}
otpTypeSpinner?.adapter = otpTypeAdapter
// Otp Token type selection
val hotpTokenTypeArray = OtpTokenType.getHotpTokenTypeValues()
mHotpTokenTypeArray = OtpTokenType.getHotpTokenTypeValues()
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)
}
// Proprietary only on closed and full version
val totpTokenTypeArray = OtpTokenType.getTotpTokenTypeValues(
mTotpTokenTypeArray = OtpTokenType.getTotpTokenTypeValues(
BuildConfig.CLOSED_STORE && BuildConfig.FULL_VERSION)
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)
}
otpTokenTypeAdapter = hotpTokenTypeAdapter
@@ -207,7 +208,7 @@ class SetOTPDialogFragment : DialogFragment() {
// OTP Algorithm
val otpAlgorithmArray = TokenCalculator.HashAlgorithm.values()
otpAlgorithmAdapter = ArrayAdapter<TokenCalculator.HashAlgorithm>(activity,
otpAlgorithmAdapter = ArrayAdapter(activity,
android.R.layout.simple_spinner_item, otpAlgorithmArray).apply {
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
}
@@ -372,23 +373,39 @@ class SetOTPDialogFragment : DialogFragment() {
}
private fun upgradeTokenType() {
val tokenType = mOtpElement.tokenType
when (mOtpElement.type) {
OtpType.HOTP -> {
otpPeriodContainer?.visibility = View.GONE
otpCounterContainer?.visibility = View.VISIBLE
otpTokenTypeSpinner?.adapter = hotpTokenTypeAdapter
otpTokenTypeSpinner?.setSelection(OtpTokenType
.getHotpTokenTypeValues().indexOf(mOtpElement.tokenType))
mHotpTokenTypeArray?.let { otpTokenTypeArray ->
defineOtpTokenTypeSpinner(otpTokenTypeArray, tokenType, OtpTokenType.RFC4226)
}
}
OtpType.TOTP -> {
otpPeriodContainer?.visibility = View.VISIBLE
otpCounterContainer?.visibility = View.GONE
otpTokenTypeSpinner?.adapter = totpTokenTypeAdapter
otpTokenTypeSpinner?.setSelection(OtpTokenType
.getTotpTokenTypeValues().indexOf(mOtpElement.tokenType))
mTotpTokenTypeArray?.let { otpTokenTypeArray ->
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() {
otpAlgorithmSpinner?.setSelection(TokenCalculator.HashAlgorithm.values()

View File

@@ -60,6 +60,9 @@ abstract class LockingActivity : SpecialModeActivity() {
private set
override fun onCreate(savedInstanceState: Bundle?) {
mProgressDatabaseTaskProvider = ProgressDatabaseTaskProvider(this)
super.onCreate(savedInstanceState)
if (savedInstanceState != null
@@ -84,8 +87,6 @@ abstract class LockingActivity : SpecialModeActivity() {
}
mExitLock = false
mProgressDatabaseTaskProvider = ProgressDatabaseTaskProvider(this)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

View File

@@ -34,7 +34,12 @@ class IOActionTask<T>(
mainScope.launch {
withContext(Dispatchers.IO) {
val asyncResult: Deferred<T?> = async {
try {
action.invoke()
} catch (e: Exception) {
e.printStackTrace()
null
}
}
withContext(Dispatchers.Main) {
afterActionDatabaseListener?.invoke(asyncResult.await())

View File

@@ -162,8 +162,8 @@ class AdvancedUnlockFragment: StylishFragment(), AdvancedUnlockManager.AdvancedU
disconnect()
}
} ?: run {
connect(databaseUri)
this.mAutoOpenPrompt = autoOpenPrompt
connect(databaseUri)
}
} else {
disconnect()

View File

@@ -451,7 +451,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
return if (hashString != null
&& checkKeyFileHash(dataString, hashString)) {
Log.i(TAG, "Successful key file hash check.")
Hex.decodeHex(dataString)
Hex.decodeHex(dataString.toCharArray())
} else {
Log.e(TAG, "Unable to check the hash of the key file.")
null
@@ -477,7 +477,7 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
digest = MessageDigest.getInstance("SHA-256")
digest?.reset()
// hexadecimal encoding of the first 4 bytes of the SHA-256 hash of the key.
val dataDigest = digest.digest(Hex.decodeHex(data))
val dataDigest = digest.digest(Hex.decodeHex(data.toCharArray()))
.copyOfRange(0, 4)
.toHexString()
success = dataDigest == hash

View File

@@ -140,7 +140,7 @@ abstract class DatabaseVersioned<
when (keyData.size) {
32 -> return keyData
64 -> try {
return Hex.decodeHex(String(keyData))
return Hex.decodeHex(String(keyData).toCharArray())
} catch (ignoredException: Exception) {
// Key is not base 64, treat it as binary data
}

View File

@@ -129,6 +129,7 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
}
fun checkDatabaseInfo() {
try {
mDatabase.fileUri?.let {
val previousDatabaseInfo = mSnapFileDatabaseInfo
val lastFileDatabaseInfo = SnapFileDatabaseInfo.fromFileDatabaseInfo(
@@ -157,14 +158,21 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
mSnapFileDatabaseInfo = lastFileDatabaseInfo
}
}
} catch (e: Exception) {
Log.e(TAG, "Unable to check database info", e)
}
}
fun saveDatabaseInfo() {
try {
mDatabase.fileUri?.let {
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)
}
}
override fun onBind(intent: Intent): IBinder? {

View File

@@ -138,7 +138,7 @@ data class OtpElement(var otpModel: OtpModel = OtpModel()) {
@Throws(IllegalArgumentException::class)
fun setHexSecret(secret: String) {
if (secret.isNotEmpty())
otpModel.secret = Hex.decodeHex(secret)
otpModel.secret = Hex.decodeHex(secret.toCharArray())
else
throw IllegalArgumentException()
}

View File

@@ -386,7 +386,13 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
}
if (styleEnabled) {
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
}

View File

@@ -58,7 +58,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
private var mEncryptionAlgorithmPref: DialogListExplanationPreference? = null
private var mKeyDerivationPref: DialogListExplanationPreference? = null
private var mRoundPref: InputKdfNumberPreference? = null
private var mMemoryPref: InputKdfNumberPreference? = null
private var mMemoryPref: InputKdfSizePreference? = null
private var mParallelismPref: InputKdfNumberPreference? = null
override fun onCreateScreenPreference(screen: Screen, savedInstanceState: Bundle?, rootKey: String?) {
@@ -231,7 +231,7 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
}
// 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()
}
@@ -553,7 +553,10 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment() {
true
}
R.id.menu_reload_database -> {
settingActivity?.mProgressDatabaseTaskProvider?.startDatabaseReload(false)
settingActivity?.apply {
keepCurrentScreen()
mProgressDatabaseTaskProvider?.startDatabaseReload(false)
}
return true
}

View File

@@ -35,9 +35,13 @@ abstract class NestedSettingsFragment : PreferenceFragmentCompat() {
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?) {
onCreateScreenPreference(
Screen.values()[requireArguments().getInt(TAG_KEY)],
getScreen(),
savedInstanceState,
rootKey)
}

View File

@@ -117,6 +117,8 @@ open class SettingsActivity
intent.extras?.getString(FRAGMENT_ARG)?.let { fragmentScreenName ->
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)
// To reload the current screen
intent.putExtra(FRAGMENT_ARG, key.name)
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) {
if (mTimeoutEnable)
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(this) {

View File

@@ -25,7 +25,7 @@ import androidx.preference.DialogPreference
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.crypto.keyDerivation.KdfEngine
class InputKdfNumberPreference @JvmOverloads constructor(context: Context,
open class InputKdfNumberPreference @JvmOverloads constructor(context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = R.attr.dialogPreferenceStyle,
defStyleRes: Int = defStyleAttr)

View File

@@ -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)
}
}
}
}

View File

@@ -36,7 +36,7 @@ open class InputNumberPreference @JvmOverloads constructor(context: Context,
override fun setSummary(summary: CharSequence) {
if (summary == INFINITE_VALUE_STRING) {
super.setSummary("")
super.setSummary("")
} else {
super.setSummary(summary)
}

View File

@@ -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)
}
}
}

View File

@@ -33,6 +33,7 @@ import com.kunzisoft.keepass.R
abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCompat() {
private var inputTextView: EditText? = null
private var textUnitView: TextView? = null
private var textExplanationView: TextView? = 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) {
this.inputTextView?.error = error
}
@@ -55,6 +64,24 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
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?
get() = textExplanationView?.text?.toString() ?: ""
set(explanationText) {
@@ -69,6 +96,10 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
}
}
fun setExplanationText(@StringRes explanationTextId: Int) {
explanationText = getString(explanationTextId)
}
override fun onBindDialogView(view: 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?.visibility = View.GONE
switchElementView = view.findViewById(R.id.switch_element)
@@ -113,18 +146,6 @@ abstract class InputPreferenceDialogFragmentCompat : PreferenceDialogFragmentCom
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) {
switchElementView?.visibility = if (onCheckedChange == null) View.GONE else View.VISIBLE
switchElementView?.isChecked = defaultChecked

View File

@@ -22,50 +22,76 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.utils.DataByte
class MaxHistorySizePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
private var dataByte = DataByte(2L, DataByte.ByteFormat.MEBIBYTE)
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
setExplanationText(R.string.max_history_size_summary)
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 ->
inputText = if (!isChecked) {
INFINITE_MAX_HISTORY_SIZE.toString()
} else
DEFAULT_MAX_HISTORY_SIZE.toString()
if (!isChecked) {
dataByte = INFINITE_MAX_HISTORY_SIZE_DATA_BYTE
inputText = INFINITE_MAX_HISTORY_SIZE.toString()
unitText = null
} else {
dataByte = DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE
inputText = dataByte.number.toString()
setUnitText(dataByte.format.stringId)
}
showInputText(isChecked)
}, maxItemsDatabase > INFINITE_MAX_HISTORY_SIZE)
}
}
override fun onDialogClosed(positiveResult: Boolean) {
if (positiveResult) {
database?.let { database ->
var maxHistorySize: Long = try {
val maxHistorySize: Long = try {
inputText.toLong()
} catch (e: NumberFormatException) {
DEFAULT_MAX_HISTORY_SIZE
DEFAULT_MAX_HISTORY_SIZE_DATA_BYTE.toBytes()
}
if (maxHistorySize < INFINITE_MAX_HISTORY_SIZE) {
maxHistorySize = INFINITE_MAX_HISTORY_SIZE
val numberOfBytes = if (maxHistorySize >= 0) {
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
database.historyMaxSize = maxHistorySize
database.historyMaxSize = numberOfBytes
mProgressDatabaseTaskProvider?.startDatabaseSaveMaxHistorySize(oldMaxHistorySize, maxHistorySize, mDatabaseAutoSaveEnable)
mProgressDatabaseTaskProvider?.startDatabaseSaveMaxHistorySize(oldMaxHistorySize, numberOfBytes, mDatabaseAutoSaveEnable)
}
}
}
companion object {
const val DEFAULT_MAX_HISTORY_SIZE = 134217728L
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 {
val fragment = MaxHistorySizePreferenceDialogFragmentCompat()
val bundle = Bundle(1)

View File

@@ -22,33 +22,46 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment
import android.os.Bundle
import android.view.View
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.utils.DataByte
class MemoryUsagePreferenceDialogFragmentCompat : DatabaseSavePreferenceDialogFragmentCompat() {
private var dataByte = DataByte(MIN_MEMORY_USAGE, DataByte.ByteFormat.BYTE)
override fun onBindDialogView(view: View) {
super.onBindDialogView(view)
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) {
if (positiveResult) {
database?.let { database ->
var memoryUsage: Long = try {
var newMemoryUsage: Long = try {
inputText.toLong()
} catch (e: NumberFormatException) {
MIN_MEMORY_USAGE
}
if (memoryUsage < MIN_MEMORY_USAGE) {
memoryUsage = MIN_MEMORY_USAGE
if (newMemoryUsage < 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
database.memoryUsage = memoryUsage
database.memoryUsage = numberOfBytes
mProgressDatabaseTaskProvider?.startDatabaseSaveMemoryUsage(oldMemoryUsage, memoryUsage, mDatabaseAutoSaveEnable)
mProgressDatabaseTaskProvider?.startDatabaseSaveMemoryUsage(oldMemoryUsage, numberOfBytes, mDatabaseAutoSaveEnable)
}
}
}

View 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
}
}

View File

@@ -157,8 +157,8 @@
android:inputType="textPassword"
android:importantForAccessibility="no"
android:importantForAutofill="yes"
android:autofillHints="password|"
android:imeOptions="actionDone"
android:autofillHints="password"
android:imeOptions="actionDone|flagNoPersonalizedLearning"
android:maxLines="1"/>
</com.google.android.material.textfield.TextInputLayout>
</RelativeLayout>

View File

@@ -106,6 +106,7 @@
android:inputType="textPassword|textMultiLine"
android:importantForAccessibility="no"
android:importantForAutofill="no"
android:imeOptions="flagNoPersonalizedLearning"
android:ems="10"
android:maxLines="10"
android:hint="@string/entry_password"/>

View File

@@ -29,6 +29,18 @@
android:layout_height="wrap_content"
android:importantForAutofill="noExcludeDescendants"
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
android:id="@+id/card_view_otp_selection"
android:layout_margin="4dp"

View File

@@ -36,6 +36,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:imeOptions="flagNoPersonalizedLearning"
android:focusable="true"
android:focusableInTouchMode="true"
android:importantForAccessibility="no"

View File

@@ -46,14 +46,24 @@
app:layout_constraintTop_toBottomOf="@+id/explanation_text"
app:layout_constraintStart_toStartOf="parent"
android:minHeight="48dp"/>
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/input_text"
android:layout_height="wrap_content"
android:layout_width="0dp"
app:layout_constraintTop_toBottomOf="@+id/switch_element"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:minHeight="48dp"
android:layout_height="wrap_content"
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>

View File

@@ -248,7 +248,7 @@
<string name="content_description_background">الخلفية</string>
<string name="rounds">دورات التحويل</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="sort_groups_before">مجموعات قبل</string>
<string name="selection_mode">نمط التحديد</string>
@@ -404,7 +404,7 @@
<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_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_items_summary">عدد عناصر التأريخ لكل مدخل</string>
<string name="education_generate_password_title">أنشئ كلمة سر قوية</string>

View File

@@ -175,7 +175,7 @@
<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_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_items_summary">Ograniči broja stavki istorije po unosu</string>
<string name="max_history_items_title">Maksimalan broj</string>

View File

@@ -207,7 +207,7 @@
<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">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="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>

View File

@@ -175,7 +175,7 @@
<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="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_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>
@@ -391,7 +391,7 @@
<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_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_summary">Dporučit změnu hlavního klíče (dny)</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="error_rebuild_list">Seznam nelze řádně sestavit.</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>

View File

@@ -174,7 +174,7 @@
<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="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_explanation">Grad af parallelitet (dvs. antallet af tråde), som anvendes af nøgleafledningsfunktion.</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_summary">Begræns antallet af historikposter pr. indtastning</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_summary">Anbefal ændring af hovednøglen (dage)</string>
<string name="settings_database_force_changing_master_key_title">Gennemtving fornyelse</string>

View File

@@ -199,7 +199,7 @@
<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="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_explanation">Grad des Parallelismus (d. h. Anzahl der Threads), der für die Schlüsselableitung genutzt wird.</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_summary">Anzahl der Verlaufseinträge pro Eintrag begrenzen</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_summary">(Nach Tagen) Änderung des Hauptschlüssels empfehlen</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="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="menu_reload_database">Datenbank neu laden</string>
</resources>

View File

@@ -165,7 +165,7 @@
<string name="encryption_explanation">Αλγόριθμος κρυπτογράφησης βάσης δεδομένων που χρησιμοποιείται για όλα τα δεδομένα.</string>
<string name="kdf_explanation">Για να δημιουργηθεί το κλειδί για τον αλγόριθμο κρυπτογράφησης, το κύριο κλειδί μετασχηματίζεται χρησιμοποιώντας μια τυχαία αλατισμένη λειτουργία εξαγωγής κλειδιών.</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_explanation">Βαθμός παραλληλισμού (δηλ. Αριθμός νημάτων) που χρησιμοποιείται από τη συνάρτηση εξαγωγής κλειδιών.</string>
<string name="sort_menu">Ταξινόμηση</string>
@@ -392,7 +392,7 @@
<string name="max_history_items_title">Μέγιστος αριθμός</string>
<string name="max_history_items_summary">Περιορίστε τον αριθμό των στοιχείων ιστορικού ανά καταχώριση</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_summary">Προτεινόμενη αλλαγή του κύριου κλειδιού (ημέρες)</string>
<string name="settings_database_force_changing_master_key_title">Εξαναγκαστική ανανέωση</string>

View File

@@ -165,7 +165,7 @@
<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="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_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>
@@ -498,7 +498,7 @@
<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="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_title">Número máximo</string>
<string name="device_keyboard_setting_title">Configuración del teclado del dispositivo</string>

View File

@@ -37,7 +37,7 @@
<string name="saving_database">در حال ذخیره پایگاه داده</string>
<string name="parallelism_explanation">درجه موازی سازی (یعنی تعداد موضوعات) که توسط عملکرد مشتق کلیدی استفاده می شود.</string>
<string name="parallelism">موازی کاری</string>
<string name="memory_usage_explanation">مقدار حافظه (در بایت) که توسط تابع مشتق کلید مورد استفاده قرار گیرد.</string>
<string name="memory_usage_explanation">مقدار حافظه که توسط تابع مشتق کلید مورد استفاده قرار گیرد.</string>
<string name="memory_usage">استفاده از حافظه</string>
<string name="rounds_explanation">دورهای رمزگذاری اضافی محافظت بالاتری در برابر حملات نیروی وحشی ایجاد می کنند ، اما در واقع می توانند سرعت و بارگذاری را کاهش دهند.</string>
<string name="rounds">دور تحول</string>

View File

@@ -249,7 +249,7 @@
<string name="list_password_generator_options_title">Salasanamerkit</string>
<string name="password_size_summary">Asettaa oletuspituuden generoiduille salasanoille</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="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>

View File

@@ -133,7 +133,7 @@
<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 denregistrement.</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_explanation">Degré de parallélisme (nombre de fils dexécution) utilisé par la fonction de dérivation de clé.</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_summary">Limite le nombre déléments de lhistorique par entrée</string>
<string name="max_history_size_title">Taille maximum</string>
<string name="max_history_size_summary">Limite la taille de lhistorique (en octets) par entrée</string>
<string name="max_history_size_summary">Limite la taille de lhistorique 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_summary">Recommande le changement de la clé principale (jours)</string>
<string name="settings_database_force_changing_master_key_title">Forcer le renouvellement</string>

View File

@@ -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="contains_duplicate_uuid_procedure">Riješiti problem generiranjem novih UUID-ova za duplikate\?</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="sort_last_access_time">Zadnji pristup</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_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_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_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>
@@ -529,4 +529,11 @@
<string name="kdf_Argon2d">Argon2d</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="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>

View File

@@ -182,7 +182,7 @@
<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="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_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>
@@ -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_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="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_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>

View File

@@ -176,7 +176,7 @@
<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="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_explanation">Grado di parallelismo (cioè numero di thread) usato dalla funzione di derivazione della chiave.</string>
<string name="sort_menu">Ordina</string>
@@ -413,7 +413,7 @@
<string name="max_history_size_title">Dimensione massima</string>
<string name="max_history_items_title">Numero massimo</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="recycle_bin_group_title">Gruppo cestino</string>
<string name="database_data_compression_summary">La compressione dei dati riduce le dimensioni del database</string>

View File

@@ -226,7 +226,7 @@
<string name="rounds">変換ラウンド</string>
<string name="rounds_explanation">変換ラウンドを増やすことでブルート フォース攻撃に対する保護が強化されますが、読み込みと保存が本当に遅くなる可能性があります。</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_explanation">鍵導出関数が使用する並列処理のレベル(スレッド数)です。</string>
<string name="saving_database">データベースを保存しています…</string>
@@ -325,7 +325,7 @@
<string name="max_history_items_title">最大値</string>
<string name="max_history_items_summary">エントリーあたりの履歴項目の数を制限します</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_summary">マスターキーの変更を推奨します(日数)</string>
<string name="settings_database_force_changing_master_key_title">更新を強制</string>
@@ -543,5 +543,13 @@
<string name="content">コンテンツ</string>
<string name="kdf_Argon2id">Argon2id</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>

View File

@@ -94,7 +94,7 @@
<string name="entry_keyfile">Rakto failas</string>
<string name="search">Įrašo pavadinimas/aprašymas</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="space">Tarpas</string>
<string name="special">Specialus</string>

View File

@@ -300,7 +300,7 @@
<string name="sort_groups_before">മുമ്പുള്ള ഗ്രൂപ്പുകൾ</string>
<string name="sort_ascending">ആദ്യത്തേത് ഏറ്റവും കുറഞ്ഞത്↓</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="hide_broken_locations_summary">സമീപകാല ഡാറ്റാബേസുകളുടെ പട്ടികയിൽ‌ നിന്ന് തകർന്ന ലിങ്കുകൾ‌ മറയ്‌ക്കുക</string>
<string name="hide_broken_locations_title">തകർന്ന ഡാറ്റാബേസ് ലിങ്കുകൾ മറയ്‌ക്കുക</string>

View File

@@ -145,7 +145,7 @@
<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="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_explanation">Graden av parallellitet (dvs. antallet tråder) brukt av nøkkelutledingsfunksjonen.</string>
<string name="saving_database">Lagrer database…</string>

View File

@@ -180,7 +180,7 @@
<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="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_explanation">Het aantal parallellen (aantal threads) dat de afleidingsfunctie mag gebruiken.</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_summary">Beperk het aantal geschiedenisitems per item</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_summary">Aanbeveling de hoofdsleutel te wijzigen (dagen)</string>
<string name="settings_database_force_changing_master_key_title">Vernieuwing afdwingen</string>

View File

@@ -175,7 +175,7 @@
<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="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_explanation">Stopień równoległości (tj. Liczba wątków) wykorzystywany przez funkcję wyprowadzania klucza.</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="database_data_compression_summary">Kompresja danych zmniejsza rozmiar bazy danych</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_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>
@@ -545,9 +545,9 @@
<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ć zaawansowanego monitu o odblokowanie.</string>
<string name="open_advanced_unlock_prompt_store_credential">Otwórz zaawansowany monit o odblokowanie, aby zapisać poświadczenia</string>
<string name="open_advanced_unlock_prompt_unlock_database">Otwórz zaawansowany monit o odblokowanie, aby odblokować bazę danych</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>

View File

@@ -173,7 +173,7 @@
<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="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_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>
@@ -395,7 +395,7 @@
<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_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_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>

View File

@@ -174,7 +174,7 @@
<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="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_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>
@@ -399,7 +399,7 @@
<string name="menu_security_settings">Configurações de segurança</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="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="enable">Ativar</string>
<string name="database_data_compression_title">Compressão dos dados</string>
@@ -453,7 +453,7 @@
<string name="entry_otp">OTP</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="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="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>
@@ -491,4 +491,31 @@
\n
\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="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>

View File

@@ -130,7 +130,7 @@
<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">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="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>
@@ -302,7 +302,7 @@
<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_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_items_summary">Limitar a quantidade de itens do histórico por entrada</string>
<string name="max_history_items_title">Número máximo</string>

View File

@@ -202,7 +202,7 @@
<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="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_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>
@@ -282,7 +282,7 @@
<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_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_summary">Recomandă schimbarea cheii master (zile)</string>
<string name="settings_database_force_changing_master_key_title">Forteaza reinoirea</string>

View File

@@ -95,7 +95,7 @@
<string name="lowercase">Строчные</string>
<string name="hide_password_title">Скрывать пароли</string>
<string name="hide_password_summary">Скрывать пароли за (***) по умолчанию</string>
<string name="about">Сведения</string>
<string name="about">О программе</string>
<string name="menu_change_key_settings">Изменить главный пароль</string>
<string name="settings">Настройки</string>
<string name="menu_database_settings">Настройки базы</string>
@@ -168,7 +168,7 @@
<string name="encryption_explanation">Алгоритм шифрования базы для всех данных.</string>
<string name="kdf_explanation">При создании ключа для алгоритма шифрования, главный пароль преобразуется при помощи функции формирования ключа со случайной солью.</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_explanation">Уровень параллелизма (т.е. количество потоков), используемый функцией формирования ключа.</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_upgrade">Не забывайте обновлять приложение.</string>
<string name="download">Скачать</string>
<string name="contribute">Содействие</string>
<string name="contribute">Помочь проекту</string>
<string name="encryption_chacha20">ChaCha20</string>
<string name="kdf_AES">AES</string>
<string name="style_choose_title">Тема приложения</string>
@@ -393,7 +393,7 @@
<string name="max_history_items_title">Максимум записей</string>
<string name="max_history_items_summary">Ограничение числа элементов истории каждой записи</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_summary">Рекомендовать менять главный пароль (в днях)</string>
<string name="settings_database_force_changing_master_key_title">Принудительная смена</string>

View File

@@ -184,7 +184,7 @@
<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="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_explanation">Grad av parallellism (dvs. antal trådar) som används av nyckelderivatsfuntionen.</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_summary">Begränsar antalet historikobjekt per post</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_summary">Rekommenderas att ändra huvudnyckeln (dagar)</string>
<string name="settings_database_force_changing_master_key_title">Tvingad ändring</string>

View File

@@ -145,7 +145,7 @@
<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="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_explanation">Anahtar türev fonksiyonu tarafından kullanılan paralellik derecesi (yani iplik sayısı).</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_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_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_summary">Ana anahtarın değiştirilmesini öner (gün)</string>
<string name="settings_database_force_changing_master_key_title">Yenilemeyi zorla</string>

View File

@@ -377,7 +377,7 @@
<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_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_items_summary">Обмежити кількість елементів історії кожного запису</string>
<string name="max_history_items_title">Максимальна кількість</string>
@@ -447,7 +447,7 @@
<string name="sort_groups_before">Спочатку групи</string>
<string name="sort_ascending">За зростанням ↓</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="do_not_kill_app">Не закривайте застосунок…</string>
<string name="command_execution">Виконання команди…</string>

View File

@@ -178,7 +178,7 @@
<string name="encryption_explanation">加密所有数据时采用的算法。</string>
<string name="kdf_explanation">将迭代主密钥以生成加密数据库所需的密钥,转换方式为随机加盐算法。</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_explanation">密钥推导算法使用的并行运行程度(即线程数量)。</string>
<string name="sort_menu">排序</string>
@@ -395,7 +395,7 @@
<string name="max_history_items_title">最大数量</string>
<string name="max_history_items_summary">限制每个条目的历史记录条数</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_summary">建议修改主密钥(以天为单位)</string>
<string name="settings_database_force_changing_master_key_title">强制修改</string>

View File

@@ -181,7 +181,7 @@
<bool name="monospace_font_fields_enable_default" translatable="false">true</bool>
<string name="hide_expired_entries_key" translatable="false">hide_expired_entries_key</string>
<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>
<string name="enable_education_screens_key" translatable="false">enable_education_screens_key</string>
<bool name="enable_education_screens_default" translatable="false">true</bool>

View File

@@ -131,6 +131,7 @@
<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_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_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>
@@ -233,7 +234,7 @@
<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="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_explanation">Degree of parallelism (i.e. number of threads) used by the key derivation function.</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_summary">Limit the number of history items per entry</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_summary">Recommend changing the master key (days)</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_Argon2d">Argon2d</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">
<item>5 seconds</item>
<item>10 seconds</item>

View File

@@ -101,7 +101,7 @@
android:title="@string/max_history_items_title"
android:positiveButtonText="@string/save"
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:persistent="false"
android:title="@string/max_history_size_title"

View File

@@ -45,7 +45,7 @@
custom:explanations="@string/rounds_explanation"
android:positiveButtonText="@string/save"
android:negativeButtonText="@string/entry_cancel"/>
<com.kunzisoft.keepass.settings.preference.InputKdfNumberPreference
<com.kunzisoft.keepass.settings.preference.InputKdfSizePreference
android:key="@string/memory_usage_key"
android:persistent="false"
android:title="@string/memory_usage"

View 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

View 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