mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-04-04 21:37:37 +03:00
Merge branch 'develop' into feature/Hardware_Key
This commit is contained in:
commit
f3fe92e4de
33 changed files with 447 additions and 225 deletions
|
@ -1,5 +1,10 @@
|
||||||
KeePassDX(3.5.0)
|
KeePassDX(3.4.5)
|
||||||
|
* Fix custom data in group (fix KeeShare) #1335
|
||||||
|
* Fix device credential unlocking #1344
|
||||||
|
* New clipboard manager #1343
|
||||||
* Keep screen on by default when viewing an entry
|
* Keep screen on by default when viewing an entry
|
||||||
|
* Change the order of the search filters
|
||||||
|
* Fix searchable selection
|
||||||
|
|
||||||
KeePassDX(3.4.4)
|
KeePassDX(3.4.4)
|
||||||
* Fix crash in New Android 13 #1321
|
* Fix crash in New Android 13 #1321
|
||||||
|
|
|
@ -4,16 +4,16 @@ apply plugin: 'kotlin-parcelize'
|
||||||
apply plugin: 'kotlin-kapt'
|
apply plugin: 'kotlin-kapt'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 31
|
compileSdkVersion 32
|
||||||
buildToolsVersion "31.0.0"
|
buildToolsVersion "32.0.0"
|
||||||
ndkVersion "21.4.7075529"
|
ndkVersion "21.4.7075529"
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "com.kunzisoft.keepass"
|
applicationId "com.kunzisoft.keepass"
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 31
|
targetSdkVersion 32
|
||||||
versionCode = 114
|
versionCode = 114
|
||||||
versionName = "3.5.0"
|
versionName = "3.4.5"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
||||||
testApplicationId = "com.kunzisoft.keepass.tests"
|
testApplicationId = "com.kunzisoft.keepass.tests"
|
||||||
|
@ -93,7 +93,7 @@ android {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def room_version = "2.4.2"
|
def room_version = "2.4.3"
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
|
||||||
|
@ -101,14 +101,14 @@ dependencies {
|
||||||
implementation "androidx.appcompat:appcompat:$android_appcompat_version"
|
implementation "androidx.appcompat:appcompat:$android_appcompat_version"
|
||||||
implementation 'androidx.preference:preference-ktx:1.2.0'
|
implementation 'androidx.preference:preference-ktx:1.2.0'
|
||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation 'androidx.cardview:cardview:1.0.0'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||||
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
|
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
|
||||||
implementation 'androidx.documentfile:documentfile:1.0.1'
|
implementation 'androidx.documentfile:documentfile:1.0.1'
|
||||||
implementation 'androidx.biometric:biometric:1.1.0'
|
implementation 'androidx.biometric:biometric:1.1.0'
|
||||||
implementation 'androidx.media:media:1.6.0'
|
implementation 'androidx.media:media:1.6.0'
|
||||||
// Lifecycle - LiveData - ViewModel - Coroutines
|
// Lifecycle - LiveData - ViewModel - Coroutines
|
||||||
implementation "androidx.core:core-ktx:$android_core_version"
|
implementation "androidx.core:core-ktx:$android_core_version"
|
||||||
implementation 'androidx.fragment:fragment-ktx:1.4.1'
|
implementation 'androidx.fragment:fragment-ktx:1.5.1'
|
||||||
implementation "com.google.android.material:material:$android_material_version"
|
implementation "com.google.android.material:material:$android_material_version"
|
||||||
// Token auto complete
|
// Token auto complete
|
||||||
// From sources until https://github.com/splitwise/TokenAutoComplete/pull/422 fixed
|
// From sources until https://github.com/splitwise/TokenAutoComplete/pull/422 fixed
|
||||||
|
|
|
@ -27,7 +27,6 @@ import com.kunzisoft.keepass.view.TemplateView
|
||||||
import com.kunzisoft.keepass.view.hideByFading
|
import com.kunzisoft.keepass.view.hideByFading
|
||||||
import com.kunzisoft.keepass.view.showByFading
|
import com.kunzisoft.keepass.view.showByFading
|
||||||
import com.kunzisoft.keepass.viewmodels.EntryViewModel
|
import com.kunzisoft.keepass.viewmodels.EntryViewModel
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class EntryFragment: DatabaseFragment() {
|
class EntryFragment: DatabaseFragment() {
|
||||||
|
|
||||||
|
@ -158,11 +157,9 @@ class EntryFragment: DatabaseFragment() {
|
||||||
|
|
||||||
setOnCopyActionClickListener { field ->
|
setOnCopyActionClickListener { field ->
|
||||||
mClipboardHelper?.timeoutCopyToClipboard(
|
mClipboardHelper?.timeoutCopyToClipboard(
|
||||||
|
TemplateField.getLocalizedName(context, field.name),
|
||||||
field.protectedValue.stringValue,
|
field.protectedValue.stringValue,
|
||||||
getString(
|
field.protectedValue.isProtected
|
||||||
R.string.copy_field,
|
|
||||||
TemplateField.getLocalizedName(context, field.name)
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,8 +248,7 @@ class EntryFragment: DatabaseFragment() {
|
||||||
|
|
||||||
fun launchEntryCopyEducationAction() {
|
fun launchEntryCopyEducationAction() {
|
||||||
val appNameString = getString(R.string.app_name)
|
val appNameString = getString(R.string.app_name)
|
||||||
mClipboardHelper?.timeoutCopyToClipboard(appNameString,
|
mClipboardHelper?.timeoutCopyToClipboard(appNameString, appNameString)
|
||||||
getString(R.string.copy_field, appNameString))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -78,9 +78,11 @@ class PassphraseGeneratorFragment : DatabaseFragment() {
|
||||||
View.VISIBLE else View.GONE
|
View.VISIBLE else View.GONE
|
||||||
val clipboardHelper = ClipboardHelper(context)
|
val clipboardHelper = ClipboardHelper(context)
|
||||||
passphraseCopyView?.setOnClickListener {
|
passphraseCopyView?.setOnClickListener {
|
||||||
clipboardHelper.timeoutCopyToClipboard(passKeyView.passwordString,
|
clipboardHelper.timeoutCopyToClipboard(
|
||||||
getString(R.string.copy_field,
|
getString(R.string.passphrase),
|
||||||
getString(R.string.entry_password)))
|
passKeyView.passwordString,
|
||||||
|
true
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
wordCaseAdapter = ArrayAdapter(context,
|
wordCaseAdapter = ArrayAdapter(context,
|
||||||
|
|
|
@ -99,9 +99,11 @@ class PasswordGeneratorFragment : DatabaseFragment() {
|
||||||
View.VISIBLE else View.GONE
|
View.VISIBLE else View.GONE
|
||||||
val clipboardHelper = ClipboardHelper(context)
|
val clipboardHelper = ClipboardHelper(context)
|
||||||
passwordCopyView?.setOnClickListener {
|
passwordCopyView?.setOnClickListener {
|
||||||
clipboardHelper.timeoutCopyToClipboard(passKeyView.passwordString,
|
clipboardHelper.timeoutCopyToClipboard(
|
||||||
getString(R.string.copy_field,
|
getString(R.string.password),
|
||||||
getString(R.string.entry_password)))
|
passKeyView.passwordString,
|
||||||
|
true
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ class ExternalFileHelper {
|
||||||
|
|
||||||
fun buildOpenDocument(onFileSelected: ((uri: Uri?) -> Unit)?) {
|
fun buildOpenDocument(onFileSelected: ((uri: Uri?) -> Unit)?) {
|
||||||
|
|
||||||
val resultCallback = ActivityResultCallback<Uri> { result ->
|
val resultCallback = ActivityResultCallback<Uri?> { result ->
|
||||||
result?.let { uri ->
|
result?.let { uri ->
|
||||||
UriUtil.takeUriPermission(activity?.contentResolver, uri)
|
UriUtil.takeUriPermission(activity?.contentResolver, uri)
|
||||||
onFileSelected?.invoke(uri)
|
onFileSelected?.invoke(uri)
|
||||||
|
@ -91,7 +91,7 @@ class ExternalFileHelper {
|
||||||
fun buildCreateDocument(typeString: String = "application/octet-stream",
|
fun buildCreateDocument(typeString: String = "application/octet-stream",
|
||||||
onFileCreated: (fileCreated: Uri?)->Unit) {
|
onFileCreated: (fileCreated: Uri?)->Unit) {
|
||||||
|
|
||||||
val resultCallback = ActivityResultCallback<Uri> { result ->
|
val resultCallback = ActivityResultCallback<Uri?> { result ->
|
||||||
onFileCreated.invoke(result)
|
onFileCreated.invoke(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ class ExternalFileHelper {
|
||||||
|
|
||||||
class OpenDocument : ActivityResultContracts.OpenDocument() {
|
class OpenDocument : ActivityResultContracts.OpenDocument() {
|
||||||
@SuppressLint("InlinedApi")
|
@SuppressLint("InlinedApi")
|
||||||
override fun createIntent(context: Context, input: Array<out String>): Intent {
|
override fun createIntent(context: Context, input: Array<String>): Intent {
|
||||||
return super.createIntent(context, input).apply {
|
return super.createIntent(context, input).apply {
|
||||||
addCategory(Intent.CATEGORY_OPENABLE)
|
addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
|
addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
|
||||||
|
@ -178,11 +178,10 @@ class ExternalFileHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreateDocument(private val typeString: String) : ActivityResultContracts.CreateDocument() {
|
class CreateDocument(typeString: String) : ActivityResultContracts.CreateDocument(typeString) {
|
||||||
override fun createIntent(context: Context, input: String): Intent {
|
override fun createIntent(context: Context, input: String): Intent {
|
||||||
return super.createIntent(context, input).apply {
|
return super.createIntent(context, input).apply {
|
||||||
addCategory(Intent.CATEGORY_OPENABLE)
|
addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
type = typeString
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,13 @@ package com.kunzisoft.keepass.adapters
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
|
import android.util.Log
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.annotation.ColorInt
|
import androidx.annotation.ColorInt
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.recyclerview.widget.SortedList
|
import androidx.recyclerview.widget.SortedList
|
||||||
|
@ -521,13 +521,14 @@ class NodesAdapter (private val context: Context,
|
||||||
}
|
}
|
||||||
holder?.otpContainer?.setOnClickListener {
|
holder?.otpContainer?.setOnClickListener {
|
||||||
otpElement?.token?.let { token ->
|
otpElement?.token?.let { token ->
|
||||||
Toast.makeText(
|
try {
|
||||||
context,
|
mClipboardHelper.copyToClipboard(
|
||||||
context.getString(R.string.copy_field,
|
TemplateField.getLocalizedName(context, TemplateField.LABEL_TOKEN),
|
||||||
TemplateField.getLocalizedName(context, TemplateField.LABEL_TOKEN)),
|
token
|
||||||
Toast.LENGTH_LONG
|
)
|
||||||
).show()
|
} catch (e: Exception) {
|
||||||
mClipboardHelper.copyToClipboard(token)
|
Log.e(TAG, "Unable to copy the OTP token", e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -403,13 +403,11 @@ class AdvancedUnlockManager(private var retrieveContext: () -> FragmentActivity)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
|
||||||
fun isDeviceSecure(context: Context): Boolean {
|
fun isDeviceSecure(context: Context): Boolean {
|
||||||
val keyguardManager = ContextCompat.getSystemService(context, KeyguardManager::class.java)
|
return ContextCompat.getSystemService(context, KeyguardManager::class.java)
|
||||||
return keyguardManager?.isDeviceSecure ?: false
|
?.isDeviceSecure ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
|
||||||
fun biometricUnlockSupported(context: Context): Boolean {
|
fun biometricUnlockSupported(context: Context): Boolean {
|
||||||
val biometricCanAuthenticate = try {
|
val biometricCanAuthenticate = try {
|
||||||
BiometricManager.from(context).canAuthenticate(BIOMETRIC_STRONG)
|
BiometricManager.from(context).canAuthenticate(BIOMETRIC_STRONG)
|
||||||
|
@ -430,28 +428,23 @@ class AdvancedUnlockManager(private var retrieveContext: () -> FragmentActivity)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
|
||||||
fun deviceCredentialUnlockSupported(context: Context): Boolean {
|
fun deviceCredentialUnlockSupported(context: Context): Boolean {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||||
val biometricCanAuthenticate = BiometricManager.from(context).canAuthenticate(DEVICE_CREDENTIAL)
|
val biometricCanAuthenticate = BiometricManager.from(context).canAuthenticate(DEVICE_CREDENTIAL)
|
||||||
return (biometricCanAuthenticate == BiometricManager.BIOMETRIC_SUCCESS
|
(biometricCanAuthenticate == BiometricManager.BIOMETRIC_SUCCESS
|
||||||
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_STATUS_UNKNOWN
|
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_STATUS_UNKNOWN
|
||||||
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE
|
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE
|
||||||
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED
|
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED
|
||||||
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED
|
|| biometricCanAuthenticate == BiometricManager.BIOMETRIC_ERROR_SECURITY_UPDATE_REQUIRED
|
||||||
)
|
)
|
||||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
} else {
|
||||||
ContextCompat.getSystemService(context, KeyguardManager::class.java)?.apply {
|
true
|
||||||
return isDeviceSecure
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove entry key in keystore
|
* Remove entry key in keystore
|
||||||
*/
|
*/
|
||||||
@RequiresApi(api = Build.VERSION_CODES.M)
|
|
||||||
fun deleteEntryKeyInKeystoreForBiometric(fragmentActivity: FragmentActivity,
|
fun deleteEntryKeyInKeystoreForBiometric(fragmentActivity: FragmentActivity,
|
||||||
advancedCallback: AdvancedUnlockErrorCallback) {
|
advancedCallback: AdvancedUnlockErrorCallback) {
|
||||||
AdvancedUnlockManager{ fragmentActivity }.apply {
|
AdvancedUnlockManager{ fragmentActivity }.apply {
|
||||||
|
|
|
@ -798,10 +798,6 @@ class DatabaseKDBX : DatabaseVersioned<UUID, UUID, GroupKDBX, EntryKDBX> {
|
||||||
mFieldReferenceEngine.clear()
|
mFieldReferenceEngine.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun containsPublicCustomData(): Boolean {
|
|
||||||
return publicCustomData.size() > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
fun buildNewBinaryAttachment(smallSize: Boolean,
|
fun buildNewBinaryAttachment(smallSize: Boolean,
|
||||||
compression: Boolean,
|
compression: Boolean,
|
||||||
protection: Boolean,
|
protection: Boolean,
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.database.exception
|
|
||||||
|
|
||||||
class ClipboardException(e: Exception) : Exception(e)
|
|
|
@ -92,7 +92,7 @@ constructor(private val databaseKDBX: DatabaseKDBX,
|
||||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.InnerRandomStreamID, uIntTo4Bytes(header.innerRandomStream!!.id))
|
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.InnerRandomStreamID, uIntTo4Bytes(header.innerRandomStream!!.id))
|
||||||
}
|
}
|
||||||
|
|
||||||
if (databaseKDBX.containsPublicCustomData()) {
|
if (databaseKDBX.publicCustomData.size() > 0) {
|
||||||
val bos = ByteArrayOutputStream()
|
val bos = ByteArrayOutputStream()
|
||||||
VariantDictionary.serialize(databaseKDBX.publicCustomData, bos)
|
VariantDictionary.serialize(databaseKDBX.publicCustomData, bos)
|
||||||
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.PublicCustomData, bos.toByteArray())
|
writeHeaderField(DatabaseHeaderKDBX.PwDbHeaderV4Fields.PublicCustomData, bos.toByteArray())
|
||||||
|
|
|
@ -353,6 +353,7 @@ class DatabaseOutputKDBX(private val mDatabaseKDBX: DatabaseKDBX)
|
||||||
writeBoolean(DatabaseKDBXXML.ElemEnableAutoType, group.enableAutoType)
|
writeBoolean(DatabaseKDBXXML.ElemEnableAutoType, group.enableAutoType)
|
||||||
writeBoolean(DatabaseKDBXXML.ElemEnableSearching, group.enableSearching)
|
writeBoolean(DatabaseKDBXXML.ElemEnableSearching, group.enableSearching)
|
||||||
writeUuid(DatabaseKDBXXML.ElemLastTopVisibleEntry, group.lastTopVisibleEntry)
|
writeUuid(DatabaseKDBXXML.ElemLastTopVisibleEntry, group.lastTopVisibleEntry)
|
||||||
|
writeCustomData(group.customData)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(IllegalArgumentException::class, IllegalStateException::class, IOException::class)
|
@Throws(IllegalArgumentException::class, IllegalStateException::class, IOException::class)
|
||||||
|
|
|
@ -33,6 +33,10 @@ class ClipboardEntryNotificationField : Parcelable {
|
||||||
|
|
||||||
private var id: NotificationFieldId = NotificationFieldId.UNKNOWN
|
private var id: NotificationFieldId = NotificationFieldId.UNKNOWN
|
||||||
var label: String = ""
|
var label: String = ""
|
||||||
|
val isSensitive: Boolean
|
||||||
|
get() {
|
||||||
|
return id == NotificationFieldId.PASSWORD
|
||||||
|
}
|
||||||
|
|
||||||
val actionKey: String
|
val actionKey: String
|
||||||
get() = getActionKey(id)
|
get() = getActionKey(id)
|
||||||
|
|
|
@ -31,7 +31,6 @@ import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import com.kunzisoft.keepass.timeout.ClipboardHelper
|
import com.kunzisoft.keepass.timeout.ClipboardHelper
|
||||||
import com.kunzisoft.keepass.timeout.TimeoutHelper.NEVER
|
import com.kunzisoft.keepass.timeout.TimeoutHelper.NEVER
|
||||||
import com.kunzisoft.keepass.utils.LOCK_ACTION
|
import com.kunzisoft.keepass.utils.LOCK_ACTION
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class ClipboardEntryNotificationService : LockNotificationService() {
|
class ClipboardEntryNotificationService : LockNotificationService() {
|
||||||
|
|
||||||
|
@ -75,7 +74,7 @@ class ClipboardEntryNotificationService : LockNotificationService() {
|
||||||
}
|
}
|
||||||
ACTION_CLEAN_CLIPBOARD == intent.action -> {
|
ACTION_CLEAN_CLIPBOARD == intent.action -> {
|
||||||
mTimerJob?.cancel()
|
mTimerJob?.cancel()
|
||||||
cleanClipboard()
|
clipboardHelper?.cleanClipboard()
|
||||||
stopNotificationAndSendLockIfNeeded()
|
stopNotificationAndSendLockIfNeeded()
|
||||||
}
|
}
|
||||||
else -> for (actionKey in ClipboardEntryNotificationField.allActionKeys) {
|
else -> for (actionKey in ClipboardEntryNotificationField.allActionKeys) {
|
||||||
|
@ -153,7 +152,11 @@ class ClipboardEntryNotificationService : LockNotificationService() {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
var generatedValue = fieldToCopy.getGeneratedValue(mEntryInfo)
|
var generatedValue = fieldToCopy.getGeneratedValue(mEntryInfo)
|
||||||
clipboardHelper?.copyToClipboard(fieldToCopy.label, generatedValue)
|
clipboardHelper?.copyToClipboard(
|
||||||
|
fieldToCopy.label,
|
||||||
|
generatedValue,
|
||||||
|
fieldToCopy.isSensitive
|
||||||
|
)
|
||||||
|
|
||||||
val builder = buildNewNotification()
|
val builder = buildNewNotification()
|
||||||
.setSmallIcon(R.drawable.notification_ic_clipboard_key_24dp)
|
.setSmallIcon(R.drawable.notification_ic_clipboard_key_24dp)
|
||||||
|
@ -186,13 +189,17 @@ class ClipboardEntryNotificationService : LockNotificationService() {
|
||||||
// New auto generated value
|
// New auto generated value
|
||||||
if (generatedValue != newGeneratedValue) {
|
if (generatedValue != newGeneratedValue) {
|
||||||
generatedValue = newGeneratedValue
|
generatedValue = newGeneratedValue
|
||||||
clipboardHelper?.copyToClipboard(fieldToCopy.label, generatedValue)
|
clipboardHelper?.copyToClipboard(
|
||||||
|
fieldToCopy.label,
|
||||||
|
generatedValue,
|
||||||
|
fieldToCopy.isSensitive
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
stopNotificationAndSendLockIfNeeded()
|
stopNotificationAndSendLockIfNeeded()
|
||||||
// Clean password only if no next field
|
// Clean password only if no next field
|
||||||
if (nextFields.size <= 0)
|
if (nextFields.size <= 0)
|
||||||
cleanClipboard()
|
clipboardHelper?.cleanClipboard()
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// No timer
|
// No timer
|
||||||
|
@ -202,25 +209,15 @@ class ClipboardEntryNotificationService : LockNotificationService() {
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Clipboard can't be populate", e)
|
Log.e(TAG, "Clipboard can't be populate", e)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun cleanClipboard() {
|
|
||||||
try {
|
|
||||||
clipboardHelper?.cleanClipboard()
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "Clipboard can't be cleaned", e)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTaskRemoved(rootIntent: Intent?) {
|
override fun onTaskRemoved(rootIntent: Intent?) {
|
||||||
cleanClipboard()
|
clipboardHelper?.cleanClipboard()
|
||||||
|
|
||||||
super.onTaskRemoved(rootIntent)
|
super.onTaskRemoved(rootIntent)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
cleanClipboard()
|
clipboardHelper?.cleanClipboard()
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,117 +24,117 @@ import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.os.PersistableBundle
|
||||||
import android.text.SpannableString
|
import android.text.SpannableString
|
||||||
import android.text.method.LinkMovementMethod
|
import android.text.method.LinkMovementMethod
|
||||||
import android.text.util.Linkify
|
import android.text.util.Linkify
|
||||||
|
import android.util.Log
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.kunzisoft.keepass.R
|
import com.kunzisoft.keepass.R
|
||||||
import com.kunzisoft.keepass.database.exception.ClipboardException
|
|
||||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ClipboardHelper(private val context: Context) {
|
class ClipboardHelper(context: Context) {
|
||||||
|
|
||||||
|
private var mAppContext = context.applicationContext
|
||||||
private var mClipboardManager: ClipboardManager? = null
|
private var mClipboardManager: ClipboardManager? = null
|
||||||
|
|
||||||
private val mTimer = Timer()
|
private val mTimer = Timer()
|
||||||
|
|
||||||
private fun getClipboardManager(): ClipboardManager? {
|
private fun getClipboardManager(): ClipboardManager? {
|
||||||
if (mClipboardManager == null)
|
if (mClipboardManager == null)
|
||||||
mClipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?
|
mClipboardManager = mAppContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?
|
||||||
return mClipboardManager
|
return mClipboardManager
|
||||||
}
|
}
|
||||||
|
|
||||||
fun timeoutCopyToClipboard(text: String, toastString: String = "") {
|
fun timeoutCopyToClipboard(label: String, text: String, sensitive: Boolean = false) {
|
||||||
if (toastString.isNotEmpty())
|
|
||||||
Toast.makeText(context, toastString, Toast.LENGTH_LONG).show()
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
copyToClipboard(text)
|
copyToClipboard(label, text, sensitive)
|
||||||
} catch (e: ClipboardException) {
|
} catch (e: Exception) {
|
||||||
showClipboardErrorDialog()
|
showClipboardErrorDialog()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
val clipboardTimeout = PreferencesUtil.getClipboardTimeout(context)
|
val clipboardTimeout = PreferencesUtil.getClipboardTimeout(mAppContext)
|
||||||
if (clipboardTimeout > 0) {
|
if (clipboardTimeout > 0) {
|
||||||
mTimer.schedule(ClearClipboardTask(context, text), clipboardTimeout)
|
mTimer.schedule(ClearClipboardTask(text), clipboardTimeout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getClipboard(context: Context): CharSequence {
|
fun copyToClipboard(label: String, value: String, sensitive: Boolean = false) {
|
||||||
if (getClipboardManager()?.hasPrimaryClip() == true) {
|
getClipboardManager()?.setPrimaryClip(ClipData.newPlainText(DEFAULT_LABEL, value).apply {
|
||||||
val data = getClipboardManager()?.primaryClip
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||||
if (data != null && data.itemCount > 0) {
|
description.extras = PersistableBundle().apply {
|
||||||
val text = data.getItemAt(0).coerceToText(context)
|
putBoolean("android.content.extra.IS_SENSITIVE", sensitive)
|
||||||
if (text != null) {
|
|
||||||
return text
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
if (label.isNotEmpty() && Build.VERSION.SDK_INT < Build.VERSION_CODES.S_V2) {
|
||||||
|
Toast.makeText(
|
||||||
|
mAppContext,
|
||||||
|
mAppContext.getString(
|
||||||
|
R.string.copy_field,
|
||||||
|
label
|
||||||
|
),
|
||||||
|
Toast.LENGTH_LONG
|
||||||
|
).show()
|
||||||
}
|
}
|
||||||
return ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(ClipboardException::class)
|
fun cleanClipboard() {
|
||||||
fun copyToClipboard(value: String) {
|
|
||||||
copyToClipboard("", value)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(ClipboardException::class)
|
|
||||||
fun copyToClipboard(label: String, value: String) {
|
|
||||||
try {
|
|
||||||
getClipboardManager()?.setPrimaryClip(ClipData.newPlainText(label, value))
|
|
||||||
} catch (e: Exception) {
|
|
||||||
throw ClipboardException(e)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(ClipboardException::class)
|
|
||||||
fun cleanClipboard(label: String = "") {
|
|
||||||
try {
|
try {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
getClipboardManager()?.clearPrimaryClip()
|
getClipboardManager()?.clearPrimaryClip()
|
||||||
} else {
|
} else {
|
||||||
copyToClipboard(label, "")
|
copyToClipboard(DEFAULT_LABEL, "")
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
throw ClipboardException(e)
|
Log.e("ClipboardHelper", "Unable to clean the clipboard", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Task which clears the clipboard, and sends a toast to the foreground.
|
// Task which clears the clipboard, and sends a toast to the foreground.
|
||||||
private inner class ClearClipboardTask (private val mCtx: Context,
|
private inner class ClearClipboardTask (private val mClearText: String) : TimerTask() {
|
||||||
private val mClearText: String) : TimerTask() {
|
|
||||||
override fun run() {
|
override fun run() {
|
||||||
val currentClip = getClipboard(mCtx).toString()
|
if (getClipboard(mAppContext).toString() == mClearText) {
|
||||||
if (currentClip == mClearText) {
|
cleanClipboard()
|
||||||
try {
|
}
|
||||||
cleanClipboard()
|
}
|
||||||
R.string.clipboard_cleared
|
|
||||||
} catch (e: ClipboardException) {
|
private fun getClipboard(context: Context): CharSequence {
|
||||||
R.string.clipboard_error_clear
|
if (getClipboardManager()?.hasPrimaryClip() == true) {
|
||||||
|
val data = getClipboardManager()?.primaryClip
|
||||||
|
if (data != null && data.itemCount > 0) {
|
||||||
|
val text = data.getItemAt(0).coerceToText(context)
|
||||||
|
if (text != null) {
|
||||||
|
return text
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun showClipboardErrorDialog() {
|
private fun showClipboardErrorDialog() {
|
||||||
val textDescription = context.getString(R.string.clipboard_error)
|
val textDescription = mAppContext.getString(R.string.clipboard_error)
|
||||||
val spannableString = SpannableString(textDescription)
|
val spannableString = SpannableString(textDescription)
|
||||||
val textView = TextView(context).apply {
|
val textView = TextView(mAppContext).apply {
|
||||||
text = spannableString
|
text = spannableString
|
||||||
autoLinkMask = Activity.RESULT_OK
|
autoLinkMask = Activity.RESULT_OK
|
||||||
movementMethod = LinkMovementMethod.getInstance()
|
movementMethod = LinkMovementMethod.getInstance()
|
||||||
}
|
}
|
||||||
|
|
||||||
Linkify.addLinks(spannableString, Linkify.WEB_URLS)
|
Linkify.addLinks(spannableString, Linkify.WEB_URLS)
|
||||||
AlertDialog.Builder(context)
|
AlertDialog.Builder(mAppContext)
|
||||||
.setTitle(R.string.clipboard_error_title)
|
.setTitle(R.string.clipboard_error_title)
|
||||||
.setView(textView)
|
.setView(textView)
|
||||||
.setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() }
|
.setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() }
|
||||||
.show()
|
.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val DEFAULT_LABEL = ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,9 +52,16 @@ class InheritedCompletionView @JvmOverloads constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setAdapter(adapter)
|
isFocusable = false
|
||||||
|
isFocusableInTouchMode = false
|
||||||
|
//hardwareKeyCompletion.isEnabled = false
|
||||||
|
isCursorVisible = false
|
||||||
|
setTextIsSelectable(false)
|
||||||
inputType = InputType.TYPE_NULL
|
inputType = InputType.TYPE_NULL
|
||||||
adapter.filter.filter(null)
|
setAdapter(adapter)
|
||||||
|
setOnClickListener {
|
||||||
|
showDropDown()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getValue(): Boolean? {
|
fun getValue(): Boolean? {
|
||||||
|
@ -63,7 +70,6 @@ class InheritedCompletionView @JvmOverloads constructor(
|
||||||
|
|
||||||
fun setValue(inherited: Boolean?) {
|
fun setValue(inherited: Boolean?) {
|
||||||
setText(context.getString(InheritedStatus.getStatusFromValue(inherited).stringId))
|
setText(context.getString(InheritedStatus.getStatusFromValue(inherited).stringId))
|
||||||
adapter.filter.filter(null)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum class InheritedStatus(val stringId: Int, val value: Boolean?) {
|
private enum class InheritedStatus(val stringId: Int, val value: Boolean?) {
|
||||||
|
|
|
@ -69,34 +69,6 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:background="?attr/colorPrimary"
|
android:background="?attr/colorPrimary"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
<com.google.android.material.chip.ChipGroup
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
app:chipSpacingVertical="16dp"
|
|
||||||
android:paddingTop="18dp"
|
|
||||||
android:paddingStart="@dimen/default_margin"
|
|
||||||
android:paddingLeft="@dimen/default_margin"
|
|
||||||
android:paddingEnd="@dimen/default_margin"
|
|
||||||
android:paddingRight="@dimen/default_margin"
|
|
||||||
android:paddingBottom="@dimen/default_margin">
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/search_chip_case_sensitive"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="false"
|
|
||||||
style="@style/KeepassDXStyle.Chip.Filter.Icon"
|
|
||||||
android:text="@string/case_sensitive"
|
|
||||||
app:closeIcon="@drawable/ic_case_sensitive_white_24dp" />
|
|
||||||
<com.google.android.material.chip.Chip
|
|
||||||
android:id="@+id/search_chip_regex"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:checked="false"
|
|
||||||
style="@style/KeepassDXStyle.Chip.Filter.Icon"
|
|
||||||
android:text="@string/regex"
|
|
||||||
app:closeIcon="@drawable/ic_regex_white_24dp" />
|
|
||||||
</com.google.android.material.chip.ChipGroup>
|
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -174,7 +146,7 @@
|
||||||
android:text="@string/tags"/>
|
android:text="@string/tags"/>
|
||||||
</com.google.android.material.chip.ChipGroup>
|
</com.google.android.material.chip.ChipGroup>
|
||||||
<com.google.android.material.chip.ChipGroup
|
<com.google.android.material.chip.ChipGroup
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:chipSpacingVertical="16dp"
|
app:chipSpacingVertical="16dp"
|
||||||
android:paddingTop="12dp"
|
android:paddingTop="12dp"
|
||||||
|
@ -209,5 +181,33 @@
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:text="@string/template"/>
|
android:text="@string/template"/>
|
||||||
</com.google.android.material.chip.ChipGroup>
|
</com.google.android.material.chip.ChipGroup>
|
||||||
|
<com.google.android.material.chip.ChipGroup
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
app:chipSpacingVertical="16dp"
|
||||||
|
android:paddingTop="18dp"
|
||||||
|
android:paddingStart="@dimen/default_margin"
|
||||||
|
android:paddingLeft="@dimen/default_margin"
|
||||||
|
android:paddingEnd="@dimen/default_margin"
|
||||||
|
android:paddingRight="@dimen/default_margin"
|
||||||
|
android:paddingBottom="@dimen/default_margin">
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/search_chip_case_sensitive"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="false"
|
||||||
|
style="@style/KeepassDXStyle.Chip.Filter.Icon"
|
||||||
|
android:text="@string/case_sensitive"
|
||||||
|
app:closeIcon="@drawable/ic_case_sensitive_white_24dp" />
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/search_chip_regex"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="false"
|
||||||
|
style="@style/KeepassDXStyle.Chip.Filter.Icon"
|
||||||
|
android:text="@string/regex"
|
||||||
|
app:closeIcon="@drawable/ic_regex_white_24dp" />
|
||||||
|
</com.google.android.material.chip.ChipGroup>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -41,4 +41,53 @@
|
||||||
<string name="clipboard_cleared">ক্লিপবোর্ড পরিষ্কার করা হয়েছে</string>
|
<string name="clipboard_cleared">ক্লিপবোর্ড পরিষ্কার করা হয়েছে</string>
|
||||||
<string name="entry_accessed">শেষ ব্যবহার</string>
|
<string name="entry_accessed">শেষ ব্যবহার</string>
|
||||||
<string name="clipboard_error">কিছু ডিভাইস অ্যাপ্লিকেশনগুলোকে ক্লিপবোর্ড ব্যবহার করতে দেয় না।</string>
|
<string name="clipboard_error">কিছু ডিভাইস অ্যাপ্লিকেশনগুলোকে ক্লিপবোর্ড ব্যবহার করতে দেয় না।</string>
|
||||||
|
<string name="otp_digits">সংখ্যা</string>
|
||||||
|
<string name="password">পাসওয়ার্ড</string>
|
||||||
|
<string name="menu_open">খুলো</string>
|
||||||
|
<string name="read_only">লিখন-সুরক্ষিত</string>
|
||||||
|
<string name="space">স্পেস</string>
|
||||||
|
<string name="menu_file_selection_read_only">লিখন-সুরক্ষিত</string>
|
||||||
|
<string name="protection">সুরক্ষা</string>
|
||||||
|
<string name="menu_cancel">বাতিল</string>
|
||||||
|
<string name="root">মূল</string>
|
||||||
|
<string name="sort_creation_time">সৃষ্টি</string>
|
||||||
|
<string name="database_history">ইতিহাস</string>
|
||||||
|
<string name="hint_length">দৈর্ঘ্য</string>
|
||||||
|
<string name="length">দৈর্ঘ্য</string>
|
||||||
|
<string name="about">সম্পর্কে</string>
|
||||||
|
<string name="warning">সতর্কতা</string>
|
||||||
|
<string name="menu_edit">সম্পাদনা</string>
|
||||||
|
<string name="sort_title">শিরোনাম</string>
|
||||||
|
<string name="sort_username">নাম</string>
|
||||||
|
<string name="uppercase">বড় হাতের</string>
|
||||||
|
<string name="menu_appearance_settings">চেহারা</string>
|
||||||
|
<string name="entry_url">ইউআরএল</string>
|
||||||
|
<string name="menu_donate">দান করো</string>
|
||||||
|
<string name="menu_copy">অনুলিপি</string>
|
||||||
|
<string name="menu_paste">লেপন</string>
|
||||||
|
<string name="hint_pass">পাসওয়ার্ড</string>
|
||||||
|
<string name="sort_last_modify_time">পরিবর্তন</string>
|
||||||
|
<string name="otp_counter">গণক</string>
|
||||||
|
<string name="parallelism">উপমা</string>
|
||||||
|
<string name="minus">বিয়োগ</string>
|
||||||
|
<string name="never">কখনো না</string>
|
||||||
|
<string name="menu_move">স্থানান্তর</string>
|
||||||
|
<string name="otp_secret">গোপন</string>
|
||||||
|
<string name="entry_password">পাসওয়ার্ড</string>
|
||||||
|
<string name="sort_menu">সাজাও</string>
|
||||||
|
<string name="entry_title">শিরোনাম</string>
|
||||||
|
<string name="otp_algorithm">অ্যালগরিদম</string>
|
||||||
|
<string name="entry_otp">ওটিপি</string>
|
||||||
|
<string name="entry_user_name">নাম</string>
|
||||||
|
<string name="hint_keyfile">চাবিনথি(কি ফাইল)</string>
|
||||||
|
<string name="settings">পছন্দসমূহ</string>
|
||||||
|
<string name="lowercase">ছোটো হাতের</string>
|
||||||
|
<string name="menu_delete">মুছো</string>
|
||||||
|
<string name="menu_search">অনুসন্ধান</string>
|
||||||
|
<string name="menu_open_file_read_and_write">পরিবর্তনযোগ্য</string>
|
||||||
|
<string name="progress_title">কাজ করা হচ্ছে…</string>
|
||||||
|
<string name="special">বিশেষ</string>
|
||||||
|
<string name="underline">নিম্নরেখা</string>
|
||||||
|
<string name="sort_last_access_time">প্রবেশ</string>
|
||||||
|
<string name="search">অনুসন্ধান</string>
|
||||||
</resources>
|
</resources>
|
96
app/src/main/res/values-bn/strings.xml
Normal file
96
app/src/main/res/values-bn/strings.xml
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="contact">যোগাযোগ</string>
|
||||||
|
<string name="contribution">অবদান</string>
|
||||||
|
<string name="feedback">প্রতিক্রিয়া</string>
|
||||||
|
<string name="homepage">মূলপাতা</string>
|
||||||
|
<string name="about_description">কিপাস পাসওয়ার্ড ম্যানেজারের অ্যান্ড্রয়েড বাস্তবায়ন</string>
|
||||||
|
<string name="accept">গ্রহণ</string>
|
||||||
|
<string name="add_entry">এন্টরি যোগ করুন</string>
|
||||||
|
<string name="edit_entry">এন্টরি সম্পাদনা করুন</string>
|
||||||
|
<string name="add_group">গ্রুপ যোগ করুন</string>
|
||||||
|
<string name="master_key">প্রধান চাবি</string>
|
||||||
|
<string name="security">নিরাপত্তা</string>
|
||||||
|
<string name="encryption">এনক্রিপশন</string>
|
||||||
|
<string name="encryption_algorithm">এনক্রিপশন অ্যালগরিদম</string>
|
||||||
|
<string name="key_derivation_function">কি পাওয়ার ফাংশন</string>
|
||||||
|
<string name="app_timeout">অ্যাপের সময় পার হয়ে গিয়েছিলো</string>
|
||||||
|
<string name="app_timeout_summary">ডাটাবেস লক করার আগে অব্যবহৃত সময়</string>
|
||||||
|
<string name="application">অ্যাপ</string>
|
||||||
|
<string name="brackets">ব্র্যাকেট</string>
|
||||||
|
<string name="extended_ASCII">বর্ধিত ASCII</string>
|
||||||
|
<string name="file_manager_install_description">ACTION_CREATE_DOCUMENT এবং ACTION_OPEN_DOCUMENT অভিপ্রায় গ্রহণ করে এমন একটি ফাইল ম্যানেজার ডাটাবেস ফাইলগুলো তৈরি করা, খোলা এবং সংরক্ষণ করতে প্রয়োজন।</string>
|
||||||
|
<string name="allow">অনুমোদন</string>
|
||||||
|
<string name="clipboard_cleared">ক্লিপবোর্ড পরিষ্কার করা হয়েছে</string>
|
||||||
|
<string name="clipboard_error_title">ক্লিপবোর্ড ত্রুটি</string>
|
||||||
|
<string name="clipboard_error">কিছু ডিভাইস অ্যাপ্লিকেশনগুলোকে ক্লিপবোর্ড ব্যবহার করতে দেয় না।</string>
|
||||||
|
<string name="content_description_background">পটভূমি</string>
|
||||||
|
<string name="validate">সত্যায়ন</string>
|
||||||
|
<string name="discard">বাতিল</string>
|
||||||
|
<string name="content_description_update_from_list">হালনাগাদ</string>
|
||||||
|
<string name="content_description_remove_from_list">সরাও</string>
|
||||||
|
<string name="database">তথ্যভিত্তি</string>
|
||||||
|
<string name="digits">ডিজিট</string>
|
||||||
|
<string name="entry_accessed">শেষ ব্যবহার</string>
|
||||||
|
<string name="entry_cancel">বাতিল</string>
|
||||||
|
<string name="entry_notes">দ্রষ্টব্য</string>
|
||||||
|
<string name="entry_created">তৈরিকৃত</string>
|
||||||
|
<string name="entry_expires">মেয়াদ</string>
|
||||||
|
<string name="entry_UUID">বিশেষ শনাক্তকরণ সংকেত(ইউইউআইডি)</string>
|
||||||
|
<string name="entry_history">ইতিহাস</string>
|
||||||
|
<string name="entry_attachments">সংযুক্তি</string>
|
||||||
|
<string name="entry_keyfile">চাবিনথি(কিফাইল)</string>
|
||||||
|
<string name="entry_modified">পরিবর্তিত</string>
|
||||||
|
<string name="clipboard_error_clear">ক্লিপবোর্ড পরিষ্কার করা যায়নি</string>
|
||||||
|
<string name="clipboard_timeout">ক্লিপবোর্ডের সময় শেষ</string>
|
||||||
|
<string name="entry_password">পাসওয়ার্ড</string>
|
||||||
|
<string name="entry_title">শিরোনাম</string>
|
||||||
|
<string name="otp_secret">গোপন</string>
|
||||||
|
<string name="hint_keyfile">চাবিনথি(কি ফাইল)</string>
|
||||||
|
<string name="menu_donate">দান করো</string>
|
||||||
|
<string name="menu_edit">সম্পাদনা</string>
|
||||||
|
<string name="database_history">ইতিহাস</string>
|
||||||
|
<string name="menu_appearance_settings">চেহারা</string>
|
||||||
|
<string name="otp_counter">গণক</string>
|
||||||
|
<string name="otp_digits">সংখ্যা</string>
|
||||||
|
<string name="otp_algorithm">অ্যালগরিদম</string>
|
||||||
|
<string name="entry_otp">ওটিপি</string>
|
||||||
|
<string name="entry_url">ইউআরএল</string>
|
||||||
|
<string name="entry_user_name">নাম</string>
|
||||||
|
<string name="hint_length">দৈর্ঘ্য</string>
|
||||||
|
<string name="hint_pass">পাসওয়ার্ড</string>
|
||||||
|
<string name="password">পাসওয়ার্ড</string>
|
||||||
|
<string name="length">দৈর্ঘ্য</string>
|
||||||
|
<string name="lowercase">ছোটো হাতের</string>
|
||||||
|
<string name="about">সম্পর্কে</string>
|
||||||
|
<string name="settings">পছন্দসমূহ</string>
|
||||||
|
<string name="menu_copy">অনুলিপি</string>
|
||||||
|
<string name="menu_move">স্থানান্তর</string>
|
||||||
|
<string name="menu_paste">লেপন</string>
|
||||||
|
<string name="menu_delete">মুছো</string>
|
||||||
|
<string name="menu_cancel">বাতিল</string>
|
||||||
|
<string name="menu_open">খুলো</string>
|
||||||
|
<string name="menu_search">অনুসন্ধান</string>
|
||||||
|
<string name="menu_file_selection_read_only">লিখন-সুরক্ষিত</string>
|
||||||
|
<string name="menu_open_file_read_and_write">পরিবর্তনযোগ্য</string>
|
||||||
|
<string name="minus">বিয়োগ</string>
|
||||||
|
<string name="never">কখনো না</string>
|
||||||
|
<string name="progress_title">কাজ করা হচ্ছে…</string>
|
||||||
|
<string name="protection">সুরক্ষা</string>
|
||||||
|
<string name="read_only">লিখন-সুরক্ষিত</string>
|
||||||
|
<string name="root">মূল</string>
|
||||||
|
<string name="parallelism">উপমা</string>
|
||||||
|
<string name="space">স্পেস</string>
|
||||||
|
<string name="sort_menu">সাজাও</string>
|
||||||
|
<string name="sort_title">শিরোনাম</string>
|
||||||
|
<string name="sort_username">নাম</string>
|
||||||
|
<string name="sort_creation_time">সৃষ্টি</string>
|
||||||
|
<string name="sort_last_modify_time">পরিবর্তন</string>
|
||||||
|
<string name="sort_last_access_time">প্রবেশ</string>
|
||||||
|
<string name="special">বিশেষ</string>
|
||||||
|
<string name="search">অনুসন্ধান</string>
|
||||||
|
<string name="underline">নিম্নরেখা</string>
|
||||||
|
<string name="uppercase">বড় হাতের</string>
|
||||||
|
<string name="warning">সতর্কতা</string>
|
||||||
|
<string name="clipboard_timeout_summary">ক্লিপবোর্ডে সংরক্ষণ সময়কাল (যদি তোমার যন্ত্র সনর্থন করে)</string>
|
||||||
|
</resources>
|
|
@ -471,13 +471,13 @@
|
||||||
<string name="autofill_read_only_save">Uložení dat není povoleno, je-li databáze v režimu pouze pro čtení.</string>
|
<string name="autofill_read_only_save">Uložení dat není povoleno, je-li databáze v režimu pouze pro čtení.</string>
|
||||||
<string name="autofill_ask_to_save_data_summary">Po dokončení vyplňování formuláře se zeptat na uložení dat</string>
|
<string name="autofill_ask_to_save_data_summary">Po dokončení vyplňování formuláře se zeptat na uložení dat</string>
|
||||||
<string name="autofill_ask_to_save_data_title">Zeptat se před uložením</string>
|
<string name="autofill_ask_to_save_data_title">Zeptat se před uložením</string>
|
||||||
<string name="autofill_save_search_info_summary">Pokuste se uložit údaje hledání, když manuálně vybíráte položku</string>
|
<string name="autofill_save_search_info_summary">Pokusit se uložit údaje hledání pro příští použití, vybíráte-li manuálně záznam</string>
|
||||||
<string name="autofill_save_search_info_title">Uložit výsledky vyhledávání</string>
|
<string name="autofill_save_search_info_title">Uložit výsledky vyhledávání</string>
|
||||||
<string name="autofill_close_database_summary">Zavřít databázi po samovyplnění polí</string>
|
<string name="autofill_close_database_summary">Zavřít databázi po samovyplnění polí</string>
|
||||||
<string name="autofill_close_database_title">Zavřít databázi</string>
|
<string name="autofill_close_database_title">Zavřít databázi</string>
|
||||||
<string name="keyboard_previous_lock_summary">Po uzamknutí databáze automaticky přepnout zpět na předchozí klávesnici</string>
|
<string name="keyboard_previous_lock_summary">Po uzamknutí databáze automaticky přepnout zpět na předchozí klávesnici</string>
|
||||||
<string name="keyboard_previous_lock_title">Uzamknout databázi</string>
|
<string name="keyboard_previous_lock_title">Uzamknout databázi</string>
|
||||||
<string name="keyboard_save_search_info_summary">Je-li po sdílení URL s KeePassDX vybrán záznam, pokusit se zapamatovat onen záznam pro další použití</string>
|
<string name="keyboard_save_search_info_summary">Pokusit se uložit sdílený záznam pro příští použití, je-li záznam manuálně vybrán</string>
|
||||||
<string name="keyboard_save_search_info_title">Uložit sdílené info</string>
|
<string name="keyboard_save_search_info_title">Uložit sdílené info</string>
|
||||||
<string name="notification">Oznámení</string>
|
<string name="notification">Oznámení</string>
|
||||||
<string name="biometric_security_update_required">Vyžadována aktualizace biometrického zabezpečení.</string>
|
<string name="biometric_security_update_required">Vyžadována aktualizace biometrického zabezpečení.</string>
|
||||||
|
@ -504,7 +504,7 @@
|
||||||
<string name="advanced_unlock_invalid_key">Nedaří se načíst klíč rozšířeného odemknutí. Prosím, smažte ho a opakujte proces rozpoznání odemknutí.</string>
|
<string name="advanced_unlock_invalid_key">Nedaří se načíst klíč rozšířeného odemknutí. Prosím, smažte ho a opakujte proces rozpoznání odemknutí.</string>
|
||||||
<string name="advanced_unlock_prompt_extract_credential_message">Načíst důvěrný údaj pomocí dat rozšířeného odemknutí</string>
|
<string name="advanced_unlock_prompt_extract_credential_message">Načíst důvěrný údaj pomocí dat rozšířeného odemknutí</string>
|
||||||
<string name="advanced_unlock_prompt_extract_credential_title">Otevřít pomocí rozšířeného odemykání</string>
|
<string name="advanced_unlock_prompt_extract_credential_title">Otevřít pomocí rozšířeného odemykání</string>
|
||||||
<string name="advanced_unlock_prompt_store_credential_message">Varování: Pokud použijete rozpoznání rozšířeného odemknutí, musíte si i nadále pamatovat hlavní heslo.</string>
|
<string name="advanced_unlock_prompt_store_credential_message">Pokud použijete rozpoznání rozšířeného odemknutí, musíte si i nadále pamatovat hlavní heslo.</string>
|
||||||
<string name="advanced_unlock_prompt_store_credential_title">Rozpoznání rozšířeného odemknutí</string>
|
<string name="advanced_unlock_prompt_store_credential_title">Rozpoznání rozšířeného odemknutí</string>
|
||||||
<string name="open_advanced_unlock_prompt_store_credential">Pro uložení důvěrných údajů otevřete pobídku rozšířeného odemknutí</string>
|
<string name="open_advanced_unlock_prompt_store_credential">Pro uložení důvěrných údajů otevřete pobídku rozšířeného odemknutí</string>
|
||||||
<string name="open_advanced_unlock_prompt_unlock_database">Databázi otevřete i pomocí nabídky rozšířeného odemykání</string>
|
<string name="open_advanced_unlock_prompt_unlock_database">Databázi otevřete i pomocí nabídky rozšířeného odemykání</string>
|
||||||
|
@ -622,4 +622,27 @@
|
||||||
<string name="navigation_drawer_close">Zavření navigačního panelu</string>
|
<string name="navigation_drawer_close">Zavření navigačního panelu</string>
|
||||||
<string name="inherited">Převzít</string>
|
<string name="inherited">Převzít</string>
|
||||||
<string name="auto_type_sequence">Posloupnost automatického vyplňování</string>
|
<string name="auto_type_sequence">Posloupnost automatického vyplňování</string>
|
||||||
|
<string name="content_description_passphrase_word_count">Počet slov hesla</string>
|
||||||
|
<string name="passphrase">Heslo</string>
|
||||||
|
<string name="colorize_password_title">Zabarvit hesla</string>
|
||||||
|
<string name="colorize_password_summary">Zabarvit znaky hesla podle typu</string>
|
||||||
|
<string name="warning_database_already_opened">Databáze je již otevřená, zavřete ji, než otevřete jinou</string>
|
||||||
|
<string name="advanced_unlock_keystore_warning">Tato funkce uloží přihlašovací údaje v bezpečném úložišti klíčů Vašeho zařízení.
|
||||||
|
\n
|
||||||
|
\nV závislosti na implementaci nativního API operačního systému nemusí být plně funkční.
|
||||||
|
\nOvěřte kompatibilitu a zabezpečení úložiště klíčů u výrobce svého zařízení a dodavatele operačního systému, jejž používáte.</string>
|
||||||
|
<string name="keyboard_previous_search_title">Panel hledání</string>
|
||||||
|
<string name="keyboard_previous_search_summary">Automaticky přepnout na předchozí klávesnici v panelu hledání</string>
|
||||||
|
<string name="entropy">Entropie: %1$s bitů</string>
|
||||||
|
<string name="entropy_calculate">Entropie: spočítat…</string>
|
||||||
|
<string name="at_least_one_char">Alespoň jeden znak z každé</string>
|
||||||
|
<string name="entropy_high">Entropie: vysoká</string>
|
||||||
|
<string name="exclude_ambiguous_chars">Vyloučit víceznačné znaky</string>
|
||||||
|
<string name="consider_chars_filter">Uvážit znaky</string>
|
||||||
|
<string name="word_separator">Oddělovač</string>
|
||||||
|
<string name="ignore_chars_filter">Vyloučit znaky</string>
|
||||||
|
<string name="lower_case">malá písmena</string>
|
||||||
|
<string name="upper_case">VELKÁ PÍSMENA</string>
|
||||||
|
<string name="title_case">Titulové Psaní</string>
|
||||||
|
<string name="character_count">Počet znaků: %1$d</string>
|
||||||
</resources>
|
</resources>
|
|
@ -564,4 +564,7 @@
|
||||||
<string name="custom_data">Brugerdefinerede data</string>
|
<string name="custom_data">Brugerdefinerede data</string>
|
||||||
<string name="search_filters">Søg filtre</string>
|
<string name="search_filters">Søg filtre</string>
|
||||||
<string name="current_group">Nuværende gruppe</string>
|
<string name="current_group">Nuværende gruppe</string>
|
||||||
|
<string name="number">Nummer</string>
|
||||||
|
<string name="name">Navn</string>
|
||||||
|
<string name="type">Type</string>
|
||||||
</resources>
|
</resources>
|
|
@ -291,7 +291,7 @@
|
||||||
\n\"Modifiable\" vous permet d’ajouter, de supprimer ou de modifier tous les éléments comme vous le souhaitez.</string>
|
\n\"Modifiable\" vous permet d’ajouter, de supprimer ou de modifier tous les éléments comme vous le souhaitez.</string>
|
||||||
<string name="edit_entry">Modifier l’entrée</string>
|
<string name="edit_entry">Modifier l’entrée</string>
|
||||||
<string name="error_load_database">Impossible de charger votre base de données.</string>
|
<string name="error_load_database">Impossible de charger votre base de données.</string>
|
||||||
<string name="error_load_database_KDF_memory">Impossible de charger la clé. Veuillez essayer de diminuer l’utilisation mémoire de la fonction de dérivation de clé.</string>
|
<string name="error_load_database_KDF_memory">Impossible de charger la clé. Essayez de diminuer l’utilisation mémoire de la fonction de dérivation de clé.</string>
|
||||||
<string name="list_entries_show_username_title">Afficher les noms d’utilisateur</string>
|
<string name="list_entries_show_username_title">Afficher les noms d’utilisateur</string>
|
||||||
<string name="list_entries_show_username_summary">Affiche les noms d’utilisateur dans les listes d’entrées</string>
|
<string name="list_entries_show_username_summary">Affiche les noms d’utilisateur dans les listes d’entrées</string>
|
||||||
<string name="build_label">Compilation %1$s</string>
|
<string name="build_label">Compilation %1$s</string>
|
||||||
|
|
|
@ -461,7 +461,7 @@
|
||||||
<string name="data">Podaci</string>
|
<string name="data">Podaci</string>
|
||||||
<string name="warning_sure_remove_data">Svejedno ukloniti ove podatke\?</string>
|
<string name="warning_sure_remove_data">Svejedno ukloniti ove podatke\?</string>
|
||||||
<string name="content_description_credentials_information">Podaci za prijavu</string>
|
<string name="content_description_credentials_information">Podaci za prijavu</string>
|
||||||
<string name="autofill_save_search_info_summary">Pokušaj spremiti podatke pretrage prilikom odabira ručnog unosa</string>
|
<string name="autofill_save_search_info_summary">Pokušaj spremiti podatke prilikom odabira ručnog unosa za jednostavniju buduću upotrebu</string>
|
||||||
<string name="notification">Obavijest</string>
|
<string name="notification">Obavijest</string>
|
||||||
<string name="error_registration_read_only">Nije dopušteno spremati novi element u zaštićenoj bazi podataka</string>
|
<string name="error_registration_read_only">Nije dopušteno spremati novi element u zaštićenoj bazi podataka</string>
|
||||||
<string name="autofill_read_only_save">Spremanje podataka nije dopušteno za bazu podataka koja je otvorena u zaštićenom stanju.</string>
|
<string name="autofill_read_only_save">Spremanje podataka nije dopušteno za bazu podataka koja je otvorena u zaštićenom stanju.</string>
|
||||||
|
@ -474,7 +474,7 @@
|
||||||
<string name="autofill_close_database_title">Zatvori bazu podataka</string>
|
<string name="autofill_close_database_title">Zatvori bazu podataka</string>
|
||||||
<string name="keyboard_previous_lock_summary">Automatski prebaci na prethodnu tipkovnicu nakon zaključavanja baze podataka</string>
|
<string name="keyboard_previous_lock_summary">Automatski prebaci na prethodnu tipkovnicu nakon zaključavanja baze podataka</string>
|
||||||
<string name="keyboard_previous_lock_title">Zaključaj bazu podataka</string>
|
<string name="keyboard_previous_lock_title">Zaključaj bazu podataka</string>
|
||||||
<string name="keyboard_save_search_info_summary">Nakon dijeljenja informacija s KeePassDX-om, kad je unos odabran, pokušaj zapamtiti taj unos za buduće korištenje</string>
|
<string name="keyboard_save_search_info_summary">Pokušaj spremiti dijeljene podatke prilikom ručnog odabira unosa za jednostavniju buduću upotrebu</string>
|
||||||
<string name="keyboard_save_search_info_title">Spremi dijeljene informacije</string>
|
<string name="keyboard_save_search_info_title">Spremi dijeljene informacije</string>
|
||||||
<string name="warning_empty_recycle_bin">Trajno izbrisati sve čvorove iz smeća\?</string>
|
<string name="warning_empty_recycle_bin">Trajno izbrisati sve čvorove iz smeća\?</string>
|
||||||
<string name="biometric_security_update_required">Potrebno je aktualizirati biometrijsku zaštitu.</string>
|
<string name="biometric_security_update_required">Potrebno je aktualizirati biometrijsku zaštitu.</string>
|
||||||
|
|
|
@ -193,19 +193,19 @@
|
||||||
<string name="lock_database_screen_off_title">Blocco schermo</string>
|
<string name="lock_database_screen_off_title">Blocco schermo</string>
|
||||||
<string name="lock_database_screen_off_summary">Blocca il database dopo alcuni secondi quando lo schermo è spento</string>
|
<string name="lock_database_screen_off_summary">Blocca il database dopo alcuni secondi quando lo schermo è spento</string>
|
||||||
<string name="advanced_unlock">Impronta digitale</string>
|
<string name="advanced_unlock">Impronta digitale</string>
|
||||||
<string name="biometric_unlock_enable_title">Scansione di impronte</string>
|
<string name="biometric_unlock_enable_title">Scansione biometrica</string>
|
||||||
<string name="biometric_unlock_enable_summary">Consente la scansione biometrica per aprire il database</string>
|
<string name="biometric_unlock_enable_summary">Consente la scansione biometrica per aprire il database</string>
|
||||||
<string name="biometric_delete_all_key_title">Elimina chiavi di cifratura</string>
|
<string name="biometric_delete_all_key_title">Elimina chiavi di cifratura</string>
|
||||||
<string name="biometric_delete_all_key_summary">Elimina tutte le chiavi di cifratura relative allo sblocco avanzato</string>
|
<string name="biometric_delete_all_key_summary">Elimina tutte le chiavi di cifratura relative allo sblocco avanzato</string>
|
||||||
<string name="unavailable_feature_text">Impossibile avviare questa funzione.</string>
|
<string name="unavailable_feature_text">Impossibile avviare questa funzione.</string>
|
||||||
<string name="unavailable_feature_version">Il dispositivo usa Android %1$s, ma richiede %2$s o versioni successive.</string>
|
<string name="unavailable_feature_version">Il dispositivo usa Android %1$s, ma richiede %2$s o versioni successive.</string>
|
||||||
<string name="unavailable_feature_hardware">L\'hardware relativo non è stato trovato.</string>
|
<string name="unavailable_feature_hardware">L\'hardware relativo non è stato trovato.</string>
|
||||||
<string name="file_name">Nome file</string>
|
<string name="file_name">Nome del file</string>
|
||||||
<string name="path">Percorso</string>
|
<string name="path">Percorso</string>
|
||||||
<string name="assign_master_key">Assegna una chiave master</string>
|
<string name="assign_master_key">Assegna una chiave master</string>
|
||||||
<string name="create_keepass_file">Crea un nuovo database</string>
|
<string name="create_keepass_file">Crea un nuovo database</string>
|
||||||
<string name="recycle_bin_title">Uso del Cestino</string>
|
<string name="recycle_bin_title">Utilizzo del Cestino</string>
|
||||||
<string name="recycle_bin_summary">Sposta i gruppi e le voci nel gruppo «Cestino» prima di eliminarlo</string>
|
<string name="recycle_bin_summary">Sposta i gruppi e le voci nel gruppo «Cestino» prima di eliminarli</string>
|
||||||
<string name="monospace_font_fields_enable_title">Carattere campi</string>
|
<string name="monospace_font_fields_enable_title">Carattere campi</string>
|
||||||
<string name="monospace_font_fields_enable_summary">Cambia il carattere usato nei campi per una migliore visibilità</string>
|
<string name="monospace_font_fields_enable_summary">Cambia il carattere usato nei campi per una migliore visibilità</string>
|
||||||
<string name="allow_copy_password_title">Fiducia appunti</string>
|
<string name="allow_copy_password_title">Fiducia appunti</string>
|
||||||
|
@ -392,9 +392,9 @@
|
||||||
<string name="validate">Convalida</string>
|
<string name="validate">Convalida</string>
|
||||||
<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">Messaggio di apertura automatica</string>
|
||||||
<string name="max_history_size_summary">Limita la dimensione della cronologia per voce</string>
|
<string name="max_history_size_summary">Limita la dimensione della cronologia per ciascuna 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 ciascuna 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>
|
||||||
<string name="database_data_compression_title">Compressione dati</string>
|
<string name="database_data_compression_title">Compressione dati</string>
|
||||||
|
@ -455,7 +455,7 @@
|
||||||
<string name="upload_attachment">Carica %1$s</string>
|
<string name="upload_attachment">Carica %1$s</string>
|
||||||
<string name="education_add_attachment_summary">Carica un allegato alla voce per salvare dati esterni importanti.</string>
|
<string name="education_add_attachment_summary">Carica un allegato alla voce per salvare dati esterni importanti.</string>
|
||||||
<string name="education_add_attachment_title">Aggiungi allegato</string>
|
<string name="education_add_attachment_title">Aggiungi allegato</string>
|
||||||
<string name="database_data_remove_unlinked_attachments_summary">Rimuovi gli allegati contenuti nel database ma non collegati ad una voce</string>
|
<string name="database_data_remove_unlinked_attachments_summary">Rimuovi gli allegati contenuti nel database ma non riferiti ad alcuna voce</string>
|
||||||
<string name="database_data_remove_unlinked_attachments_title">Rimuovi i dati scollegati</string>
|
<string name="database_data_remove_unlinked_attachments_title">Rimuovi i dati scollegati</string>
|
||||||
<string name="data">Dati</string>
|
<string name="data">Dati</string>
|
||||||
<string name="warning_empty_keyfile_explanation">Il contenuto del file chiave non deve mai essere modificato e, nel migliore dei casi, dovrebbe contenere dati generati casualmente.</string>
|
<string name="warning_empty_keyfile_explanation">Il contenuto del file chiave non deve mai essere modificato e, nel migliore dei casi, dovrebbe contenere dati generati casualmente.</string>
|
||||||
|
@ -471,15 +471,15 @@
|
||||||
<string name="show_uuid_summary">Visualizza l\'UUID collegato a una voce o a un gruppo</string>
|
<string name="show_uuid_summary">Visualizza l\'UUID collegato a una voce o a un gruppo</string>
|
||||||
<string name="show_uuid_title">Mostra UUID</string>
|
<string name="show_uuid_title">Mostra UUID</string>
|
||||||
<string name="autofill_read_only_save">Il salvataggio dei dati non è consentito per un database aperto in sola lettura.</string>
|
<string name="autofill_read_only_save">Il salvataggio dei dati non è consentito per un database aperto in sola lettura.</string>
|
||||||
<string name="autofill_ask_to_save_data_summary">Chiedi di salvare i dati quando un modulo viene convalidato</string>
|
<string name="autofill_ask_to_save_data_summary">Chiedi di salvare i dati quando l\'immissione dei dati in un form viene completata</string>
|
||||||
<string name="autofill_ask_to_save_data_title">Chiedi di salvare i dati</string>
|
<string name="autofill_ask_to_save_data_title">Chiedi di salvare i dati</string>
|
||||||
<string name="autofill_save_search_info_summary">Prova a salvare le informazioni di ricerca quando effettui una selezione di immissione manuale</string>
|
<string name="autofill_save_search_info_summary">Provare a salvare le informazioni di ricerca quando viene selezionato manualmente un elemento per facilitarne gli utilizzi futuri</string>
|
||||||
<string name="autofill_save_search_info_title">Salva le informazioni di ricerca</string>
|
<string name="autofill_save_search_info_title">Salva le informazioni di ricerca</string>
|
||||||
<string name="autofill_close_database_summary">Chiudi il database dopo aver usato l\'autocompletamento</string>
|
<string name="autofill_close_database_summary">Chiudi il database dopo aver usato l\'autocompletamento</string>
|
||||||
<string name="autofill_close_database_title">Chiudi database</string>
|
<string name="autofill_close_database_title">Chiudi database</string>
|
||||||
<string name="keyboard_previous_lock_summary">Torna automaticamente alla tastiera precedente dopo aver bloccato il database</string>
|
<string name="keyboard_previous_lock_summary">Torna automaticamente alla tastiera precedente dopo aver bloccato il database</string>
|
||||||
<string name="keyboard_previous_lock_title">Blocca il database</string>
|
<string name="keyboard_previous_lock_title">Blocca il database</string>
|
||||||
<string name="keyboard_save_search_info_summary">Dopo la una URL in KeePassDX, quando viene selezionata una voce, prova a salvare quella voce per usi futuri</string>
|
<string name="keyboard_save_search_info_summary">Provare a salvare l\'informazione condivisa quando viene selezionato manualmente un elemento, per poterne facilitare gli utilizzi futuri</string>
|
||||||
<string name="keyboard_save_search_info_title">Salva le informazioni condivise</string>
|
<string name="keyboard_save_search_info_title">Salva le informazioni condivise</string>
|
||||||
<string name="notification">Notifica</string>
|
<string name="notification">Notifica</string>
|
||||||
<string name="biometric_security_update_required">È necessario un aggiornamento della sicurezza biometrica.</string>
|
<string name="biometric_security_update_required">È necessario un aggiornamento della sicurezza biometrica.</string>
|
||||||
|
@ -498,20 +498,20 @@
|
||||||
<string name="back_to_previous_keyboard">Torna alla tasitera precedente</string>
|
<string name="back_to_previous_keyboard">Torna alla tasitera precedente</string>
|
||||||
<string name="custom_fields">Campi personalizzati</string>
|
<string name="custom_fields">Campi personalizzati</string>
|
||||||
<string name="advanced_unlock_delete_all_key_warning">Vuoi eliminare le chiavi di cifratura relative allo sblocco avanzato\?</string>
|
<string name="advanced_unlock_delete_all_key_warning">Vuoi eliminare le chiavi di cifratura relative allo sblocco avanzato\?</string>
|
||||||
<string name="advanced_unlock_timeout">Scadenza sblocco avanzato</string>
|
<string name="advanced_unlock_timeout">Durata dello sblocco avanzato</string>
|
||||||
<string name="temp_advanced_unlock_enable_summary">Non salvare alcun contenuto criptato per usare lo sblocco avanzato</string>
|
<string name="temp_advanced_unlock_enable_summary">Non salvare alcun contenuto criptato per usare lo sblocco avanzato</string>
|
||||||
<string name="temp_advanced_unlock_timeout_summary">Validità dello sblocco avanzato prima di eliminarne il contenuto</string>
|
<string name="temp_advanced_unlock_timeout_summary">Validità dello sblocco avanzato prima di eliminarne il contenuto</string>
|
||||||
<string name="temp_advanced_unlock_timeout_title">Scadenza sblocco avanzato</string>
|
<string name="temp_advanced_unlock_timeout_title">Scadenza dello sblocco avanzato</string>
|
||||||
<string name="temp_advanced_unlock_enable_title">Sblocco avanzato temporaneo</string>
|
<string name="temp_advanced_unlock_enable_title">Sblocco avanzato temporaneo</string>
|
||||||
<string name="device_credential_unlock_enable_summary">Utilizza le credenziali del dispositivo per sbloccare il database</string>
|
<string name="device_credential_unlock_enable_summary">Permette di usare le credenziali del dispositivo per sbloccare il database</string>
|
||||||
<string name="device_credential_unlock_enable_title">Sblocco con credenziali dispositivo</string>
|
<string name="device_credential_unlock_enable_title">Sblocco con le credenziali del dispositivo</string>
|
||||||
<string name="advanced_unlock_tap_delete">Tocca per eliminare le chiavi di sblocco avanzato</string>
|
<string name="advanced_unlock_tap_delete">Tocca per eliminare le chiavi di sblocco avanzato</string>
|
||||||
<string name="content">Contenuto</string>
|
<string name="content">Contenuto</string>
|
||||||
<string name="advanced_unlock_prompt_not_initialized">Non è possibile inizializzare lo sblocco avanzato.</string>
|
<string name="advanced_unlock_prompt_not_initialized">Non è possibile inizializzare lo sblocco avanzato.</string>
|
||||||
<string name="advanced_unlock_not_recognized">Non è possibile riconoscere lo sblocco avanzato</string>
|
<string name="advanced_unlock_not_recognized">Non è possibile riconoscere lo sblocco avanzato</string>
|
||||||
<string name="advanced_unlock_invalid_key">Non è possibile leggere la chiave di sblocco avanzato. Eliminala e ripeti la procedura di riconoscimento dello sblocco.</string>
|
<string name="advanced_unlock_invalid_key">Non è possibile leggere la chiave di sblocco avanzato. Eliminala e ripeti la procedura di riconoscimento dello sblocco.</string>
|
||||||
<string name="advanced_unlock_prompt_extract_credential_message">Estrai le credenziali del database con i dati dallo sblocco avanzato</string>
|
<string name="advanced_unlock_prompt_extract_credential_message">Estrai le credenziali del database con i dati dallo sblocco avanzato</string>
|
||||||
<string name="advanced_unlock_prompt_store_credential_message">Attenzione: dovrai sempre ricordare la password principale anche se usi lo sblocco avanzato.</string>
|
<string name="advanced_unlock_prompt_store_credential_message">Attenzione: dovrai comunque ricordare la password principale anche se usi lo sblocco avanzato.</string>
|
||||||
<string name="advanced_unlock_prompt_store_credential_title">Riconoscimento con sblocco avanzato</string>
|
<string name="advanced_unlock_prompt_store_credential_title">Riconoscimento con sblocco avanzato</string>
|
||||||
<string name="device_credential">Credenziali del dispositivo</string>
|
<string name="device_credential">Credenziali del dispositivo</string>
|
||||||
<string name="credential_before_click_advanced_unlock_button">Inserisci la password, poi clicca questo pulsante.</string>
|
<string name="credential_before_click_advanced_unlock_button">Inserisci la password, poi clicca questo pulsante.</string>
|
||||||
|
@ -558,8 +558,8 @@
|
||||||
<string name="error_word_reserved">Questa parola è riservata e non può essere usata.</string>
|
<string name="error_word_reserved">Questa parola è riservata e non può essere usata.</string>
|
||||||
<string name="error_move_group_here">Non puoi spostare un gruppo qui.</string>
|
<string name="error_move_group_here">Non puoi spostare un gruppo qui.</string>
|
||||||
<string name="templates">Modelli</string>
|
<string name="templates">Modelli</string>
|
||||||
<string name="templates_group_uuid_title">Gruppo di modelli</string>
|
<string name="templates_group_uuid_title">Gruppo dei modelli</string>
|
||||||
<string name="templates_group_enable_summary">Usa modelli dinamici per riempire i campi di una voce</string>
|
<string name="templates_group_enable_summary">Usa i modelli dinamici per riempire i campi di una voce</string>
|
||||||
<string name="templates_group_enable_title">Utilizzo dei modelli</string>
|
<string name="templates_group_enable_title">Utilizzo dei modelli</string>
|
||||||
<string name="version">Versione</string>
|
<string name="version">Versione</string>
|
||||||
<string name="template">Modello</string>
|
<string name="template">Modello</string>
|
||||||
|
@ -617,10 +617,34 @@
|
||||||
<string name="navigation_drawer_close">Chiusura del cassetto di navigazione</string>
|
<string name="navigation_drawer_close">Chiusura del cassetto di navigazione</string>
|
||||||
<string name="searchable">Ricercabile</string>
|
<string name="searchable">Ricercabile</string>
|
||||||
<string name="content_description_nav_header">Intestazione di navigazione</string>
|
<string name="content_description_nav_header">Intestazione di navigazione</string>
|
||||||
<string name="inherited">Ereditato</string>
|
<string name="inherited">Eredita</string>
|
||||||
<string name="search_filters">Filtri di ricerca</string>
|
<string name="search_filters">Filtri di ricerca</string>
|
||||||
<string name="regex">Espressione regolare</string>
|
<string name="regex">Espressione regolare</string>
|
||||||
<string name="menu_merge_from">Unisci da …</string>
|
<string name="menu_merge_from">Unisci da …</string>
|
||||||
<string name="menu_save_copy_to">Salva una copia in …</string>
|
<string name="menu_save_copy_to">Salva una copia in …</string>
|
||||||
<string name="case_sensitive">Distinzione tra maiuscole e minuscole</string>
|
<string name="case_sensitive">Distinzione tra maiuscole e minuscole</string>
|
||||||
|
<string name="content_description_passphrase_word_count">Numero di parole della password</string>
|
||||||
|
<string name="expired">Scaduta</string>
|
||||||
|
<string name="passphrase">Frase di accesso</string>
|
||||||
|
<string name="colorize_password_title">Colora le password</string>
|
||||||
|
<string name="colorize_password_summary">Colora i tipi di carattere della password</string>
|
||||||
|
<string name="warning_database_already_opened">Un database è già aperto, chiuderlo prima di aprirne un altro.</string>
|
||||||
|
<string name="auto_type_sequence">Sequenza di autodigitazione</string>
|
||||||
|
<string name="advanced_unlock_keystore_warning">Questa funzione memorizzerà le informazioni cifrate di accesso nel KeyStore protetto del dispositivo.
|
||||||
|
\nA seconda di come è stata implementata l\'API nativa del sistema operativo, potrebbe non essere pienanente funzionante.
|
||||||
|
\nVerificare la compatibilità e la sicurezza del KeyStore consultando sia il costruttore del dispositivo che il creatore della ROM in uso nel dispositivo stesso.</string>
|
||||||
|
<string name="keyboard_previous_search_title">Schermata di ricerca</string>
|
||||||
|
<string name="keyboard_previous_search_summary">Ritornare automaticamente alla tastiera precedente quando ci si trova sulla schermata di ricerca</string>
|
||||||
|
<string name="entropy_high">Entropia: Alta</string>
|
||||||
|
<string name="entropy_calculate">Entropia: Calcolo in corso…</string>
|
||||||
|
<string name="at_least_one_char">Almeno un carattere di ciascuno</string>
|
||||||
|
<string name="exclude_ambiguous_chars">Escludere i caratteri ambigui</string>
|
||||||
|
<string name="consider_chars_filter">Includi i caratteri</string>
|
||||||
|
<string name="word_separator">Separatore</string>
|
||||||
|
<string name="ignore_chars_filter">Ignorare i caratteri</string>
|
||||||
|
<string name="lower_case">minuscolo</string>
|
||||||
|
<string name="upper_case">MAIUSCOLO</string>
|
||||||
|
<string name="title_case">Iniziali maiuscole</string>
|
||||||
|
<string name="character_count">Numero di caratteri: %1$d</string>
|
||||||
|
<string name="entropy">Entropia: %1$s bit</string>
|
||||||
</resources>
|
</resources>
|
|
@ -634,7 +634,7 @@
|
||||||
<string name="navigation_drawer_open">ナビゲーション ドロワーが開いています</string>
|
<string name="navigation_drawer_open">ナビゲーション ドロワーが開いています</string>
|
||||||
<string name="navigation_drawer_close">ナビゲーション ドロワーが閉じています</string>
|
<string name="navigation_drawer_close">ナビゲーション ドロワーが閉じています</string>
|
||||||
<string name="auto_type_sequence">Auto-Type シークエンス</string>
|
<string name="auto_type_sequence">Auto-Type シークエンス</string>
|
||||||
<string name="current_group">現在のグループ</string>
|
<string name="current_group">選択されたグループ</string>
|
||||||
<string name="keyboard_previous_search_summary">検索画面で切り替え前のキーボードに自動的に戻します</string>
|
<string name="keyboard_previous_search_summary">検索画面で切り替え前のキーボードに自動的に戻します</string>
|
||||||
<string name="menu_merge_from">マージ…</string>
|
<string name="menu_merge_from">マージ…</string>
|
||||||
<string name="entropy_calculate">エントロピー:計算中…</string>
|
<string name="entropy_calculate">エントロピー:計算中…</string>
|
||||||
|
|
|
@ -16,8 +16,7 @@
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
|
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
|
||||||
-->
|
--><resources>
|
||||||
<resources>
|
|
||||||
<string name="feedback">피드백</string>
|
<string name="feedback">피드백</string>
|
||||||
<string name="homepage">홈페이지</string>
|
<string name="homepage">홈페이지</string>
|
||||||
<string name="about_description">KeePass 암호 관리자의 Android 구현본</string>
|
<string name="about_description">KeePass 암호 관리자의 Android 구현본</string>
|
||||||
|
@ -28,19 +27,19 @@
|
||||||
<string name="encryption">암호화</string>
|
<string name="encryption">암호화</string>
|
||||||
<string name="encryption_algorithm">안호화 방식</string>
|
<string name="encryption_algorithm">안호화 방식</string>
|
||||||
<string name="key_derivation_function">키 파생 기능</string>
|
<string name="key_derivation_function">키 파생 기능</string>
|
||||||
<string name="app_timeout">앱 자동 종료 시간</string>
|
<string name="app_timeout">자동 종료 시간</string>
|
||||||
<string name="app_timeout_summary">앱이 잠기기 전에 비활성화됨</string>
|
<string name="app_timeout_summary">데이터베이스를 잠그기 전 유휴 시간</string>
|
||||||
<string name="application">앱</string>
|
<string name="application">앱</string>
|
||||||
<string name="brackets">브라켓</string>
|
<string name="brackets">브라켓</string>
|
||||||
<string name="extended_ASCII">확장 ASCII</string>
|
<string name="extended_ASCII">확장 ASCII</string>
|
||||||
<string name="file_manager_install_description">OpenIntents File Manager를 설치하여 파일 찾아보기</string>
|
<string name="file_manager_install_description">파일 관리자는 데이터베이스 파일 생성, 열기 및 저장하기 위해 ACTION_CREATE_DOCUMENT 및 ACTION_OPEN_DOCUMENT 인텐트 액션의 허가가 필요합니다.</string>
|
||||||
<string name="allow">허가</string>
|
<string name="allow">허가</string>
|
||||||
<string name="clipboard_cleared">클립보드 비워짐</string>
|
<string name="clipboard_cleared">클립보드 비워짐</string>
|
||||||
<string name="clipboard_error_title">클립보드 오류</string>
|
<string name="clipboard_error_title">클립보드 오류</string>
|
||||||
<string name="clipboard_error">일부 삼성 안드로이드 폰은 앱이 클립보드를 사용하지 못하게 합니다.</string>
|
<string name="clipboard_error">일부 장치는 앱이 클립보드를 사용하지 못하게 할 수 있습니다.</string>
|
||||||
<string name="clipboard_error_clear">클립보드를 비울 수 없음</string>
|
<string name="clipboard_error_clear">클립보드를 비울 수 없음</string>
|
||||||
<string name="clipboard_timeout">클립보드 시간 초과</string>
|
<string name="clipboard_timeout">클립보드 시간 초과</string>
|
||||||
<string name="clipboard_timeout_summary">클립보드 저장이 유지될 시간</string>
|
<string name="clipboard_timeout_summary">클립보드 저장이 유지될 시간 (장치가 지원한다면)</string>
|
||||||
<string name="select_to_copy">%1$s 을(를) 클립보드에 복사하려면 선택하십시오.</string>
|
<string name="select_to_copy">%1$s 을(를) 클립보드에 복사하려면 선택하십시오.</string>
|
||||||
<string name="retrieving_db_key">데이터베이스 키를 검색하는 중…</string>
|
<string name="retrieving_db_key">데이터베이스 키를 검색하는 중…</string>
|
||||||
<string name="database">데이터베이스</string>
|
<string name="database">데이터베이스</string>
|
||||||
|
@ -152,7 +151,7 @@
|
||||||
<string name="content_description_add_group">그룹 추가</string>
|
<string name="content_description_add_group">그룹 추가</string>
|
||||||
<string name="content_description_file_information">파일 정보</string>
|
<string name="content_description_file_information">파일 정보</string>
|
||||||
<string name="content_description_password_checkbox">비밀번호 체크박스</string>
|
<string name="content_description_password_checkbox">비밀번호 체크박스</string>
|
||||||
<string name="content_description_keyfile_checkbox">내용_설명_키파일_체크박스</string>
|
<string name="content_description_keyfile_checkbox">키파일 체크박스</string>
|
||||||
<string name="content_description_repeat_toggle_password_visibility">토글 비밀번호 가시성 반복</string>
|
<string name="content_description_repeat_toggle_password_visibility">토글 비밀번호 가시성 반복</string>
|
||||||
<string name="entry_password_generator">비밀번호 생성</string>
|
<string name="entry_password_generator">비밀번호 생성</string>
|
||||||
<string name="content_description_password_length">비밀번호 길이</string>
|
<string name="content_description_password_length">비밀번호 길이</string>
|
||||||
|
@ -160,4 +159,44 @@
|
||||||
<string name="content_description_remove_field">필드 제거</string>
|
<string name="content_description_remove_field">필드 제거</string>
|
||||||
<string name="error_move_entry_here">항목을 여기로 옮길 수 없습니다.</string>
|
<string name="error_move_entry_here">항목을 여기로 옮길 수 없습니다.</string>
|
||||||
<string name="error_copy_entry_here">항목을 여기로 복사할 수 없습니다.</string>
|
<string name="error_copy_entry_here">항목을 여기로 복사할 수 없습니다.</string>
|
||||||
|
<string name="content_description_credentials_information">인증서</string>
|
||||||
|
<string name="master_key">마스터키</string>
|
||||||
|
<string name="contribution">기여</string>
|
||||||
|
<string name="entry_add_attachment">첨부파일 추가</string>
|
||||||
|
<string name="content_description_passphrase_word_count">비밀구절 단어 수</string>
|
||||||
|
<string name="expired">만료됨</string>
|
||||||
|
<string name="case_sensitive">대소문자 구분</string>
|
||||||
|
<string name="error_create_database">데이터베이스 파일을 생성할 수 없습니다.</string>
|
||||||
|
<string name="id_card">신분증</string>
|
||||||
|
<string name="place_of_issue">발행지</string>
|
||||||
|
<string name="cryptocurrency">가상 화폐 지갑</string>
|
||||||
|
<string name="error_word_reserved">이 단어는 예약되어 사용할 수 없습니다.</string>
|
||||||
|
<string name="error_invalid_OTP">OTP 비밀키가 유효하지 않습니다.</string>
|
||||||
|
<string name="error_disallow_no_credentials">하나 이상의 자격 증명을 설정해야 합니다.</string>
|
||||||
|
<string name="error_save_database">데이터베이스를 저장할 수 없습니다.</string>
|
||||||
|
<string name="error_otp_secret_key">비밀키는 Base32 포맷이어야 합니다.</string>
|
||||||
|
<string name="error_create_database_file">이 비밀번호와 키파일로 데이터베이스를 생성할 수 없습니다.</string>
|
||||||
|
<string name="content_description_database_color">데이터베이스 색상</string>
|
||||||
|
<string name="content_description_entry_foreground_color">항목 전면 색상</string>
|
||||||
|
<string name="content_description_entry_background_color">항목 배경 색상</string>
|
||||||
|
<string name="discard_changes">변경사항을 취소하시겠습니까\?</string>
|
||||||
|
<string name="debit_credit_card">직불 / 신용 카드</string>
|
||||||
|
<string name="otp_algorithm">알고리즘</string>
|
||||||
|
<string name="date_of_issue">발행일자</string>
|
||||||
|
<string name="error_move_group_here">그룹을 여기로 옮길 수 없습니다.</string>
|
||||||
|
<string name="error_copy_group_here">그룹을 여기로 복사할 수 없습니다.</string>
|
||||||
|
<string name="content_description_otp_information">일회용 암호 정보</string>
|
||||||
|
<string name="security">보안</string>
|
||||||
|
<string name="content_description_entry_icon">항목 아이콘</string>
|
||||||
|
<string name="content_description_add_item">아이템 추가</string>
|
||||||
|
<string name="contact">문의</string>
|
||||||
|
<string name="content_description_update_from_list">갱신</string>
|
||||||
|
<string name="validate">검증</string>
|
||||||
|
<string name="html_about_contribution"><strong>우리의 자유를 지키고</strong>, <strong>버그를 고치고</strong>, <strong>기능을 추가</strong>하고, <strong>언제나 활성화</strong>되기 위해 우리는 당신의 <strong>기여</strong>를 믿습니다.</string>
|
||||||
|
<string name="entry_setup_otp">일회용 비밀번호 설정</string>
|
||||||
|
<string name="otp_type">OTP 유형</string>
|
||||||
|
<string name="otp_period">주기 (초)</string>
|
||||||
|
<string name="search_filters">검색 필터</string>
|
||||||
|
<string name="regex">정규 표현식</string>
|
||||||
|
<string name="error_label_exists">이미 존재하는 라벨입니다.</string>
|
||||||
</resources>
|
</resources>
|
|
@ -50,7 +50,7 @@
|
||||||
<string name="entry_notes">Заметки</string>
|
<string name="entry_notes">Заметки</string>
|
||||||
<string name="entry_confpassword">Подтверждение пароля</string>
|
<string name="entry_confpassword">Подтверждение пароля</string>
|
||||||
<string name="entry_created">Создано</string>
|
<string name="entry_created">Создано</string>
|
||||||
<string name="entry_expires">Срок действия</string>
|
<string name="entry_expires">Окончание</string>
|
||||||
<string name="entry_keyfile">Файл ключа</string>
|
<string name="entry_keyfile">Файл ключа</string>
|
||||||
<string name="entry_modified">Изменено</string>
|
<string name="entry_modified">Изменено</string>
|
||||||
<string name="entry_not_found">Данные записи не найдены.</string>
|
<string name="entry_not_found">Данные записи не найдены.</string>
|
||||||
|
|
10
build.gradle
10
build.gradle
|
@ -1,16 +1,16 @@
|
||||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
buildscript {
|
buildscript {
|
||||||
ext.kotlin_version = '1.6.21'
|
ext.kotlin_version = '1.7.0'
|
||||||
ext.android_core_version = '1.7.0'
|
ext.android_core_version = '1.8.0'
|
||||||
ext.android_appcompat_version = '1.4.1'
|
ext.android_appcompat_version = '1.4.2'
|
||||||
ext.android_material_version = '1.6.0'
|
ext.android_material_version = '1.6.1'
|
||||||
ext.android_test_version = '1.4.0'
|
ext.android_test_version = '1.4.0'
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
google()
|
google()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:7.2.0'
|
classpath 'com.android.tools.build:gradle:7.2.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,14 +5,12 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 31
|
compileSdkVersion 32
|
||||||
buildToolsVersion "31.0.0"
|
buildToolsVersion "32.0.0"
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 31
|
targetSdkVersion 32
|
||||||
versionCode 1
|
|
||||||
versionName "1.0"
|
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
|
@ -1 +1,6 @@
|
||||||
|
* Fix custom data in group (fix KeeShare) #1335
|
||||||
|
* Fix device credential unlocking #1344
|
||||||
|
* New clipboard manager #1343
|
||||||
* Keep screen on by default when viewing an entry
|
* Keep screen on by default when viewing an entry
|
||||||
|
* Change the order of the search filters
|
||||||
|
* Fix searchable selection
|
||||||
|
|
|
@ -1 +1,6 @@
|
||||||
* Garder l'écran allumé par défaut lors d'une visualisation d'entrée
|
* Correction des données customisées dans les groupes (correction de KeeShare) #1335
|
||||||
|
* Correction du déblocage par identifiants de l'appareil #1344
|
||||||
|
* Nouveau gestionnaire de presse-papier #1343
|
||||||
|
* Garde l'écran allumé par défaut lors d'une visualisation d'entrée
|
||||||
|
* Changement d'ordre des filtres de recherche
|
||||||
|
* Correction de la selection cherchable
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 31
|
compileSdkVersion 32
|
||||||
buildToolsVersion '31.0.0'
|
buildToolsVersion '32.0.0'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 31
|
targetSdkVersion 32
|
||||||
}
|
}
|
||||||
|
|
||||||
resourcePrefix 'classic_'
|
resourcePrefix 'classic_'
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 31
|
compileSdkVersion 32
|
||||||
buildToolsVersion '31.0.0'
|
buildToolsVersion '32.0.0'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
minSdkVersion 14
|
minSdkVersion 14
|
||||||
targetSdkVersion 31
|
targetSdkVersion 32
|
||||||
}
|
}
|
||||||
|
|
||||||
resourcePrefix 'material_'
|
resourcePrefix 'material_'
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue