Compare commits

...

62 Commits

Author SHA1 Message Date
J-Jamet
798c95d8a8 Merge branch 'release/4.0.2' 2023-09-11 21:55:48 +02:00
J-Jamet
ef77c2acfb fix: Add buggy method comment #1638 2023-09-11 21:38:12 +02:00
J-Jamet
11a98267a2 fix: Upgrade to 4.0.2 2023-09-11 21:17:18 +02:00
J-Jamet
b2aa1155d0 fix: Autofill authentication 2023-09-11 21:13:26 +02:00
J-Jamet
5d6aac2d1b Merge tag '4.0.1' into develop
4.0.1
2023-09-10 11:07:13 +02:00
J-Jamet
c6723ecd4e Merge branch 'release/4.0.1' 2023-09-10 11:07:06 +02:00
J-Jamet
838c8f48d3 fix: Translation for themes #1631 2023-09-10 10:53:43 +02:00
J-Jamet
65229fae1f fix: Lock button in Autofill settings and Magikeyboard settings #1630 2023-09-10 10:26:01 +02:00
J-Jamet
f25ea89160 fix: Add CHANGELOG link 2023-09-10 09:57:56 +02:00
J-Jamet
18401d5d1e fix: Upgrade to 4.0.1 2023-09-10 09:50:26 +02:00
J-Jamet
1f2cf08108 fix: back lock 2023-09-10 09:43:08 +02:00
J-Jamet
74e86badba Merge tag '4.0.0' into develop
4.0.0
2023-09-09 21:34:37 +02:00
J-Jamet
31444a823e Merge branch 'release/4.0.0' 2023-09-09 21:34:28 +02:00
J-Jamet
068933f0fb fix: fastlane changelog version 2023-09-09 21:30:51 +02:00
J-Jamet
f496711280 Replace art screen 2023-09-09 21:24:40 +02:00
J-Jamet
657d2420d6 Revert "fix: Small bug"
This reverts commit 2467721265.
2023-09-09 21:21:04 +02:00
J-Jamet
2467721265 fix: Small bug 2023-09-09 21:11:39 +02:00
J-Jamet
d37fbb9992 fix: Change screenshot 2023-09-09 21:06:33 +02:00
J-Jamet
19b8b54dae fix: Strong tag 2023-09-08 21:22:55 +02:00
J-Jamet
84328caf3c fix: Add browsers to compatibility package 2023-09-08 21:22:36 +02:00
J-Jamet
a0bdfc973a Merge branch 'translations' into develop 2023-09-08 21:16:04 +02:00
J-Jamet
1f91854490 Merge branch 'develop' of https://hosted.weblate.org/projects/keepass-dx/strings into translations 2023-09-08 21:15:42 +02:00
J-Jamet
1380325b66 Upgrade to 4.0.0 2023-09-08 21:14:21 +02:00
J-Jamet
d244eef62e feat: Add recursive number of entries #874 #1327 2023-09-08 20:32:19 +02:00
Hosted Weblate
8fb8d9ed37 Merge branch 'origin/develop' into Weblate. 2023-09-08 19:35:10 +02:00
J-Jamet
8ce63cb5c5 Merge branch 'JohnVeness-master' into develop 2023-09-08 19:31:49 +02:00
J-Jamet
9ecf2ae942 Merge branch 'master' of github.com:JohnVeness/KeePassDX into JohnVeness-master 2023-09-08 19:31:07 +02:00
J-Jamet
544f7003f6 fix: Remove Lock in Autofill 2023-09-04 20:45:32 +02:00
J-Jamet
6d633c9986 fix: Autofill implementation 2023-09-04 19:16:16 +02:00
J-Jamet
1e77a42c93 fix: Remove Autofill deprecation 2023-09-03 18:41:32 +02:00
J-Jamet
d1f2641e40 fix: On back pressed deprecation 2023-09-03 12:29:45 +02:00
jonnysemon
4b8ae154cc Translated using Weblate (Arabic)
Currently translated at 97.6% (632 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ar/
2023-08-29 18:57:00 +02:00
J-Jamet
0c1aacdf83 fix: Navigation bar margin 2023-08-28 21:52:51 +02:00
J-Jamet
5f34df3549 fix: Ellipsis 2023-08-28 17:20:09 +02:00
Alexandru
f2e6aa1abb Translated using Weblate (Romanian)
Currently translated at 72.9% (472 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ro/
2023-08-28 10:53:32 +02:00
John Veness
866731df81 Correct "im/exportation" wording 2023-08-20 19:39:09 +01:00
John Veness
5d931e09d5 Changed "app properties" wording to "app settings" 2023-08-20 19:08:51 +01:00
Kunzisoft
fe17c21c01 Translated using Weblate (French)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/fr/
2023-08-20 11:52:19 +02:00
J-Jamet
085941019e fix: Small bugs 2023-08-19 19:58:26 +02:00
J-Jamet
24b3758545 feat: Entry Edit Activity Fit Window 2023-08-19 19:16:55 +02:00
J-Jamet
9083f99325 feat: Entry Activity Fit Window 2023-08-19 18:15:21 +02:00
J-Jamet
2189be9267 fix: Screenshot mode 2023-08-19 17:47:49 +02:00
J-Jamet
43218eede1 feat: Group screen as fit window 2023-08-19 17:00:26 +02:00
J-Jamet
d1a176d27d fix: Small UI 2023-08-19 12:25:38 +02:00
J-Jamet
cf51af91bf feat: Logo color 2023-08-19 12:20:41 +02:00
Darin Avdeyeva
02ff1188b2 Translated using Weblate (Russian)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2023-08-18 15:54:40 +02:00
jonnysemon
0fac9b6864 Translated using Weblate (Arabic)
Currently translated at 97.5% (631 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ar/
2023-08-17 01:55:03 +02:00
VfBFan
b550830c30 Translated using Weblate (German)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2023-08-15 11:47:13 +02:00
gallegonovato
6f485dd298 Translated using Weblate (Spanish)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/es/
2023-08-12 10:53:07 +02:00
solokot
b0dfde62c7 Translated using Weblate (Russian)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2023-08-09 17:50:55 +02:00
109247019824
686dae0af6 Translated using Weblate (Bulgarian)
Currently translated at 2.9% (19 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/bg/
2023-08-08 17:21:18 +02:00
Darin Avdeyeva
ee3eabe8c8 Translated using Weblate (Russian)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2023-08-08 17:21:18 +02:00
C. Rüdinger
521c8aa6a9 Translated using Weblate (German)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2023-08-08 17:21:17 +02:00
solokot
66207d599f Translated using Weblate (Russian)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ru/
2023-08-08 08:51:37 +02:00
Masowick
e0029e0c3f Translated using Weblate (German)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2023-08-08 08:51:37 +02:00
C. Rüdinger
3683b64721 Translated using Weblate (German)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/de/
2023-08-08 08:51:37 +02:00
J-Jamet
8d4a0971f9 Merge tag '4.0.0beta02' into develop
4.0.0beta02
2023-08-07 16:00:38 +02:00
Hosted Weblate
d212fa180b Merge branch 'origin/develop' into Weblate. 2023-08-06 23:00:27 +02:00
Salif Mehmed
bc4ea2ec2a Translated using Weblate (Bulgarian)
Currently translated at 2.7% (18 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/bg/
2023-08-06 23:00:27 +02:00
Linerly
5d8c80fc1e Translated using Weblate (Indonesian)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/id/
2023-08-06 23:00:27 +02:00
Alexandru
a02714ff6e Translated using Weblate (Romanian)
Currently translated at 63.5% (411 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/ro/
2023-08-06 23:00:26 +02:00
Fjuro
4bd952e223 Translated using Weblate (Czech)
Currently translated at 100.0% (647 of 647 strings)

Translation: KeePassDX/Strings
Translate-URL: https://hosted.weblate.org/projects/keepass-dx/strings/cs/
2023-08-06 23:00:25 +02:00
70 changed files with 1447 additions and 735 deletions

View File

@@ -1,11 +1,19 @@
KeePassDX(4.0.2)
* Fix Autofill with API 33
KeePassDX(4.0.1)
* Fix back lock #1635 #1629 #1634
* Fix lock button in settings #1630
* Improve theme translation #1631
KeePassDX(4.0.0)
* New UX/UI with Material 3 #1183 #1529 #1428 #1441 #1607
* Material You theme (follow system colors) #1469
* Refactoring inner code #1371
* Migration to API 33
# Cut, copy and delete from search #891 #1308 #1263
* Fix behaviors #1351
* Fix bugs #1589 #1584 #1545 #1563 #1371
* Cut, copy and delete from search #891 #1308 #1263
* Fix behaviors #1351 #874 #1327
* Fix bugs #1589 #1584 #1545 #1563 #1371 #1609
KeePassDX(3.5.1)
* Fix action dialog with YubiKey challenge-response #1506

View File

@@ -105,7 +105,7 @@ GEM
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-versioning_android (0.1.0)
fastlane-plugin-versioning_android (0.1.1)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.46.0)
google-apis-core (>= 0.11.0, < 2.a)

View File

@@ -12,8 +12,8 @@ android {
applicationId "com.kunzisoft.keepass"
minSdkVersion 15
targetSdkVersion 33
versionCode = 122
versionName = "4.0.0_beta02"
versionCode = 125
versionName = "4.0.2"
multiDexEnabled true
testApplicationId = "com.kunzisoft.keepass.tests"

View File

@@ -7,10 +7,6 @@
<group
android:translateX="-12"
android:translateY="-12">
<path
android:fillColor="#ffa726"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
<path
android:fillColor="#ffffff"
android:strokeWidth="1.99999297"

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="84"
android:viewportHeight="84">
<group
android:translateX="-12"
android:translateY="-12">
<path
android:fillColor="#ffffff"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
</group>
</vector>

View File

@@ -7,10 +7,6 @@
<group
android:translateX="-12"
android:translateY="-12">
<path
android:fillColor="#ffa726"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
<path
android:fillColor="#ffffff"
android:strokeWidth="1.99999297"

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="84"
android:viewportHeight="84">
<group
android:translateX="-12"
android:translateY="-12">
<path
android:fillColor="#ffffff"
android:strokeWidth="1.99999297"
android:pathData="M36,36 L36,40.2422 L67.7578,72 L72,72 L72,67.7578 L40.2422,36 Z" />
</group>
</vector>

View File

@@ -145,7 +145,7 @@
android:configChanges="keyboardHidden" />
<activity
android:name="com.kunzisoft.keepass.activities.EntryEditActivity"
android:windowSoftInputMode="adjustResize" />
android:windowSoftInputMode="adjustPan" />
<!-- About and Settings -->
<activity
android:name="com.kunzisoft.keepass.activities.AboutActivity"

View File

@@ -23,6 +23,7 @@ import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
@@ -30,15 +31,20 @@ import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.ProgressBar
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.viewModels
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.graphics.BlendModeColorFilterCompat
import androidx.core.graphics.BlendModeCompat
import androidx.core.graphics.ColorUtils
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.appbar.AppBarLayout
@@ -69,15 +75,19 @@ import com.kunzisoft.keepass.tasks.AttachmentFileBinderManager
import com.kunzisoft.keepass.timeout.TimeoutHelper
import com.kunzisoft.keepass.utils.UuidUtil
import com.kunzisoft.keepass.utils.getParcelableExtraCompat
import com.kunzisoft.keepass.view.WindowInsetPosition
import com.kunzisoft.keepass.view.applyWindowInsets
import com.kunzisoft.keepass.view.changeControlColor
import com.kunzisoft.keepass.view.changeTitleColor
import com.kunzisoft.keepass.view.hideByFading
import com.kunzisoft.keepass.view.setTransparentNavigationBar
import com.kunzisoft.keepass.view.showActionErrorIfNeeded
import com.kunzisoft.keepass.viewmodels.EntryViewModel
import java.util.UUID
class EntryActivity : DatabaseLockActivity() {
private var footer: ViewGroup? = null
private var coordinatorLayout: CoordinatorLayout? = null
private var collapsingToolbarLayout: CollapsingToolbarLayout? = null
private var appBarLayout: AppBarLayout? = null
@@ -128,6 +138,7 @@ class EntryActivity : DatabaseLockActivity() {
supportActionBar?.setDisplayShowHomeEnabled(true)
// Get views
footer = findViewById(R.id.activity_entry_footer)
coordinatorLayout = findViewById(R.id.toolbar_coordinator)
collapsingToolbarLayout = findViewById(R.id.toolbar_layout)
appBarLayout = findViewById(R.id.app_bar)
@@ -139,6 +150,14 @@ class EntryActivity : DatabaseLockActivity() {
lockView = findViewById(R.id.lock_button)
loadingView = findViewById(R.id.loading)
// To apply fit window with transparency
setTransparentNavigationBar {
// To fix margin with API 27
ViewCompat.setOnApplyWindowInsetsListener(collapsingToolbarLayout!!, null)
coordinatorLayout?.applyWindowInsets(WindowInsetPosition.TOP)
footer?.applyWindowInsets(WindowInsetPosition.BOTTOM)
}
// Empty title
collapsingToolbarLayout?.title = " "
toolbar?.title = " "

View File

@@ -30,6 +30,7 @@ import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.AdapterView
import android.widget.ProgressBar
import android.widget.Spinner
@@ -89,8 +90,11 @@ import com.kunzisoft.keepass.timeout.TimeoutHelper
import com.kunzisoft.keepass.utils.UriUtil.getDocumentFile
import com.kunzisoft.keepass.utils.getParcelableExtraCompat
import com.kunzisoft.keepass.view.ToolbarAction
import com.kunzisoft.keepass.view.WindowInsetPosition
import com.kunzisoft.keepass.view.applyWindowInsets
import com.kunzisoft.keepass.view.asError
import com.kunzisoft.keepass.view.hideByFading
import com.kunzisoft.keepass.view.setTransparentNavigationBar
import com.kunzisoft.keepass.view.showActionErrorIfNeeded
import com.kunzisoft.keepass.view.updateLockPaddingLeft
import com.kunzisoft.keepass.viewmodels.ColorPickerViewModel
@@ -104,6 +108,8 @@ class EntryEditActivity : DatabaseLockActivity(),
ReplaceFileDialogFragment.ActionChooseListener {
// Views
private var footer: ViewGroup? = null
private var container: ViewGroup? = null
private var coordinatorLayout: CoordinatorLayout? = null
private var scrollView: NestedScrollView? = null
private var templateSelectorSpinner: Spinner? = null
@@ -156,10 +162,8 @@ class EntryEditActivity : DatabaseLockActivity(),
// Bottom Bar
entryEditAddToolBar = findViewById(R.id.entry_edit_bottom_bar)
setSupportActionBar(entryEditAddToolBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
footer = findViewById(R.id.activity_entry_edit_footer)
container = findViewById(R.id.activity_entry_edit_container)
coordinatorLayout = findViewById(R.id.entry_edit_coordinator_layout)
scrollView = findViewById(R.id.entry_edit_scroll)
scrollView?.scrollBarStyle = View.SCROLLBARS_INSIDE_INSET
@@ -168,6 +172,17 @@ class EntryEditActivity : DatabaseLockActivity(),
validateButton = findViewById(R.id.entry_edit_validate)
loadingView = findViewById(R.id.loading)
setSupportActionBar(entryEditAddToolBar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setDisplayShowTitleEnabled(false)
// To apply fit window with transparency
setTransparentNavigationBar(applyToStatusBar = true) {
container?.applyWindowInsets(WindowInsetPosition.TOP)
footer?.applyWindowInsets(WindowInsetPosition.BOTTOM)
}
stopService(Intent(this, ClipboardEntryNotificationService::class.java))
stopService(Intent(this, KeyboardEntryNotificationService::class.java))
@@ -691,16 +706,16 @@ class EntryEditActivity : DatabaseLockActivity(),
return true
}
android.R.id.home -> {
onBackPressed()
onDatabaseBackPressed()
}
}
return super.onOptionsItemSelected(item)
}
override fun onBackPressed() {
override fun onDatabaseBackPressed() {
onApprovedBackPressed {
super@EntryEditActivity.onBackPressed()
super@EntryEditActivity.onDatabaseBackPressed()
}
}

View File

@@ -35,6 +35,7 @@ import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
@@ -105,7 +106,10 @@ import com.kunzisoft.keepass.view.AddNodeButtonView
import com.kunzisoft.keepass.view.NavigationDatabaseView
import com.kunzisoft.keepass.view.SearchFiltersView
import com.kunzisoft.keepass.view.ToolbarAction
import com.kunzisoft.keepass.view.WindowInsetPosition
import com.kunzisoft.keepass.view.applyWindowInsets
import com.kunzisoft.keepass.view.hideByFading
import com.kunzisoft.keepass.view.setTransparentNavigationBar
import com.kunzisoft.keepass.view.showActionErrorIfNeeded
import com.kunzisoft.keepass.view.updateLockPaddingLeft
import com.kunzisoft.keepass.viewmodels.GroupEditViewModel
@@ -121,6 +125,8 @@ class GroupActivity : DatabaseLockActivity(),
MainCredentialDialogFragment.AskMainCredentialDialogListener {
// Views
private var header: ViewGroup? = null
private var footer: ViewGroup? = null
private var drawerLayout: DrawerLayout? = null
private var databaseNavView: NavigationDatabaseView? = null
private var coordinatorLayout: CoordinatorLayout? = null
@@ -267,6 +273,8 @@ class GroupActivity : DatabaseLockActivity(),
setContentView(layoutInflater.inflate(R.layout.activity_group, null))
// Initialize views
header = findViewById(R.id.activity_group_header)
footer = findViewById(R.id.activity_group_footer)
drawerLayout = findViewById(R.id.drawer_layout)
databaseNavView = findViewById(R.id.database_nav_view)
coordinatorLayout = findViewById(R.id.group_coordinator)
@@ -283,6 +291,13 @@ class GroupActivity : DatabaseLockActivity(),
lockView = findViewById(R.id.lock_button)
loadingView = findViewById(R.id.loading)
// To apply fit window with transparency
setTransparentNavigationBar {
header?.applyWindowInsets(WindowInsetPosition.TOP)
coordinatorLayout?.applyWindowInsets(WindowInsetPosition.LEGIT_TOP)
footer?.applyWindowInsets(WindowInsetPosition.BOTTOM)
}
lockView?.setOnClickListener {
lockAndExit()
}
@@ -1339,7 +1354,7 @@ class GroupActivity : DatabaseLockActivity(),
}
}
override fun onBackPressed() {
override fun onDatabaseBackPressed() {
if (mGroupFragment?.nodeActionSelectionMode == true) {
finishNodeAction()
} else {

View File

@@ -239,7 +239,7 @@ class IconPickerActivity : DatabaseLockActivity() {
if (mCustomIconsSelectionMode) {
iconPickerViewModel.deselectAllCustomIcons()
} else {
onBackPressed()
onDatabaseBackPressed()
}
}
R.id.menu_edit -> {
@@ -329,9 +329,9 @@ class IconPickerActivity : DatabaseLockActivity() {
})
}
override fun onBackPressed() {
override fun onDatabaseBackPressed() {
setResult()
super.onBackPressed()
super.onDatabaseBackPressed()
}
companion object {

View File

@@ -96,7 +96,7 @@ class KeyGeneratorActivity : DatabaseLockActivity() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
onBackPressed()
onDatabaseBackPressed()
}
R.id.menu_generate -> {
keyGeneratorViewModel.requireKeyGeneration()
@@ -106,9 +106,9 @@ class KeyGeneratorActivity : DatabaseLockActivity() {
return super.onOptionsItemSelected(item)
}
override fun onBackPressed() {
override fun onDatabaseBackPressed() {
setResult(Activity.RESULT_CANCELED, Intent())
super.onBackPressed()
super.onDatabaseBackPressed()
}
companion object {

View File

@@ -463,14 +463,14 @@ abstract class DatabaseLockActivity : DatabaseModeActivity(),
mDatabase?.loaded ?: false)
}
override fun onBackPressed() {
override fun onDatabaseBackPressed() {
if (mTimeoutEnable) {
TimeoutHelper.checkTimeAndLockIfTimeoutOrResetTimeout(this,
mDatabase?.loaded == true) {
super.onBackPressed()
super.onDatabaseBackPressed()
}
} else {
super.onBackPressed()
super.onDatabaseBackPressed()
}
}

View File

@@ -3,6 +3,7 @@ package com.kunzisoft.keepass.activities.legacy
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.helpers.EntrySelectionHelper
import com.kunzisoft.keepass.activities.helpers.SpecialMode
@@ -22,18 +23,20 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
private var mToolbarSpecial: ToolbarSpecial? = null
override fun onBackPressed() {
open fun onDatabaseBackPressed() {
if (mSpecialMode != SpecialMode.DEFAULT)
onCancelSpecialMode()
else
super.onBackPressed()
onRegularBackPressed()
}
/**
* To call the regular onBackPressed() method in special mode
*/
protected fun onRegularBackPressed() {
super.onBackPressed()
// Do not call onBackPressedDispatcher.onBackPressed() to avoid loop
// Calling onBackPressed() is now deprecated, directly finish the activity
finish()
}
/**
@@ -72,7 +75,7 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
open fun onCancelSpecialMode() {
if (isIntentSender()) {
// To get the app caller, only for IntentSender
super.onBackPressed()
onRegularBackPressed()
} else {
EntrySelectionHelper.removeModesFromIntent(intent)
EntrySelectionHelper.removeInfoFromIntent(intent)
@@ -85,7 +88,7 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
protected fun backToTheAppCaller() {
if (isIntentSender()) {
// To get the app caller, only for IntentSender
super.onBackPressed()
onRegularBackPressed()
} else {
backToTheMainAppAndFinish()
}
@@ -100,6 +103,12 @@ abstract class DatabaseModeActivity : DatabaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
onDatabaseBackPressed()
}
})
mSpecialMode = EntrySelectionHelper.retrieveSpecialModeFromIntent(intent)
mTypeMode = EntrySelectionHelper.retrieveTypeModeFromIntent(intent)
}

View File

@@ -117,7 +117,7 @@ class BreadcrumbAdapter(val context: Context)
PreferencesUtil.showExpiredEntries(context)
)
)
text = group.numberOfChildEntries.toString()
text = group.recursiveNumberOfChildEntries.toString()
visibility = View.VISIBLE
} else {
visibility = View.GONE

View File

@@ -197,6 +197,7 @@ class NodesAdapter (
&& oldItem.containsAttachment() == newItem.containsAttachment()
} else if (oldItem is Group && newItem is Group) {
typeContentTheSame = oldItem.numberOfChildEntries == newItem.numberOfChildEntries
&& oldItem.recursiveNumberOfChildEntries == newItem.recursiveNumberOfChildEntries
&& oldItem.notes == newItem.notes
}
return typeContentTheSame
@@ -472,7 +473,7 @@ class NodesAdapter (
if (mShowNumberEntries) {
holder.numberChildren?.apply {
text = (subNode as Group)
.numberOfChildEntries
.recursiveNumberOfChildEntries
.toString()
setTextSize(mTextSizeUnit, mNumberChildrenTextDefaultDimension, mPrefSizeMultiplier)
visibility = View.VISIBLE

View File

@@ -1,7 +1,6 @@
package com.kunzisoft.keepass.autofill
import android.app.assist.AssistStructure
import android.view.inputmethod.InlineSuggestionsRequest
data class AutofillComponent(val assistStructure: AssistStructure,
val compatInlineSuggestionsRequest: CompatInlineSuggestionsRequest?)

View File

@@ -29,9 +29,12 @@ import android.graphics.BlendMode
import android.graphics.drawable.Icon
import android.os.Build
import android.service.autofill.Dataset
import android.service.autofill.Field
import android.service.autofill.FillResponse
import android.service.autofill.InlinePresentation
import android.service.autofill.Presentations
import android.util.Log
import android.view.autofill.AutofillId
import android.view.autofill.AutofillManager
import android.view.autofill.AutofillValue
import android.widget.RemoteViews
@@ -93,36 +96,82 @@ object AutofillHelper {
database: ContextualDatabase,
remoteViewsText: String,
remoteViewsIcon: IconImage? = null): RemoteViews {
val presentation = RemoteViews(context.packageName, R.layout.item_autofill_entry)
presentation.setTextViewText(R.id.autofill_entry_text, remoteViewsText)
val remoteViews = RemoteViews(context.packageName, R.layout.item_autofill_entry)
remoteViews.setTextViewText(R.id.autofill_entry_text, remoteViewsText)
if (remoteViewsIcon != null) {
try {
database.iconDrawableFactory.getBitmapFromIcon(context,
remoteViewsIcon, ContextCompat.getColor(context, R.color.green))?.let { bitmap ->
presentation.setImageViewBitmap(R.id.autofill_entry_icon, bitmap)
remoteViews.setImageViewBitmap(R.id.autofill_entry_icon, bitmap)
}
} catch (e: Exception) {
Log.e(RemoteViews::class.java.name, "Unable to assign icon in remote view", e)
}
}
return presentation
return remoteViews
}
private fun buildDataset(context: Context,
database: ContextualDatabase,
entryInfo: EntryInfo,
struct: StructureParser.Result,
additionalBuild: ((build: Dataset.Builder) -> Unit)? = null): Dataset? {
val title = makeEntryTitle(entryInfo)
val views = newRemoteViews(context, database, title, entryInfo.icon)
val builder = Dataset.Builder(views)
builder.setId(entryInfo.id.toString())
private fun Dataset.Builder.addValueToDatasetBuilder(
id: AutofillId,
autofillValue: AutofillValue?
): Dataset.Builder {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
setField(
id, autofillValue?.let {
Field.Builder()
.setValue(it)
.build()
}
)
} else {
@Suppress("DEPRECATION")
setValue(id, autofillValue)
}
Log.d(TAG, "Set Autofill value $autofillValue for id $id")
return this
}
private fun buildDatasetForEntry(context: Context,
database: ContextualDatabase,
entryInfo: EntryInfo,
struct: StructureParser.Result,
inlinePresentation: InlinePresentation?): Dataset {
val remoteViews: RemoteViews = newRemoteViews(context, database, makeEntryTitle(entryInfo), entryInfo.icon)
val datasetBuilder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Dataset.Builder(Presentations.Builder()
.apply {
inlinePresentation?.let {
setInlinePresentation(inlinePresentation)
}
}
.setDialogPresentation(remoteViews)
.setMenuPresentation(remoteViews)
.build())
} else {
@Suppress("DEPRECATION")
Dataset.Builder(remoteViews).apply {
inlinePresentation?.let {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
setInlinePresentation(inlinePresentation)
}
}
}
}
datasetBuilder.setId(entryInfo.id.toString())
struct.usernameId?.let { usernameId ->
builder.setValue(usernameId, AutofillValue.forText(entryInfo.username))
datasetBuilder.addValueToDatasetBuilder(
usernameId,
AutofillValue.forText(entryInfo.username)
)
}
struct.passwordId?.let { passwordId ->
builder.setValue(passwordId, AutofillValue.forText(entryInfo.password))
datasetBuilder.addValueToDatasetBuilder(
passwordId,
AutofillValue.forText(entryInfo.password)
)
}
if (entryInfo.expires) {
@@ -135,9 +184,15 @@ object AutofillHelper {
struct.creditCardExpirationDateId?.let {
if (struct.isWebView) {
// set date string as defined in https://html.spec.whatwg.org
builder.setValue(it, AutofillValue.forText("$year\u002D$monthString"))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forText("$year\u002D$monthString")
)
} else {
builder.setValue(it, AutofillValue.forDate(entryInfo.expiryTime.date.time))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forDate(entryInfo.expiryTime.date.time)
)
}
}
struct.creditCardExpirationYearId?.let {
@@ -151,34 +206,58 @@ object AutofillHelper {
}
if (yearIndex != -1) {
autofillValue = AutofillValue.forList(yearIndex)
builder.setValue(it, autofillValue)
datasetBuilder.addValueToDatasetBuilder(
it,
autofillValue
)
}
}
if (autofillValue == null) {
builder.setValue(it, AutofillValue.forText(year.toString()))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forText(year.toString())
)
}
}
struct.creditCardExpirationMonthId?.let {
if (struct.isWebView) {
builder.setValue(it, AutofillValue.forText(monthString))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forText(monthString)
)
} else {
if (struct.creditCardExpirationMonthOptions != null) {
// index starts at 0
builder.setValue(it, AutofillValue.forList(month - 1))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forList(month - 1)
)
} else {
builder.setValue(it, AutofillValue.forText(monthString))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forText(monthString)
)
}
}
}
struct.creditCardExpirationDayId?.let {
if (struct.isWebView) {
builder.setValue(it, AutofillValue.forText(dayString))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forText(dayString)
)
} else {
if (struct.creditCardExpirationDayOptions != null) {
builder.setValue(it, AutofillValue.forList(day - 1))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forList(day - 1)
)
} else {
builder.setValue(it, AutofillValue.forText(dayString))
datasetBuilder.addValueToDatasetBuilder(
it,
AutofillValue.forText(dayString)
)
}
}
}
@@ -186,29 +265,32 @@ object AutofillHelper {
for (field in entryInfo.customFields) {
if (field.name == TemplateField.LABEL_HOLDER) {
struct.creditCardHolderId?.let { ccNameId ->
builder.setValue(ccNameId, AutofillValue.forText(field.protectedValue.stringValue))
datasetBuilder.addValueToDatasetBuilder(
ccNameId,
AutofillValue.forText(field.protectedValue.stringValue)
)
}
}
if (field.name == TemplateField.LABEL_NUMBER) {
struct.creditCardNumberId?.let { ccnId ->
builder.setValue(ccnId, AutofillValue.forText(field.protectedValue.stringValue))
datasetBuilder.addValueToDatasetBuilder(
ccnId,
AutofillValue.forText(field.protectedValue.stringValue)
)
}
}
if (field.name == TemplateField.LABEL_CVV) {
struct.cardVerificationValueId?.let { cvvId ->
builder.setValue(cvvId, AutofillValue.forText(field.protectedValue.stringValue))
datasetBuilder.addValueToDatasetBuilder(
cvvId,
AutofillValue.forText(field.protectedValue.stringValue)
)
}
}
}
additionalBuild?.invoke(builder)
return try {
builder.build()
} catch (e: Exception) {
// at least one value must be set
null
}
val dataset = datasetBuilder.build()
Log.d(TAG, "Autofill Dataset $dataset created")
return dataset
}
/**
@@ -228,8 +310,8 @@ object AutofillHelper {
return null
}
@RequiresApi(Build.VERSION_CODES.R)
@SuppressLint("RestrictedApi")
@RequiresApi(Build.VERSION_CODES.R)
private fun buildInlinePresentationForEntry(context: Context,
database: ContextualDatabase,
compatInlineSuggestionsRequest: CompatInlineSuggestionsRequest,
@@ -335,25 +417,33 @@ object AutofillHelper {
}
}
}
}
entriesInfo.forEachIndexed { _, entry ->
if (numberInlineSuggestions > 0
&& Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
&& compatInlineSuggestionsRequest != null) {
responseBuilder.addDataset(buildDataset(context, database, entry, parseResult) { builder ->
buildInlinePresentationForEntry(context, database,
compatInlineSuggestionsRequest, numberInlineSuggestions--, entry
)?.let { inlinePresentation ->
builder.setInlinePresentation(inlinePresentation)
}
})
} else {
responseBuilder.addDataset(buildDataset(context, database, entry, parseResult))
try {
// Build inline presentation for compatible keyboard
var inlinePresentation: InlinePresentation? = null
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
&& numberInlineSuggestions > 0
&& compatInlineSuggestionsRequest != null) {
inlinePresentation = buildInlinePresentationForEntry(
context,
database,
compatInlineSuggestionsRequest,
numberInlineSuggestions--,
entry
)
}
// Create dataset for each entry
responseBuilder.addDataset(
buildDatasetForEntry(context, database, entry, parseResult, inlinePresentation)
)
} catch (e: Exception) {
Log.e(TAG, "Unable to add dataset")
}
}
// Add a new dataset for manual selection
if (PreferencesUtil.isAutofillManualSelectionEnable(context)) {
val searchInfo = SearchInfo().apply {
applicationId = parseResult.applicationId
@@ -365,29 +455,50 @@ object AutofillHelper {
val pendingIntent = AutofillLauncherActivity.getPendingIntentForSelection(context,
searchInfo, compatInlineSuggestionsRequest)
parseResult.allAutofillIds().let { autofillIds ->
autofillIds.forEach { id ->
val builder = Dataset.Builder(manualSelectionView)
var inlinePresentation: InlinePresentation? = null
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
compatInlineSuggestionsRequest?.inlineSuggestionsRequest?.let { inlineSuggestionsRequest ->
val inlinePresentationSpec = inlineSuggestionsRequest.inlinePresentationSpecs[0]
inlinePresentation = buildInlinePresentationForManualSelection(context, inlinePresentationSpec, pendingIntent)
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
compatInlineSuggestionsRequest?.inlineSuggestionsRequest?.let { inlineSuggestionsRequest ->
val inlinePresentationSpec = inlineSuggestionsRequest.inlinePresentationSpecs[0]
val inlinePresentation = buildInlinePresentationForManualSelection(context, inlinePresentationSpec, pendingIntent)
inlinePresentation?.let {
builder.setInlinePresentation(it)
}
val datasetBuilder = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
Dataset.Builder(Presentations.Builder()
.apply {
inlinePresentation?.let {
setInlinePresentation(it)
}
}
.setDialogPresentation(manualSelectionView)
.setMenuPresentation(manualSelectionView)
.build())
} else {
@Suppress("DEPRECATION")
Dataset.Builder(manualSelectionView).apply {
inlinePresentation?.let {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
setInlinePresentation(it)
}
}
builder.setValue(id, null)
builder.setAuthentication(pendingIntent.intentSender)
responseBuilder.addDataset(builder.build())
}
}
parseResult.allAutofillIds().let { autofillIds ->
autofillIds.forEach { id ->
datasetBuilder.addValueToDatasetBuilder(id, null)
datasetBuilder.setAuthentication(pendingIntent.intentSender)
}
val dataset = datasetBuilder.build()
Log.d(TAG, "Autofill Dataset for manual selection $dataset created")
responseBuilder.addDataset(dataset)
}
}
return try {
responseBuilder.build()
} catch (e: Exception) {
Log.e(TAG, "Unable to create Autofill response", e)
null
}
}
@@ -424,7 +535,7 @@ object AutofillHelper {
buildResponse(activity, database, entriesInfo, result, null)
}
val mReplyIntent = Intent()
Log.d(activity.javaClass.name, "Successed Autofill auth.")
Log.d(activity.javaClass.name, "Success Autofill auth.")
mReplyIntent.putExtra(
AutofillManager.EXTRA_AUTHENTICATION_RESULT,
response)
@@ -479,4 +590,6 @@ object AutofillHelper {
EntrySelectionHelper.addSearchInfoInIntent(intent, searchInfo)
activityResultLauncher?.launch(intent)
}
private val TAG = AutofillHelper::class.java.name
}

View File

@@ -45,7 +45,6 @@ import com.kunzisoft.keepass.settings.AutofillSettingsActivity
import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.utils.WebDomain
import org.joda.time.DateTime
import java.util.concurrent.atomic.AtomicBoolean
@RequiresApi(api = Build.VERSION_CODES.O)
@@ -57,7 +56,6 @@ class KeeAutofillService : AutofillService() {
private var webDomainBlocklist: Set<String>? = null
private var askToSaveData: Boolean = false
private var autofillInlineSuggestionsEnabled: Boolean = false
private var mLock = AtomicBoolean()
override fun onCreate() {
super.onCreate()
@@ -90,35 +88,37 @@ class KeeAutofillService : AutofillService() {
cancellationSignal.setOnCancelListener { Log.w(TAG, "Cancel autofill.") }
// Lock
if (!mLock.get()) {
mLock.set(true)
// Check user's settings for authenticating Responses and Datasets.
val latestStructure = request.fillContexts.last().structure
StructureParser(latestStructure).parse()?.let { parseResult ->
if (request.flags and FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST != 0) {
Log.d(TAG, "Autofill requested in compatibility mode")
} else {
Log.d(TAG, "Autofill requested in native mode")
}
// Build search info only if applicationId or webDomain are not blocked
if (autofillAllowedFor(parseResult.applicationId, applicationIdBlocklist)
&& autofillAllowedFor(parseResult.webDomain, webDomainBlocklist)) {
val searchInfo = SearchInfo().apply {
applicationId = parseResult.applicationId
webDomain = parseResult.webDomain
webScheme = parseResult.webScheme
}
WebDomain.getConcreteWebDomain(this, searchInfo.webDomain) { webDomainWithoutSubDomain ->
searchInfo.webDomain = webDomainWithoutSubDomain
val inlineSuggestionsRequest = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
&& autofillInlineSuggestionsEnabled) {
CompatInlineSuggestionsRequest(request)
} else {
null
}
launchSelection(mDatabase,
searchInfo,
parseResult,
inlineSuggestionsRequest,
callback)
// Check user's settings for authenticating Responses and Datasets.
val latestStructure = request.fillContexts.last().structure
StructureParser(latestStructure).parse()?.let { parseResult ->
// Build search info only if applicationId or webDomain are not blocked
if (autofillAllowedFor(parseResult.applicationId, applicationIdBlocklist)
&& autofillAllowedFor(parseResult.webDomain, webDomainBlocklist)) {
val searchInfo = SearchInfo().apply {
applicationId = parseResult.applicationId
webDomain = parseResult.webDomain
webScheme = parseResult.webScheme
}
WebDomain.getConcreteWebDomain(this, searchInfo.webDomain) { webDomainWithoutSubDomain ->
searchInfo.webDomain = webDomainWithoutSubDomain
val inlineSuggestionsRequest = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
&& autofillInlineSuggestionsEnabled) {
CompatInlineSuggestionsRequest(request)
} else {
null
}
launchSelection(mDatabase,
searchInfo,
parseResult,
inlineSuggestionsRequest,
callback)
}
}
}
@@ -157,6 +157,7 @@ class KeeAutofillService : AutofillService() {
searchInfo: SearchInfo,
inlineSuggestionsRequest: CompatInlineSuggestionsRequest?,
callback: FillCallback) {
var success = false
parseResult.allAutofillIds().let { autofillIds ->
if (autofillIds.isNotEmpty()) {
// If the entire Autofill Response is authenticated, AuthActivity is used
@@ -279,17 +280,44 @@ class KeeAutofillService : AutofillService() {
}
}
}
// Build response
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
try {
// Buggy method on some API 33 devices
responseBuilder.setAuthentication(
autofillIds,
intentSender,
Presentations.Builder().apply {
inlinePresentation?.let {
setInlinePresentation(it)
}
setDialogPresentation(remoteViewsUnlock)
}.build()
)
} catch (e: Exception) {
Log.e(TAG, "Unable to use the new setAuthentication method.", e)
@Suppress("DEPRECATION")
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)
}
} else {
@Suppress("DEPRECATION")
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock, inlinePresentation)
}
} else {
@Suppress("DEPRECATION")
responseBuilder.setAuthentication(autofillIds, intentSender, remoteViewsUnlock)
}
success = true
callback.onSuccess(responseBuilder.build())
}
}
if (!success)
callback.onFailure("Unable to get Autofill ids for UI selection")
}
override fun onSaveRequest(request: SaveRequest, callback: SaveCallback) {
var success = false
if (askToSaveData) {
val latestStructure = request.fillContexts.last().structure
StructureParser(latestStructure).parse(true)?.let { parseResult ->
@@ -332,14 +360,16 @@ class KeeAutofillService : AutofillService() {
// callback.onSuccess(AutofillLauncherActivity.getAuthIntentSenderForRegistration(this,
// registerInfo))
//} else {
AutofillLauncherActivity.launchForRegistration(this, registerInfo)
callback.onSuccess()
AutofillLauncherActivity.launchForRegistration(this, registerInfo)
success = true
callback.onSuccess()
//}
return
}
}
}
callback.onFailure("Saving form values is not allowed")
if (!success) {
callback.onFailure("Saving form values is not allowed")
}
}
override fun onConnected() {
@@ -348,7 +378,6 @@ class KeeAutofillService : AutofillService() {
}
override fun onDisconnected() {
mLock.set(false)
Log.d(TAG, "onDisconnected")
}

View File

@@ -19,35 +19,16 @@
*/
package com.kunzisoft.keepass.settings
import android.os.Bundle
import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
import androidx.preference.PreferenceFragmentCompat
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
class AutofillSettingsActivity : DatabaseModeActivity() {
class AutofillSettingsActivity : ExternalSettingsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_toolbar)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(R.string.autofill_preference_title)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, AutofillSettingsFragment())
.commit()
}
override fun retrieveTitle(): Int {
return R.string.autofill_preference_title
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onBackPressed()
}
return super.onOptionsItemSelected(item)
override fun retrievePreferenceFragment(): PreferenceFragmentCompat {
return AutofillSettingsFragment()
}
}

View File

@@ -0,0 +1,47 @@
package com.kunzisoft.keepass.settings
import android.os.Bundle
import android.view.MenuItem
import androidx.annotation.StringRes
import androidx.appcompat.widget.Toolbar
import androidx.preference.PreferenceFragmentCompat
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
abstract class ExternalSettingsActivity : DatabaseModeActivity() {
private var lockView: FloatingActionButton? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_toolbar)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(retrieveTitle())
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
lockView = findViewById(R.id.lock_button)
lockView?.hide()
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, retrievePreferenceFragment())
.commit()
}
}
@StringRes
abstract fun retrieveTitle(): Int
abstract fun retrievePreferenceFragment(): PreferenceFragmentCompat
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onDatabaseBackPressed()
}
return super.onOptionsItemSelected(item)
}
}

View File

@@ -19,37 +19,17 @@
*/
package com.kunzisoft.keepass.settings
import android.os.Bundle
import androidx.appcompat.widget.Toolbar
import android.view.MenuItem
import androidx.preference.PreferenceFragmentCompat
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.legacy.DatabaseModeActivity
class MagikeyboardSettingsActivity : DatabaseModeActivity() {
class MagikeyboardSettingsActivity : ExternalSettingsActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_toolbar)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
toolbar.setTitle(R.string.keyboard_setting_label)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, MagikeyboardSettingsFragment())
.commit()
}
override fun retrieveTitle(): Int {
return R.string.keyboard_setting_label
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onBackPressed()
}
return super.onOptionsItemSelected(item)
override fun retrievePreferenceFragment(): PreferenceFragmentCompat {
return MagikeyboardSettingsFragment()
}
}

View File

@@ -120,49 +120,55 @@ class NestedAppSettingsFragment : NestedSettingsFragment() {
activity?.let { activity ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val autoFillEnablePreference: TwoStatePreference? = findPreference(getString(R.string.settings_autofill_enable_key))
val autofillManager = activity.getSystemService(AutofillManager::class.java)
if (autofillManager != null && autofillManager.hasEnabledAutofillServices())
autoFillEnablePreference?.isChecked = autofillManager.hasEnabledAutofillServices()
autoFillEnablePreference?.onPreferenceClickListener = object : Preference.OnPreferenceClickListener {
@RequiresApi(api = Build.VERSION_CODES.O)
override fun onPreferenceClick(preference: Preference): Boolean {
if ((preference as TwoStatePreference).isChecked) {
try {
enableService()
} catch (e: ActivityNotFoundException) {
val error = getString(R.string.error_autofill_enable_service)
preference.isChecked = false
Log.d(javaClass.name, error, e)
Toast.makeText(context, error, Toast.LENGTH_SHORT).show()
activity.getSystemService(AutofillManager::class.java)?.let { autofillManager ->
if (autofillManager.hasEnabledAutofillServices())
autoFillEnablePreference?.isChecked = autofillManager.hasEnabledAutofillServices()
autoFillEnablePreference?.onPreferenceClickListener =
object : Preference.OnPreferenceClickListener {
@RequiresApi(api = Build.VERSION_CODES.O)
override fun onPreferenceClick(preference: Preference): Boolean {
if ((preference as TwoStatePreference).isChecked) {
try {
enableService()
} catch (e: ActivityNotFoundException) {
val error =
getString(R.string.error_autofill_enable_service)
preference.isChecked = false
Log.d(javaClass.name, error, e)
Toast.makeText(context, error, Toast.LENGTH_SHORT).show()
}
} else {
disableService()
}
return false
}
} else {
disableService()
}
return false
}
@RequiresApi(api = Build.VERSION_CODES.O)
private fun disableService() {
if (autofillManager.hasEnabledAutofillServices()) {
autofillManager.disableAutofillServices()
} else {
Log.d(javaClass.name, "Autofill service already disabled.")
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
private fun disableService() {
if (autofillManager != null && autofillManager.hasEnabledAutofillServices()) {
autofillManager.disableAutofillServices()
} else {
Log.d(javaClass.name, "Autofill service already disabled.")
@RequiresApi(api = Build.VERSION_CODES.O)
@Throws(ActivityNotFoundException::class)
private fun enableService() {
if (!autofillManager.hasEnabledAutofillServices()) {
val intent =
Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE)
intent.data =
Uri.parse("package:com.kunzisoft.keepass.autofill.KeeAutofillService")
Log.d(javaClass.name, "Autofill enable service: intent=$intent")
startActivity(intent)
} else {
Log.d(javaClass.name, "Autofill service already enabled.")
}
}
}
}
@RequiresApi(api = Build.VERSION_CODES.O)
@Throws(ActivityNotFoundException::class)
private fun enableService() {
if (autofillManager != null && !autofillManager.hasEnabledAutofillServices()) {
val intent = Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE)
intent.data = Uri.parse("package:com.kunzisoft.keepass.autofill.KeeAutofillService")
Log.d(javaClass.name, "Autofill enable service: intent=$intent")
startActivity(intent)
} else {
Log.d(javaClass.name, "Autofill service already enabled.")
}
}
}
} else {
findPreference<Preference>(getString(R.string.autofill_key))?.isVisible = false

View File

@@ -26,6 +26,7 @@ import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
@@ -54,6 +55,7 @@ open class SettingsActivity
private var coordinatorLayout: CoordinatorLayout? = null
private var toolbar: Toolbar? = null
private var lockView: FloatingActionButton? = null
private var footer: TextView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -62,10 +64,19 @@ open class SettingsActivity
coordinatorLayout = findViewById(R.id.toolbar_coordinator)
toolbar = findViewById(R.id.toolbar)
lockView = findViewById(R.id.lock_button)
footer = findViewById(R.id.screenshot_mode_banner)
// To apply navigation bar with background color
/* TODO Settings nav bar
setTransparentNavigationBar {
coordinatorLayout?.applyWindowInsets(WindowInsetPosition.TOP)
footer?.applyWindowInsets(WindowInsetPosition.BOTTOM)
}*/
mExternalFileHelper = ExternalFileHelper(this)
mExternalFileHelper?.buildOpenDocument { selectedFileUri ->
// Import app properties result
// Import app settings result
try {
selectedFileUri?.let { uri ->
val appProperties = Properties()
@@ -80,11 +91,11 @@ open class SettingsActivity
}
} catch (e: Exception) {
Toast.makeText(this, R.string.error_import_app_properties, Toast.LENGTH_LONG).show()
Log.e(TAG, "Unable to import app properties", e)
Log.e(TAG, "Unable to import app settings", e)
}
}
mExternalFileHelper?.buildCreateDocument { createdFileUri ->
// Export app properties result
// Export app settings result
try {
createdFileUri?.let { uri ->
contentResolver?.openOutputStream(uri)?.use { outputStream ->
@@ -96,7 +107,7 @@ open class SettingsActivity
}
} catch (e: Exception) {
Toast.makeText(this, R.string.error_export_app_properties, Toast.LENGTH_LONG).show()
Log.e(DatabaseLockActivity.TAG, "Unable to export app properties", e)
Log.e(DatabaseLockActivity.TAG, "Unable to export app settings", e)
}
}
@@ -107,7 +118,6 @@ open class SettingsActivity
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
lockView = findViewById(R.id.lock_button)
lockView?.setOnClickListener {
lockAndExit()
}
@@ -166,7 +176,7 @@ open class SettingsActivity
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> onBackPressed()
android.R.id.home -> onDatabaseBackPressed()
}
return super.onOptionsItemSelected(item)
@@ -200,10 +210,10 @@ open class SettingsActivity
}
}
override fun onBackPressed() {
override fun onDatabaseBackPressed() {
// this if statement is necessary to navigate through nested and main fragments
if (supportFragmentManager.backStackEntryCount == 0) {
super.onBackPressed()
super.onDatabaseBackPressed()
} else {
supportFragmentManager.popBackStack()
}

View File

@@ -22,9 +22,16 @@ package com.kunzisoft.keepass.view
import android.animation.Animator
import android.animation.AnimatorSet
import android.animation.ValueAnimator
import android.app.Activity
import android.content.Context
import android.graphics.*
import android.content.res.Configuration
import android.graphics.Color
import android.graphics.Paint
import android.graphics.PorterDuff
import android.graphics.PorterDuffColorFilter
import android.graphics.Typeface
import android.graphics.drawable.Drawable
import android.os.Build
import android.text.Selection
import android.text.Spannable
import android.text.SpannableString
@@ -43,8 +50,14 @@ import androidx.appcompat.view.menu.ActionMenuItemView
import androidx.appcompat.widget.ActionMenuView
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.forEach
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.core.view.updatePadding
import com.google.android.material.appbar.CollapsingToolbarLayout
import com.google.android.material.snackbar.Snackbar
@@ -287,3 +300,68 @@ fun CollapsingToolbarLayout.changeTitleColor(color: Int) {
setExpandedTitleColor(color)
invalidate()
}
fun Activity.setTransparentNavigationBar(applyToStatusBar: Boolean = false, applyWindowInsets: () -> Unit) {
// Only in portrait
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1
&& resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
WindowCompat.setDecorFitsSystemWindows(window, false)
this.window.navigationBarColor = ContextCompat.getColor(this, R.color.surface_selector)
if (applyToStatusBar) {
this.window.statusBarColor = ContextCompat.getColor(this, R.color.surface_selector)
}
applyWindowInsets.invoke()
}
}
/**
* Apply a margin to a view to fix the window inset
*/
fun View.applyWindowInsets(position: WindowInsetPosition = WindowInsetPosition.BOTTOM) {
ViewCompat.setOnApplyWindowInsetsListener(this) { view, windowInsets ->
var consumed = false
// To fix listener in API 27
if (view is ViewGroup) {
view.forEach { child ->
// Dispatch the insets to the child
val childResult = ViewCompat.dispatchApplyWindowInsets(child, windowInsets)
// If the child consumed the insets, record it
if (childResult.isConsumed) {
consumed = true
}
}
}
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
when (position) {
WindowInsetPosition.TOP -> {
if (view.layoutParams is ViewGroup.MarginLayoutParams) {
view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = insets.top
}
}
}
WindowInsetPosition.LEGIT_TOP -> {
if (view.layoutParams is ViewGroup.MarginLayoutParams) {
view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
topMargin = 0
}
}
}
WindowInsetPosition.BOTTOM -> {
if (view.layoutParams is ViewGroup.MarginLayoutParams) {
view.updateLayoutParams<ViewGroup.MarginLayoutParams> {
bottomMargin = insets.bottom
}
}
}
}
// If any of the children consumed the insets, return an appropriate value
if (consumed) WindowInsetsCompat.CONSUMED else windowInsets
}
}
enum class WindowInsetPosition {
TOP, BOTTOM, LEGIT_TOP
}

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:alpha="0.60" android:color="?attr/colorSurface"/>
</selector>

View File

@@ -8,7 +8,7 @@
<item android:state_selected="true">
<shape>
<corners android:radius="25dp" />
<solid android:color="?attr/colorSecondaryContainer"/>
<solid android:color="?attr/colorSecondary"/>
</shape>
</item>
<item android:state_selected="false">

View File

@@ -22,15 +22,12 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:filterTouchesWhenObscured="true"
android:fitsSystemWindows="true">
android:filterTouchesWhenObscured="true">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/toolbar_coordinator"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"
app:layout_constraintTop_toTopOf="parent">
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
@@ -96,7 +93,8 @@
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:paddingBottom="48dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/history_container"
@@ -138,14 +136,26 @@
</androidx.core.widget.NestedScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/activity_entry_footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.tabs.TabLayout
android:id="@+id/entry_content_tab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="180dp"
android:background="@drawable/background_item_selection"
android:backgroundTint="?attr/colorSurfaceContainerLow"
android:backgroundTint="@color/surface_selector"
android:layout_marginBottom="12dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_gravity="bottom|center_horizontal"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"
app:tabMode="fixed"
tools:targetApi="lollipop">
@@ -163,24 +173,25 @@
</com.google.android.material.tabs.TabLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true" />
</FrameLayout>
<include
layout="@layout/view_button_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom" />
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<include layout="@layout/view_screenshot_mode_banner" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include layout="@layout/view_screenshot_mode_banner" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -30,79 +30,91 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/entry_edit_coordinator_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/entry_edit_bottom_bar">
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/activity_entry_edit_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="match_parent">
<com.kunzisoft.keepass.view.ToolbarSpecial
android:id="@+id/special_mode_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:id="@+id/entry_edit_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarStyle="insideOverlay"
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.constraintlayout.widget.ConstraintLayout
<androidx.core.widget.NestedScrollView
android:id="@+id/entry_edit_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="@dimen/card_view_margin_vertical"
android:paddingBottom="@dimen/card_view_margin_vertical">
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/entry_edit_template_selector"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/special_mode_view"
app:layout_constraintBottom_toBottomOf="parent"
android:scrollbarStyle="insideOverlay"
android:scrollbars="none"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/entry_edit_content"
android:name="com.kunzisoft.keepass.activities.fragments.EntryEditFragment"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintWidth_percent="@dimen/content_percent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/entry_edit_template_selector"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
android:layout_height="match_parent"
android:paddingTop="@dimen/card_view_margin_vertical"
android:paddingBottom="128dp">
<androidx.appcompat.widget.AppCompatSpinner
android:id="@+id/entry_edit_template_selector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/entry_edit_content"
android:name="com.kunzisoft.keepass.activities.fragments.EntryEditFragment"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintWidth_percent="@dimen/content_percent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/entry_edit_template_selector"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<com.kunzisoft.keepass.view.ToolbarAction
android:id="@+id/entry_edit_bottom_bar"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/activity_entry_edit_footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
app:layout_constraintBottom_toBottomOf="parent">
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/entry_edit_validate"
style="@style/KeepassDXStyle.Fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/validate"
android:src="@drawable/ic_check_white_24dp"
app:fabCustomSize="@dimen/button_small_size"
app:layout_constraintTop_toTopOf="@+id/entry_edit_bottom_bar"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.kunzisoft.keepass.view.ToolbarAction
android:id="@+id/entry_edit_bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
<include
layout="@layout/view_button_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/entry_edit_validate"
style="@style/KeepassDXStyle.Fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/validate"
android:src="@drawable/ic_check_white_24dp"
app:fabCustomSize="@dimen/button_small_size"
app:layout_constraintTop_toTopOf="@+id/entry_edit_bottom_bar"
app:layout_constraintBottom_toBottomOf="@+id/entry_edit_bottom_bar"
android:layout_marginBottom="6dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<include
layout="@layout/view_button_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"/>
<include layout="@layout/view_screenshot_mode_banner" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ProgressBar
android:id="@+id/loading"
@@ -110,12 +122,9 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
app:layout_anchor="@+id/entry_scroll"
app:layout_anchorGravity="top|center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<include layout="@layout/view_screenshot_mode_banner" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -73,7 +73,7 @@
android:shadowDy="2"
android:shadowRadius="2"
android:paddingTop="?attr/actionBarSize"
android:textColor="@color/green_light"
android:textColor="?attr/colorPrimaryContainer"
android:gravity="center"
android:text="@string/app_name_part1"/>
<TextView
@@ -89,7 +89,7 @@
android:shadowDy="2"
android:shadowRadius="2"
android:paddingTop="?attr/actionBarSize"
android:textColor="@color/orange"
android:textColor="?attr/colorSecondary"
android:gravity="center"
android:text="@string/app_name_part2"/>
<TextView
@@ -107,7 +107,7 @@
android:shadowDy="2"
android:shadowRadius="2"
android:paddingTop="?attr/actionBarSize"
android:textColor="@color/green_lightest"
android:textColor="?attr/colorSecondaryContainer"
android:gravity="center"
android:text="@string/app_name_part3"/>
</LinearLayout>

View File

@@ -31,67 +31,73 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.kunzisoft.keepass.view.ToolbarSpecial
android:id="@+id/special_mode_view"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/activity_group_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/app_name"
app:layout_constraintTop_toBottomOf="@+id/special_mode_view">
<TextView
android:id="@+id/database_name"
android:layout_width="wrap_content"
app:layout_constraintTop_toTopOf="parent">
<com.kunzisoft.keepass.view.ToolbarSpecial
android:id="@+id/special_mode_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginLeft="12dp"
android:singleLine="true"
tools:text="Database"
style="@style/KeepassDXStyle.Title.OnSurface" />
</com.google.android.material.appbar.MaterialToolbar>
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:layout_width="48dp"
android:layout_height="wrap_content"
android:layout_marginStart="48dp"
android:layout_marginLeft="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/special_mode_view"
app:layout_constraintBottom_toTopOf="@+id/group_coordinator">
<ImageView
android:id="@+id/database_color"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_gravity="center_vertical|start"
android:visibility="gone"
android:src="@drawable/background_rounded_square"
android:contentDescription="@string/content_description_database_color"/>
<ImageView
android:id="@+id/database_modified"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_gravity="center_vertical|start"
android:visibility="gone"
android:src="@drawable/ic_modified_white_12dp"
android:contentDescription="@string/save"/>
</FrameLayout>
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:title="@string/app_name"
app:layout_constraintTop_toBottomOf="@+id/special_mode_view">
<TextView
android:id="@+id/database_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginLeft="12dp"
android:maxLines="2"
android:ellipsize="end"
tools:text="Database"
style="@style/KeepassDXStyle.Title.OnSurface" />
</com.google.android.material.appbar.MaterialToolbar>
<FrameLayout
android:layout_width="48dp"
android:layout_height="wrap_content"
android:layout_marginStart="48dp"
android:layout_marginLeft="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/special_mode_view"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:id="@+id/database_color"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_gravity="center_vertical|start"
android:visibility="gone"
android:src="@drawable/background_rounded_square"
android:contentDescription="@string/content_description_database_color"/>
<ImageView
android:id="@+id/database_modified"
android:layout_width="12dp"
android:layout_height="12dp"
android:layout_gravity="center_vertical|start"
android:visibility="gone"
android:src="@drawable/ic_modified_white_12dp"
android:contentDescription="@string/save"/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/group_coordinator"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/toolbar_action"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/activity_group_header">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
@@ -123,48 +129,57 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:background="?android:attr/windowBackground"
android:layout_below="@+id/toolbar" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/activity_group_footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<com.kunzisoft.keepass.view.ToolbarAction
android:id="@+id/toolbar_action"
android:layout_width="match_parent"
android:layout_height="64dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
<com.kunzisoft.keepass.view.AddNodeButtonView
android:id="@+id/add_node_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"
app:layout_constraintEnd_toEndOf="parent"
app:layout_anchor="@+id/nodes_list_fragment_container"
app:layout_anchorGravity="end|bottom" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<com.kunzisoft.keepass.view.ToolbarAction
android:id="@+id/toolbar_action"
android:layout_width="match_parent"
android:layout_height="64dp"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/loading"
<include
layout="@layout/view_button_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true" />
</FrameLayout>
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"
app:layout_constraintStart_toStartOf="parent" />
<include
layout="@layout/view_button_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
<include layout="@layout/view_screenshot_mode_banner" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/error_coordinator"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
android:layout_height="match_parent"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner"/>
<include layout="@layout/view_screenshot_mode_banner" />
<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:indeterminate="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.kunzisoft.keepass.view.NavigationDatabaseView
@@ -172,7 +187,6 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
style="@style/Widget.Material3.NavigationView"
android:fitsSystemWindows="true" />
style="@style/Widget.Material3.NavigationView" />
</androidx.drawerlayout.widget.DrawerLayout>

View File

@@ -67,9 +67,19 @@
android:layout_margin="12dp"
android:contentDescription="@string/about"
android:elevation="4dp"
android:src="@drawable/ic_app_white_24dp"
android:src="@drawable/ic_app_lock_white_24dp"
app:tint="?attr/colorSecondary"
android:background="@drawable/background_image"
android:backgroundTint="@color/green"/>
app:backgroundTint="?attr/colorPrimaryContainer"/>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:layout_margin="12dp"
android:contentDescription="@string/about"
android:elevation="4dp"
android:src="@drawable/ic_app_key_white_24dp"
app:tint="?attr/colorOnPrimaryContainer"/>
</FrameLayout>
<com.google.android.material.appbar.MaterialToolbar

View File

@@ -18,42 +18,44 @@
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
-->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:filterTouchesWhenObscured="true"
android:background="?android:attr/windowBackground"
android:fitsSystemWindows="true">
android:background="?android:attr/windowBackground">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/toolbar_coordinator"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner">
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" >
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_default" />
<FrameLayout
android:id="@+id/fragment_container"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
android:layout_height="match_parent">
<include layout="@layout/toolbar_default"
app:layout_constraintTop_toTopOf="parent"/>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@+id/toolbar"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<include
layout="@layout/view_button_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start|bottom" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/screenshot_mode_banner" />
<include layout="@layout/view_screenshot_mode_banner"
app:layout_constraintBottom_toBottomOf="parent"/>
<include layout="@layout/view_screenshot_mode_banner" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -29,7 +29,7 @@
android:scrollbarStyle="insideOverlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="64dp"
android:paddingBottom="120dp"
android:clipToPadding="false" />
<LinearLayout
android:id="@+id/not_found_container"

View File

@@ -15,7 +15,7 @@
app:useCompatPadding="true"
android:layout_marginStart="-6dp"
android:layout_marginLeft="-6dp"
android:layout_marginBottom="-10dp"
android:layout_marginBottom="-7dp"
android:contentDescription="@string/lock"
android:layout_gravity="bottom"
android:visibility="visible"

View File

@@ -36,7 +36,7 @@
android:minHeight="48dp"
android:hint="@string/password"
android:inputType="textPassword"
android:importantForAutofill="yes"
android:importantForAutofill="no"
android:focusable="true"
android:focusableInTouchMode="true"
android:autofillHints="password"

View File

@@ -6,11 +6,11 @@
android:id="@+id/screenshot_mode_banner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/grey"
android:background="?attr/colorSecondary"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp"
android:text="@string/screenshot_mode_banner_text"
android:textColor="@color/white"
android:textColor="?attr/colorOnSecondary"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@@ -20,8 +20,8 @@
<string name="homepage">الصفحة الرئيسة</string>
<string name="accept">قبول</string>
<string name="add_group">إضافة مجموعة</string>
<string name="encryption">التعميّة</string>
<string name="encryption_algorithm">خوارزمية التعميّة</string>
<string name="encryption">التشفير</string>
<string name="encryption_algorithm">خوارزمية التشفير</string>
<string name="application">التطبيق</string>
<string name="brackets">الأقواس</string>
<string name="extended_ASCII">تمديد ASCII</string>
@@ -30,7 +30,7 @@
<string name="clipboard_error_title">خطأ في الحافظة</string>
<string name="clipboard_error_clear">تعذَّر مسح الحافظة</string>
<string name="database">قاعدة البيانات</string>
<string name="decrypting_db">يفك تعمية محتوى قاعدة البيانات…</string>
<string name="decrypting_db">يفك تشفير محتوى قاعدة البيانات…</string>
<string name="digits">أرقام</string>
<string name="entry_cancel">إلغاء</string>
<string name="entry_notes">ملاحظات</string>
@@ -80,7 +80,7 @@
<string name="progress_create">إنشاء قاعدة بيانات جديدة …</string>
<string name="protection">الحماية</string>
<string name="read_only">محمي من التعديل</string>
<string name="content_description_remove_from_list">حذف</string>
<string name="content_description_remove_from_list">إزالة</string>
<string name="root">الجذر</string>
<string name="memory_usage">استخدام الذاكرة</string>
<string name="parallelism">التَّوازِي</string>
@@ -155,15 +155,15 @@
<string name="menu_url">الانتقال الى الرابط</string>
<string name="menu_file_selection_read_only">محمي من التعديل</string>
<string name="menu_open_file_read_and_write">قابل للتعديل</string>
<string name="select_database_file">فتح قاعدة بيانات موجودة</string>
<string name="create_keepass_file">انشاء قاعدة بيانات</string>
<string name="select_database_file">فتح مخزن موجود</string>
<string name="create_keepass_file">انشاء مخزن جديد</string>
<string name="progress_title">قيد العمل…</string>
<string name="read_only_warning">KeePassDX يحتاج صلاحية الكتابة من اجل تعديل قاعدة البيانات.</string>
<string name="encryption_explanation">خوارزمية تشفير جميع البيانات.</string>
<string name="encryption_explanation">خوارزمية تشفير جميع البيانات</string>
<string name="unsupported_db_version">قاعدة بيانات غير مدعومة.</string>
<string name="build_label">بناء %1$s</string>
<string name="encrypted_value_stored">تم حفظ كلمة السر المشفرة</string>
<string name="unavailable">قاعدة البيانات لا تمتلك بيانات اعتماد.</string>
<string name="unavailable">غير متوفر</string>
<string name="menu_appearance_settings">المظهر</string>
<string name="general">عام</string>
<string name="autofill">ملأ تلقائي</string>
@@ -177,7 +177,7 @@
<string name="clipboard_notifications_title">اشعارات الحافظة</string>
<string name="clipboard_warning">اذا فشل الحذف التلقائي من الحافظة ,احذف تأريخه يدويا.</string>
<string name="lock_database_screen_off_title">قفل الشاشة</string>
<string name="lock_database_screen_off_summary">اقفل قاعدة البيانات عند انغلاق الشاشة</string>
<string name="lock_database_screen_off_summary">اقفل قاعدة البيانات بعد بضع ثوانٍ بمجرد إيقاف تشغيل الشاشة</string>
<string name="biometric_delete_all_key_title">حذف مفاتيح التشفير</string>
<string name="unavailable_feature_text">لا يمكن بدأ هذه الميزة .</string>
<string name="unavailable_feature_version">هذا الجهاز يعمل بأندرويد %1$s لكن يحتاج نسخة %2$s على الأقل.</string>
@@ -185,9 +185,9 @@
<string name="path">مسار</string>
<string name="database_history">تأريخ</string>
<string name="clipboard_notifications_summary">أظهر اشعارات الحافظة لنسخ الحقول عند عرض مدخل</string>
<string name="advanced_unlock">البصمة</string>
<string name="advanced_unlock">فتح الجهاز</string>
<string name="biometric_unlock_enable_title">فحص البصمة</string>
<string name="biometric_unlock_enable_summary">يسمح بفحص البصمة لفتح قاعدة البيانات</string>
<string name="biometric_unlock_enable_summary">يتيح لك مسح بياناتك الحيوية لفتح قاعدة البيانات</string>
<string name="monospace_font_fields_enable_summary">غير خط الحقول لتوضيح المحارف</string>
<string name="allow_copy_password_title">الوثوق بالحافظة</string>
<string name="allow_copy_password_summary">اسمح بنسخ كلمة السر والحقول المحمية إلى للحافظة</string>
@@ -213,10 +213,10 @@
<string name="keyboard_keys_category">مفاتيح</string>
<string name="keyboard_key_vibrate_title">إهتزاز عند اللمس</string>
<string name="keyboard_key_sound_title">صوت عند اللمس</string>
<string name="allow_no_password_title">"إسمح بالفتح دون كلمة سر "</string>
<string name="allow_no_password_title">إسمح بدون المفتاح الرئيسي</string>
<string name="enable_read_only_title">محمي من التعديل</string>
<string name="enable_read_only_summary">افتح قاعدة البيانات في وضع القراءة افتراضيا</string>
<string name="enable_education_screens_title">شاشات تعليمية</string>
<string name="enable_education_screens_title">تلميحات تعليمية</string>
<string name="reset_education_screens_summary">أعد عرض كل المعلومات التعليمية</string>
<string name="reset_education_screens_text">إعادة تعيين الشاشات التلميحات</string>
<string name="education_create_database_title">أنشئ قاعدة بيانات</string>
@@ -233,7 +233,7 @@
<string name="keyboard_label">Magikeyboard (KeePassDX)</string>
<string name="keyboard_notification_entry_content_title">%1$s متوفر على Magikeyboard</string>
<string name="keyboard_notification_entry_content_text">%1$s</string>
<string name="reset_education_screens_title">إعادة تعيين الشاشات التعليمية</string>
<string name="reset_education_screens_title">إعادة تعيين التلميحات التعليمية</string>
<string name="education_search_title">البحث من خلال الإدخالات</string>
<string name="content_description_open_file">افتح الملف</string>
<string name="content_description_add_entry">إضافة مدخلة</string>
@@ -261,7 +261,7 @@
<string name="content_description_update_from_list">تحديث</string>
<string name="content_description_keyboard_close_fields">أغلق الحقول</string>
<string name="error_create_database_file">لا يمكن انشاء قاعدة بيانات بكلمة السر وملف المفتاح الحاليين.</string>
<string name="menu_advanced_unlock_settings">فك القفل المتقدم</string>
<string name="menu_advanced_unlock_settings">فك قفل الجهاز</string>
<string name="entry_attachments">مرفقات</string>
<string name="entry_history">السجل</string>
<string name="entry_add_attachment">أضف مرفقا</string>
@@ -334,8 +334,8 @@
<string name="database_data_compression_title">ضغط البيانات</string>
<string name="data">البيانات</string>
<string name="unavailable_feature_hardware">تعذر العثور على ماسح البصمة.</string>
<string name="biometric_delete_all_key_summary">احذف كل مفاتيح التعمية المرتبطة بفك القفل المتقدم</string>
<string name="advanced_unlock_explanation_summary">استخدم إلغاء القفل المتقدم لفتح قاعدة البيانات بسهولة</string>
<string name="biometric_delete_all_key_summary">احذف كل مفاتيح التشفير المرتبطة بفتح الجهاز</string>
<string name="advanced_unlock_explanation_summary">استخدم إلغاء القفل الجهاز لفتح قاعدة البيانات بسهولة</string>
<string name="lock_database_show_button_summary">يعرض زر القَفل في الواجهة</string>
<string name="lock_database_show_button_title">اعرض زر القَفل</string>
<string name="lock_database_back_root_summary">قفل قاعدة البيانات عند النقر على زر الرجوع في الشاشة الرئيسية</string>
@@ -359,10 +359,10 @@
<string name="autofill_application_id_blocklist_title">قائمة التطبيقات المحظورة</string>
<string name="content_description_repeat_toggle_password_visibility">بدِّل ظهور كلمة السر</string>
<string name="hide_expired_entries_summary">لن تعرض المدخلات منتهية الصلاحية</string>
<string name="education_read_only_summary">غيِّر وضع الجلسة.
<string name="education_read_only_summary">تغيير وضع الافتتاح للجلسة.
\n
\n\"محمي من التعديل\" يمنع أي تغيير في قاعدة البيانات.
\n\"قابل للتعديل\" يتيح لك إضافة أو حذف أو تعديل جميع العناصر.</string>
\nيمنع \"محمي ضد الكتابة\" التغييرات غير المقصودة في قاعدة البيانات.
\n\"قابل للتعديل\" يتيح لك إضافة أو حذف أو تعديل جميع العناصر كما تريد.</string>
<string name="education_read_only_title">احمي قاعدة البيانات من التعديل</string>
<string name="education_unlock_title">افتح قاعدة البيانات</string>
<string name="education_add_attachment_summary">أضف مرفقا للمدخلة لحفظ بيانات اضافية.</string>
@@ -373,7 +373,7 @@
<string name="keyboard_selection_entry_title">اختيار المدخلة</string>
<string name="device_keyboard_setting_title">إعدادات لوحة مفاتيح الجهاز</string>
<string name="magic_keyboard_explanation_summary">نشِّط لوحة مفاتيح مخصصة لملأ كلمة السر وحقول معرّفك</string>
<string name="biometric_auto_open_prompt_summary">اطلب فك القفل المتقدم ان كانت قاعدة البيانات معدّة لذلك</string>
<string name="biometric_auto_open_prompt_summary">اطلب إلغاء قفل الجهاز تلقائيًا إذا كانت قاعدة البيانات معدّة لذلك</string>
<string name="biometric_auto_open_prompt_title">افتح المحث تلقائيا</string>
<string name="keystore_not_accessible">لم يُهيأ مخزن المفاتيح بشكل صحيح.</string>
<string name="warning_remove_unlinked_attachment">حذف البيانات سيقلل من حجم قاعدة البيانات لكن احذر أن تكون إحدى هذه البيانات ملحقة لكي-باس.</string>
@@ -428,7 +428,7 @@
<string name="membership">العضوية</string>
<string name="name">الاسم</string>
<string name="email">البريد الإلكتروني</string>
<string name="email_address">البريد الإلكتروني</string>
<string name="email_address">عنوان البريد الإلكتروني</string>
<string name="ssid">SSID</string>
<string name="debit_credit_card">بطاقة السحب الفوري / الإئتمان</string>
<string name="error_registration_read_only">لا يمكن حفظ عنصر في قاعدة بيانات مفتوحة للقراءة فقط</string>
@@ -454,8 +454,8 @@
<string name="seed">البذرة</string>
<string name="error_database_uri_null">يتعذر استرداد مسار قاعدة البيانات.</string>
<string name="error_rebuild_list">يتعذر إعادة بناء القائمة بشكل صحيح.</string>
<string name="menu_keystore_remove_key">احذف رمز فك القفل المتقدم</string>
<string name="menu_form_filling_settings">تعبئة الحقول</string>
<string name="menu_keystore_remove_key">احذف رمز فك القفل الجهاز</string>
<string name="menu_form_filling_settings">ملء النموذج</string>
<string name="menu_reload_database">أعد تحميل البيانات</string>
<string name="menu_external_icon">أيقونة خارجية</string>
<string name="registration_mode">وضع التسجيل</string>
@@ -469,11 +469,11 @@
<string name="warning_database_info_changed_options">ادمج البيانات أو استبدل التعديلات الخارجية بحفظ قاعدة البيانات أو أعد تحميلها لجلب آخر التغييرات.</string>
<string name="credential_before_click_advanced_unlock_button">اكتب كلمة السر، وأنقر هذا الزر.</string>
<string name="device_credential">بيانات الاعتماد للجهاز</string>
<string name="advanced_unlock_tap_delete">انفر لحذف مفاتيح فك القفل المتقدم</string>
<string name="advanced_unlock_tap_delete">انقر لحذف مفاتيح فتح الجهاز</string>
<string name="keyboard_auto_go_action_title">إجراء اللمس التلقائي</string>
<string name="keyboard_previous_fill_in_title">إجراء لمس تلقائي</string>
<string name="keyboard_previous_fill_in_title">العودة إلى الوراء</string>
<string name="keyboard_previous_lock_title">اقفل قاعدة البيانات</string>
<string name="education_advanced_unlock_title">فك القفل المتقدم لقاعدة البيانات</string>
<string name="education_advanced_unlock_title">فتح قاعدة بيانات الجهاز</string>
<string name="hint_icon_name">اسم الأيقونة</string>
<string name="autofill_manual_selection_title">اختيار يدوي</string>
<string name="description_app_properties">خصائص KeePassDX لإدارة إعدادات التطبيقات</string>
@@ -483,7 +483,7 @@
<string name="content_description_database_color">لون قاعدة البيانات</string>
<string name="menu_merge_from">ادمج من…</string>
<string name="show_uuid_summary">يعرض \"المعرف العام\" المرتبط بمُدخل او بمجموعة</string>
<string name="expired">انتهت المهلة</string>
<string name="expired">انتهت</string>
<string name="tags">الوسوم</string>
<string name="menu_merge_database">ادمج البيانات</string>
<string name="current_group">المجموعة الحالية</string>
@@ -497,11 +497,11 @@
<string name="custom_data">بيانات مخصصة</string>
<string name="case_sensitive">حساسة لحالة الأحرف</string>
<string name="regex">تعابير نمطية</string>
<string name="enable_keep_screen_on_title">أبق الشاشة شغّالة</string>
<string name="enable_keep_screen_on_title">أبقِ الشاشة شغّالة</string>
<string name="enable_education_screens_summary">أبرز العناصر لتعلم طريقة عمل التطبيق</string>
<string name="autofill_read_only_save">غير مسموح حفظ البيانات في قاعدة بيانات مفتوحة للقراءة فقط.</string>
<string name="autofill_inline_suggestions_keyboard">أُضيف اقتراح ملء تلقائي.</string>
<string name="keyboard_previous_database_credentials_summary">ارجع للوحة المفاتيح السابقة تلقائيًا في شاشة بيانات اعتماد قاعدة البيانات.</string>
<string name="keyboard_previous_database_credentials_summary">الرجوع للوحة المفاتيح السابقة تلقائيًا في شاشة بيانات اعتماد قاعدة البيانات</string>
<string name="autofill_manual_selection_summary">اعرض خيارًا يسمح للمستخدم باختيار مدخلة من قاعدة البيانات</string>
<string name="keyboard_previous_search_title">شاشة البحث</string>
<string name="keyboard_previous_search_summary">ارجع للوحة المفاتيح السابقة تلقائيًا في شاشة البحث</string>
@@ -510,16 +510,177 @@
<string name="autofill_close_database_summary">أغلق قاعدة البيانات بعد الملء التلقائي</string>
<string name="autofill_ask_to_save_data_summary">اسأل عن حفظ البيانات عند ملئك لنموذج</string>
<string name="templates_group_uuid_title">مجموعة القوالب</string>
<string name="advanced_unlock_timeout">انتهت مهلة فك القفل المتقدم</string>
<string name="temp_advanced_unlock_timeout_summary">مهلة استخدام فك القفل المتقدم قبل حذف محتواها</string>
<string name="advanced_unlock_delete_all_key_warning">أتريد حذف كل مفاتيح التعمية المرتبطة بفك القفل المتقدم؟</string>
<string name="advanced_unlock_timeout">انتهت مهلة فتح الجهاز</string>
<string name="temp_advanced_unlock_timeout_summary">مهلة استخدام فتح الجهاز قبل حذف محتواها</string>
<string name="advanced_unlock_delete_all_key_warning">أتريد حذف كل مفاتيح التشفير المرتبطة بفتح الجهاز؟</string>
<string name="templates">القوالب</string>
<string name="templates_group_enable_title">استخدام القوالب</string>
<string name="notification">الإشعارات</string>
<string name="temp_advanced_unlock_enable_summary">لا تستخدم أي محتوى معمى لاستخدام فك القفل المتقدم</string>
<string name="temp_advanced_unlock_timeout_title">انتهاء صلاحية فك القفل المتقدم</string>
<string name="temp_advanced_unlock_enable_summary">لا تقم بتخزين أي محتوى مشفر لاستخدام إلغاء قفل الجهاز</string>
<string name="temp_advanced_unlock_timeout_title">انتهاء صلاحية فتح الحهاز</string>
<string name="hide_expired_entries_title">إخفاء الإدخالات منتهية الصلاحية</string>
<string name="content_description_hardware_key_checkbox">خانة إختيار مفتاح الجهاز</string>
<string name="content_description_passphrase_word_count">عدد عبارات المرور</string>
<string name="content_description_entry_background_color">لون خلفية المدخل</string>
<string name="passphrase">عبارة المرور</string>
<string name="colorize_password_title">تلوين كلمات المرور</string>
<string name="permission">الإذن</string>
<string name="advanced_unlock_prompt_not_initialized">تعذر تهيئة موجه إلغاء قفل الجهاز.</string>
<string name="biometric_security_update_required">مطلوب تحديث أمان المقاييس الحيوية.</string>
<string name="advanced_unlock_not_recognized">تعذر التعرف على طباعة فتح الجهاز</string>
<string name="temp_advanced_unlock_enable_title">فتح جهاز مؤقت</string>
<string name="autofill_inline_suggestions_title">اقتراحات مضمنة</string>
<string name="education_setup_OTP_summary">قم بإعداد إدارة كلمات المرور لمرة واحدة (HOTP / TOTP) لإنشاء رمز مميز مطلوب للمصادقة الثنائية (2FA).</string>
<string name="education_field_copy_summary">يمكن لصق الحقول المنسوخة في أي مكان.
\n
\nاستخدم طريقة ملء النموذج التي تفضلها.</string>
<string name="html_text_dev_feature_work_hard">نحن نعمل بجد لإصدار هذه الميزة بسرعة.</string>
<string name="autofill_inline_suggestions_summary">حاول عرض اقتراحات الملء التلقائي مباشرة من لوحة مفاتيح متوافقة</string>
<string name="delete_entered_password_summary">يحذف كلمة المرور التي تم إدخالها بعد محاولة الاتصال بقاعدة البيانات</string>
<string name="education_lock_summary">اقفل قاعدةبياناتك بسرعة، يمكنك إعداد التطبيق لقفلها بعد فترة، وعند إيقاف تشغيل الشاشة.</string>
<string name="education_sort_title">فرز العنصر</string>
<string name="contribute">ساهِم</string>
<string name="upload_attachment">رفع %1$s</string>
<string name="download_canceled">ألغيت!</string>
<string name="unit_kibibyte">كيلو بايت</string>
<string name="unit_mebibyte">ميغا بايت</string>
<string name="unit_gibibyte">جيجابت</string>
<string name="entropy">إنتروبيا: %1$s بت</string>
<string name="entropy_high">الانتروبيا: مرتفع</string>
<string name="entropy_calculate">الانتروبيا: احسب…</string>
<string name="exclude_ambiguous_chars">استبعاد الأحرف الغامضة</string>
<string name="consider_chars_filter">ضع في اعتبارك الأحرف</string>
<string name="ignore_chars_filter">تجاهل الأحرف</string>
<string name="style_choose_title">سمة التطبيق</string>
<string name="lower_case">أحرف صغيرة</string>
<string name="upper_case">الأحرف الكبيرة</string>
<string name="title_case">حالة العنوان</string>
<string name="character_count">عدد الأحرف: %1$d</string>
<string name="style_choose_summary">السمة المستخدمة في التطبيق</string>
<string name="show_entry_colors_summary">يعرض ألوان المقدمة والخلفية لإدخال</string>
<string name="icon_pack_choose_summary">حزمة الأيقونات المستخدمة في التطبيق</string>
<string name="show_entry_colors_title">ألوان الدخول</string>
<string name="device_credential_unlock_enable_title">فتح بيانات اعتماد الجهاز</string>
<string name="autofill_block_restart">أعد تشغيل التطبيق الذي يحتوي على النموذج لتنشيط الحظر.</string>
<string name="education_donation_title">مشاركة</string>
<string name="education_donation_summary">ساعد في زيادة الاستقرار والأمان وفي إضافة المزيد من الميزات.</string>
<string name="html_text_dev_feature">هذه الميزة &lt;strong&gt; قيد التطوير&lt;/strong&gt; وتتطلب &lt;strong&gt; مساهمتك&lt;/strong&gt; لتكون متاحة قريبًا.</string>
<string name="html_text_dev_feature_contibute">من خلال &lt;strong&gt; المساهمة&lt;/strong&gt; ،</string>
<string name="download_finalization">جارِ الانتهاء…</string>
<string name="download_complete">مكتمل!</string>
<string name="unit_byte">B</string>
<string name="icon_section_custom">مُخصص</string>
<string name="content_description_entry_foreground_color">لون مقدمة الدخول</string>
<string name="keyboard_previous_fill_in_summary">العودة تلقائيًا إلى لوحة المفاتيح السابقة بعد تنفيذ \"إجراء المفتاح التلقائي\"</string>
<string name="download_attachment">تثبيت %1$s</string>
<string name="html_about_privacy">&lt;strong&gt; لا يتم استرداد أي بيانات مستخدم&lt;/strong&gt;، هذا التطبيق لا يتصل بأي خادم، ويعمل محليًا فقط ويحترم خصوصية المستخدمين تمامًا.</string>
<string name="error_cancel_by_user">ألغى المستخدم.</string>
<string name="show_otp_token_title">إظهار رمز \"الاقتران لمرة واحدة\" OTP</string>
<string name="show_otp_token_summary">إظهار رموز\"الاقتران لمرة واحدة\" في قائمة المدخلات</string>
<string name="warning_database_already_opened">قاعدة البيانات مفتوحة بالفعل، أغلقها أولاً لفتح قاعدة البيانات الجديدة</string>
<string name="warning_database_info_reloaded">ستؤدي إعادة تحميل قاعدة البيانات إلى حذف البيانات المعدلة محليًا.</string>
<string name="templates_group_enable_summary">استخدم القوالب الديناميكية لملء حقول الإدخال</string>
<string name="keyboard_auto_go_action_summary">إجراء مفتاح \"Go\" بعد الضغط على مفتاح \"Field\"</string>
<string name="allow_no_password_summary">يسمح بالنقر فوق الزر \"فتح\" إذا لم يتم تحديد بيانات اعتماد</string>
<string name="education_generate_password_summary">أنشئ كلمة مرور قوية لربطها بإدخالك، وحددها بسهولة وفقًا لمعايير النموذج ولا تنس كلمة المرور الآمنة.</string>
<string name="education_setup_OTP_title">قم بإعداد OTP</string>
<string name="style_brightness_title">سطوع السمة</string>
<string name="word_separator">الفاصل</string>
<string name="screenshot_mode_banner_text">وضع لقطة الشاشة</string>
<string name="style_brightness_summary">اختيار سمة فاتحة او داكنة</string>
<string name="icon_section_standard">قياسي</string>
<string name="wireless">واي فاي Wi-Fi</string>
<string name="icon_pack_choose_title">حزمة أيقونات</string>
<string name="content_description_nav_header">رأس التنقل</string>
<string name="inherited">موروث</string>
<string name="auto_type_sequence">تسلسل الكتابة تلقائيًا</string>
<string name="kdf_explanation">لإنشاء مفتاح خوارزمية التشفير، يتحول المفتاح الرئيسي باستخدام وظيفة اشتقاق مفتاح مملح عشوائيًا.</string>
<string name="html_text_dev_feature_buy_pro">بشراء الإصدار &lt;strong&gt; pro &lt;/strong&gt;،</string>
<string name="auto_type">كتابة تلقائيًا</string>
<string name="hardware_key">مفتاح الجهاز</string>
<string name="advanced_unlock_prompt_store_credential_title">رابط لفتح الجهاز</string>
<string name="backspace">فراغ للخلف</string>
<string name="enter">دخول</string>
<string name="education_sort_summary">اختر كيفية فرز الإدخالات والمجموعات.</string>
<string name="html_text_feature_generosity">هذا &lt;strong&gt; النمط المرئي&lt;/strong&gt; متاح بفضل كرمك.</string>
<string name="info">المعلومات</string>
<string name="waiting_challenge_response">في انتظار استجابة التحدي…</string>
<string name="bank_identifier_code">SWIFT / BIC</string>
<string name="international_bank_account_number">IBAN</string>
<string name="error_no_hardware_key">حدد مفتاح الجهاز.</string>
<string name="colorize_password_summary">تلوين أحرف كلمة المرور حسب النوع</string>
<string name="enable_keep_screen_on_summary">استمر في تشغيل الشاشة عند مشاهدة إدخال أو تعديله</string>
<string name="enable_screenshot_mode_title">وضع لقطة الشاشة</string>
<string name="navigation_drawer_open">درج التنقل مفتوح</string>
<string name="waiting_challenge_request">في انتظار طلب التحدي…</string>
<string name="navigation_drawer_close">درج التنقل مقفول</string>
<string name="error_XML_malformed">XML تالف.</string>
<string name="error_otp_type">لم يتم التعرف على نوع OTP الحالي من خلال هذا النموذج، وقد لا يؤدي التحقق من صحته إلى إنشاء الرمز المميز بشكل صحيح.</string>
<string name="error_challenge_already_requested">التحدي مطلوب بالفعل</string>
<string name="error_response_already_provided">تقدم الرد بالفعل.</string>
<string name="error_no_response_from_challenge">غير قادر على الحصول على رد من التحدي.</string>
<string name="error_driver_required">مطلوب تعريف لـ%1$s.</string>
<string name="error_unable_merge_database_kdb">تعذر الدمج من قاعدة بيانات V1.</string>
<string name="error_location_unknown">موقع قاعدة البيانات غير معروف، لا يمكن تنفيذ إجراء قاعدة البيانات.</string>
<string name="menu_advanced_unlock_settings_summary">القياس الحيوي، بيانات اعتماد الجهاز</string>
<string name="menu_database_settings_summary">البيانات الوصفية، سلة المحذوفات، القوالب، التاريخ</string>
<string name="menu_security_settings_summary">التشفير، وظيفة اشتقاق المفتاح</string>
<string name="error_hardware_key_unsupported">مفتاح الجهاز غير مدعوم.</string>
<string name="master_key_settings_summary">التغيير والتجديد</string>
<string name="error_empty_key">لا يمكن أن يكون المفتاح فارغًا.</string>
<string name="corrupted_file">ملف تالف.</string>
<string name="warning_keyfile_integrity">لا يتم ضمان تجزئة الملف لأن Android يمكنه تغيير بياناته بسرعة. قم بتغيير امتداد الملف إلى bin. من أجل التكامل الصحيح.</string>
<string name="invalid_db_same_uuid">%1$s بنفس UUID %2$s موجود بالفعل.</string>
<string name="remember_hardware_key_title">تذكر مفاتيح الأجهزة</string>
<string name="warning_exact_alarm">لم تسمح للتطبيق باستخدام منبه دقيق. نتيجة لذلك، لن يتم تنفيذ الميزات التي تتطلب مؤقتًا في وقت محدد.</string>
<string name="remember_hardware_key_summary">يتتبع مفاتيح الأجهزة المستخدمة</string>
<string name="warning_database_notification_permission">يسمح لك إذن الإشعار بعرض حالة قاعدة البيانات وقفلها باستخدام زر يسهل الوصول إليه.
\n
\nإذا لم تنشط هذا الإذن، فلن تكون قاعدة البيانات المفتوحة في الخلفية مرئية إذا كان هناك تطبيق آخر في المقدمة.</string>
<string name="warning_copy_permission">مطلوب إذن الإشعار لاستخدام ميزة إشعار الحافظة.</string>
<string name="merge_success">اكتمل الدمج بنجاح</string>
<string name="advanced_unlock_prompt_store_credential_message">ما زلت بحاجة إلى تذكر بيانات الاعتماد الرئيسية في مخزنك إذا كنت تستخدم التعرف على فتح الجهاز.</string>
<string name="advanced_unlock_prompt_extract_credential_title">التعرف على فتح الجهاز</string>
<string name="later">لاحقًا</string>
<string name="configure">تضبيط</string>
<string name="advanced_unlock_prompt_extract_credential_message">استخراج بيانات اعتماد قاعدة البيانات مع بيانات فتح الجهاز</string>
<string name="ask">إسأل</string>
<string name="configure_biometric">لم تسجل بيانات اعتماد المقاييس الحيوية أو الجهاز.</string>
<string name="show_uuid_title">إظهار \"المعرف العام المميز\" UUID</string>
<string name="unlock_and_link_biometric">رابط فتح الجهاز</string>
<string name="advanced_unlock_invalid_key">لا يمكن قراءة مفتاح فتح الجهاز. يرجى حذفه وتكرار إجراء التعرف على الفتح.</string>
<string name="advanced_unlock_scanning_error">خطأ في فتح الجهاز: %1$s</string>
<string name="menu_appearance_settings_summary">المظاهر والألوان والسمات</string>
<string name="autofill_explanation_summary">تمكين الملء التلقائي لملء النماذج بسرعة في التطبيقات الأخرى</string>
<string name="device_credential_unlock_enable_summary">يتيح لك استخدام بيانات اعتماد جهازك لفتح قاعدة البيانات</string>
<string name="autofill_service_name">KeePassDX نموذج الملء التلقائي</string>
<string name="unlock">فتح</string>
<string name="menu_app_settings_summary">البحث، القفل، التاريخ، الخصائص</string>
<string name="menu_form_filling_settings_summary">لوحة المفاتيح، الملء التلقائي، الحافظة</string>
<string name="advanced_unlock_keystore_warning">ستقوم هذه الميزة بتخزين بيانات الاعتماد المشفرة في KeyStore الآمن بجهازك.
\n
\nاعتمادًا على تطبيق API الأصلي لنظام التشغيل، قد لا يعمل بكامل طاقته.
\nتحقق من توافق وأمن KeyStore مع الشركة المصنعة لجهازك ومنشئ ROM الذي تستخدمه.</string>
<string name="keyboard_selection_entry_summary">عند عرض إدخال في KeePassDX، عبئ Magikeyboard بهذا الإدخال</string>
<string name="enable_screenshot_mode_summary">اسمح لتطبيقات الطرف الثالث بتسجيل أو التقاط لقطات شاشة للتطبيق</string>
<string name="keyboard_save_search_info_summary">حاول حفظ المعلومات المشتركة عند إجراء اختيار إدخال يدوي لاستخدامات مستقبلية أسهل</string>
<string name="education_entry_edit_summary">تحرير الإدخال الخاص بك مع الحقول المخصصة. يمكن الرجوع إلى بيانات التجمع بين حقول الإدخال المختلفة.</string>
<string name="education_validate_entry_title">تحقق من صحة الإدخال</string>
<string name="education_validate_entry_summary">تذكر التحقق من صحة الإدخال الخاص بك وحفظ قاعدة البيانات الخاصة بك.
\n
\nإذا تم تنشيط القفل التلقائي ونسيت أنك تجري تعديلاً، فإنك تخاطر بفقدان بياناتك.</string>
<string name="education_entry_new_field_summary">قم بتسجيل حقل إضافي، أضف قيمة وقم بحمايته بشكل اختياري.</string>
<string name="education_unlock_summary">أدخل كلمة المرور و/أو ملف المفتاح لفتح قاعدة بياناتك.
\n
\nقم بعمل نسخة احتياطية من ملف قاعدة البيانات في مكان آمن بعد كل تغيير.</string>
<string name="html_text_dev_feature_thanks">شكرا جزيلا لمساهمتك.</string>
<string name="at_least_one_char">على الأقل حرف واحد من كل منهما</string>
<string name="html_text_dev_feature_upgrade">تذكر أن تحافظ على تحديث تطبيقك عن طريق تثبيت إصدارات جديدة.</string>
<string name="download">تثبيت</string>
<string name="html_text_ad_free">على عكس العديد من تطبيقات إدارة كلمات المرور ، فإن هذا التطبيق &lt;strong&gt;بدون إعلانات&lt;/strong&gt;، و &lt;strong&gt;برنامج حر متروك الحقوق&lt;/strong&gt; ولا يجمع البيانات الشخصية على خوادمه، بغض النظر عن الإصدار الذي تستخدمه.</string>
<string name="download_initialization">جارِ التهيئة…</string>
<string name="download_progression">قيد التقدم: %1$d%%</string>
<string name="html_text_buy_pro">بشراء الإصدار الاحترافي، ستتمتع بإمكانية الوصول إلى هذا &lt;strong&gt; النمط المرئي&lt;/strong&gt; وستساعد بشكل خاص في &lt;strong&gt; تنفيذ مشروعات المجتمع. &lt;/strong&gt;</string>
<string name="html_text_donation">من أجل الحفاظ على حريتنا ولكي نكون نشيطين دائمًا، فإننا نعتمد على &lt;strong&gt; مساهمتك.&lt;/strong&gt;</string>
<string name="html_text_dev_feature_encourage">أنت تشجع المطورين على إنشاء &lt;strong&gt; ميزات جديدة&lt;/strong&gt; و &lt;strong&gt; إصلاح الخلل&lt;/strong&gt; وفقًا لملاحظاتك.</string>
</resources>

View File

@@ -1,12 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="feedback">Обратна връзка</string>
<string name="encryption_algorithm">Алгоритъм за криптиране</string>
<string name="encryption">Криптиране</string>
<string name="encryption_algorithm">Алгоритъм за шифроване</string>
<string name="encryption">Шифроване</string>
<string name="security">Сигурност</string>
<string name="master_key">Главен ключ</string>
<string name="add_group">Добави група</string>
<string name="edit_entry">Редактирай</string>
<string name="add_entry">Добави</string>
<string name="accept">Приемам</string>
<string name="add_group">Нова група</string>
<string name="edit_entry">Редактиране на запис</string>
<string name="add_entry">Добавяне на запис</string>
<string name="accept">Приемане</string>
<string name="biometric_delete_all_key_title">Изтриване на шифроващите ключове</string>
<string name="digits">Цифри</string>
<string name="contact">За контакт</string>
<string name="app_timeout">Време за изчакване</string>
<string name="application">Приложение</string>
<string name="brackets">Скоби</string>
<string name="about">Относно</string>
<string name="info">Информация</string>
<string name="clipboard_cleared">Клипбордът е изчистен</string>
<string name="content_description_add_group">Нова група</string>
</resources>

View File

@@ -42,7 +42,7 @@
<string name="decrypting_db">Dešifruji obsah databáze…</string>
<string name="default_checkbox">Použít jako výchozí databázi</string>
<string name="digits">Číslice</string>
<string name="select_database_file">Otevřít existující databázi</string>
<string name="select_database_file">Otevřít existující trezor</string>
<string name="entry_accessed">Poslední přístup</string>
<string name="entry_cancel">Zrušit</string>
<string name="entry_notes">Poznámky</string>
@@ -174,7 +174,7 @@
<string name="warning_empty_password">Pokračovat bez ochrany heslem\?</string>
<string name="warning_no_encryption_key">Pokračovat bez šifrovacího klíče\?</string>
<string name="encrypted_value_stored">Šifrované heslo uloženo</string>
<string name="unavailable">Tato databáze zatím nemá uložené heslo.</string>
<string name="unavailable">Nedostupné</string>
<string name="database_history">Historie</string>
<string name="menu_appearance_settings">Vzhled</string>
<string name="general">Obecné</string>
@@ -194,18 +194,18 @@
<string name="lock">Zamknout</string>
<string name="lock_database_screen_off_title">Zámek obrazovky</string>
<string name="lock_database_screen_off_summary">Několik vteřin po zhasnutí obrazovky uzamknout databázi</string>
<string name="advanced_unlock">Rozšířené odemknutí</string>
<string name="advanced_unlock">Odemykání zařízení</string>
<string name="biometric_unlock_enable_title">Biometrické odemknutí</string>
<string name="biometric_unlock_enable_summary">Nechá otevřít databázi snímáním biometrického údaje</string>
<string name="biometric_delete_all_key_title">Smazat šifrovací klíče</string>
<string name="biometric_delete_all_key_summary">Smazat všechny šifrovací klíče související s rozpoznáním rozšířeného odemknutí</string>
<string name="biometric_delete_all_key_summary">Odstranit všechny šifrovací klíče související s rozpoznáním odemykání zařízení</string>
<string name="unavailable_feature_text">Tuto funkci se nedaří spustit.</string>
<string name="unavailable_feature_version">V zařízení je instalován Android %1$s, ale potřebná je verze %2$s a novější.</string>
<string name="unavailable_feature_hardware">Odpovídající hardware nebyl rozpoznán.</string>
<string name="file_name">Název souboru</string>
<string name="path">Cesta</string>
<string name="assign_master_key">Přiřadit hlavní klíč</string>
<string name="create_keepass_file">Založit novou databázi</string>
<string name="create_keepass_file">Vytvořit nový trezor</string>
<string name="recycle_bin_title">Využití koše</string>
<string name="recycle_bin_summary">Před smazáním přesune vybrané položky do skupiny s názvem \"Koš\"</string>
<string name="monospace_font_fields_enable_title">Písmo kolonek</string>
@@ -245,7 +245,7 @@
<string name="education_entry_edit_summary">Přidejte ke svému záznamu vlastní kolonky. Společná data mohou být sdílena mezi různými kolonkami záznamu odkazem.</string>
<string name="education_generate_password_title">Vytvořit silné heslo</string>
<string name="education_generate_password_summary">Nechte si vytvořit odolné heslo pro svůj záznam, definujte je podle kritérií formuláře, a nezapomeňte na bezpečné heslo.</string>
<string name="education_entry_new_field_title">Přidat vlastní kolonky</string>
<string name="education_entry_new_field_title">Přidat vlastní pole</string>
<string name="education_entry_new_field_summary">Registrovat další kolonku, zadat hodnotu a volitelně ji ochránit.</string>
<string name="education_unlock_title">Odemknout databázi</string>
<string name="education_read_only_title">Ochraňte svou databázi před zápisem</string>
@@ -336,7 +336,7 @@
<string name="menu_advanced_unlock_settings">Odemknutí zařízení</string>
<string name="biometric">Biometrika</string>
<string name="biometric_auto_open_prompt_title">Automaticky otevřít pobídku</string>
<string name="biometric_auto_open_prompt_summary">Automaticky žádat rozšířené odemknutí, je-li databáze nastavena k jejímu použití</string>
<string name="biometric_auto_open_prompt_summary">Automaticky žádat odemykání zařízení, je-li databáze nastavena k jejímu použití</string>
<string name="enable">Zapnout</string>
<string name="disable">Vypnout</string>
<string name="master_key">Hlavní klíč</string>
@@ -365,7 +365,7 @@
<string name="contains_duplicate_uuid_procedure">Opravit chybu založením nového UUID pro duplikáty a pokračovat\?</string>
<string name="database_opened">Databáze otevřena</string>
<string name="clipboard_explanation_summary">Kopírovat kolonky záznamů pomocí schránky Vašeho zařízení</string>
<string name="advanced_unlock_explanation_summary">K snadnějšímu otevření databáze použijte rozšířené odemknutí</string>
<string name="advanced_unlock_explanation_summary">Pro snadnější otevření databáze použít odemykání zařízení</string>
<string name="database_data_compression_title">Komprese dat</string>
<string name="database_data_compression_summary">Komprese dat snižuje velikost databáze</string>
<string name="max_history_items_title">Maximální počet</string>
@@ -446,7 +446,7 @@
<string name="error_string_type">Tento text se s požadovanou položkou neshoduje.</string>
<string name="content_description_add_item">Přidat položku</string>
<string name="keyboard_previous_fill_in_summary">Automaticky přepnout na předchozí klávesnici po provedení \"Akce auto-klávesy\"</string>
<string name="keyboard_previous_fill_in_title">Akce auto-klávesy</string>
<string name="keyboard_previous_fill_in_title">Přepnout zpět</string>
<string name="keyboard_previous_database_credentials_summary">Automaticky přepnout zpět na předchozí klávesnici na obrazovce ověřovacích údajů databáze</string>
<string name="keyboard_previous_database_credentials_title">Obrazovka ověřovacích údajů databáze</string>
<string name="keyboard_change">Přepnout klávesnici</string>
@@ -493,28 +493,28 @@
<string name="select_entry">Vybrat záznam</string>
<string name="back_to_previous_keyboard">Zpět na předchozí klávesnici</string>
<string name="custom_fields">Vlastní kolonky</string>
<string name="advanced_unlock_delete_all_key_warning">Smazat všechny šifrovací klíče související s rozpoznáním rozšířeného odemknutí\?</string>
<string name="advanced_unlock_delete_all_key_warning">Odstranit všechny šifrovací klíče související s rozpoznáním odemykání zařízení\?</string>
<string name="device_credential_unlock_enable_summary">Dovolí pro otevření databáze použít heslo Vašeho zařízení</string>
<string name="device_credential_unlock_enable_title">Odemknutí heslem zařízení</string>
<string name="device_credential">Heslo zařízení</string>
<string name="credential_before_click_advanced_unlock_button">Zadejte heslo a pak klepněte na toto tlačítko.</string>
<string name="advanced_unlock_prompt_not_initialized">Nelze inicializovat pobídku pro rozšířené odemknutí.</string>
<string name="advanced_unlock_scanning_error">Chyba při rozšířeném odemknutí: %1$s</string>
<string name="advanced_unlock_not_recognized">Otisk pro rozšířené odemknutí nebyl rozpoznán</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_title">Otevřít pomocí rozšířeného odemyká</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="menu_keystore_remove_key">Smazat klíč rozšířeného odemknutí</string>
<string name="education_advanced_unlock_title">Rozšířené odemknutí databáze</string>
<string name="advanced_unlock_timeout">Časový limit rozšířeného odemknutí</string>
<string name="temp_advanced_unlock_timeout_summary">Trvání použití rozšířeného odemknutí než bude obsah téhož smazán</string>
<string name="temp_advanced_unlock_enable_summary">Za účelem rozšířeného odemknutí neukládat žádný šifrovaný obsah</string>
<string name="temp_advanced_unlock_enable_title">Přechodné rozšířené odemknutí</string>
<string name="advanced_unlock_tap_delete">Pro odstranění klíčů rozšířeného odemknutí klepnout</string>
<string name="advanced_unlock_prompt_not_initialized">Nepodařilo se inicializovat nabídku pro odemykání zařízení.</string>
<string name="advanced_unlock_scanning_error">Chyba při odemykání zařízení: %1$s</string>
<string name="advanced_unlock_not_recognized">Otisk pro odemykání zařízení nebyl rozpoznán</string>
<string name="advanced_unlock_invalid_key">Nepodařilo se načíst klíč odemykání zařízení. Odstraňte ho a opakujte proces rozpoznání odemknutí.</string>
<string name="advanced_unlock_prompt_extract_credential_message">Načíst údaj z databáze pomocí dat odemykání zařízení</string>
<string name="advanced_unlock_prompt_extract_credential_title">Rozpoznání odemykání zaříze</string>
<string name="advanced_unlock_prompt_store_credential_message">Pokud použijete rozpoznání odemykání zařízení, musíte si i nadále pamatovat hlavní heslo trezoru.</string>
<string name="advanced_unlock_prompt_store_credential_title">Propojit s odemykáním zařízení</string>
<string name="menu_keystore_remove_key">Smazat klíč odemknutí zařízení</string>
<string name="education_advanced_unlock_title">Odemykání databáze zařízením</string>
<string name="advanced_unlock_timeout">Časový limit odemykání zařízení</string>
<string name="temp_advanced_unlock_timeout_summary">Trvání použití odemykání zařízení, než bude obsah smazán</string>
<string name="temp_advanced_unlock_enable_summary">Za účelem odemykání zařízení neukládat žádný šifrovaný obsah</string>
<string name="temp_advanced_unlock_enable_title">Dočasné odemykání zařízení</string>
<string name="advanced_unlock_tap_delete">Klepněte pro odstranění klíčů odemykání zařízení</string>
<string name="education_advanced_unlock_summary">Abyste rychle odemknuli databázi, propojte své heslo s naskenovanou biometrikou nebo údaji zámku zařízení.</string>
<string name="temp_advanced_unlock_timeout_title">Vypršení rozšířeného odemknutí</string>
<string name="temp_advanced_unlock_timeout_title">Vypršení odemykání zařízení</string>
<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>
@@ -615,13 +615,13 @@
<string name="show_entry_colors_summary">Zobrazí barvy popředí a pozadí záznamu</string>
<string name="show_entry_colors_title">Barvy záznamu</string>
<string name="regex">Běžný výraz</string>
<string name="enable_keep_screen_on_summary">Při prohlížení záznamu držet obrazovku zapnutou</string>
<string name="enable_keep_screen_on_summary">Při prohlížení nebo úpravě záznamu ponechat obrazovku zapnutou</string>
<string name="navigation_drawer_open">Otevř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="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="passphrase">Heslová fráze</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>
@@ -667,8 +667,26 @@
<string name="corrupted_file">Poškozený soubor.</string>
<string name="remember_hardware_key_title">Pamatovat si hardwarové klíče</string>
<string name="remember_hardware_key_summary">Udržuje znalost o použitých hardwarových klíčích</string>
<string name="merge_success">Sloučení bylo úspěšně dokončeno</string>
<string name="merge_success">Sloučení úspěšně dokončeno</string>
<string name="info">Informace</string>
<string name="menu_app_settings_summary">Vyhledávání, uzamčení, historie, vlastnosti</string>
<string name="menu_form_filling_settings_summary">Klávesnice, automatické vyplnění, schránka</string>
<string name="menu_advanced_unlock_settings_summary">Biometrie, údaje zařízení</string>
<string name="menu_database_settings_summary">Metadata, koš, šablony, historie</string>
<string name="menu_security_settings_summary">Šifrování, funkce derivace klíče</string>
<string name="master_key_settings_summary">Změna, obnovení</string>
<string name="warning_database_notification_permission">Oprávnění k oznámením umožňuje zobrazit stav databáze a uzamknout ji snadno přístupným tlačítkem.
\n
\nPokud toto oprávnění neaktivujete, nebude databáze otevřená na pozadí viditelná, pokud je v popředí jiná aplikace.</string>
<string name="warning_copy_permission">Oprávnění k oznámením je potřeba pro použití funkce oznámení o schránce.</string>
<string name="later">Později</string>
<string name="ask">Zeptat se</string>
<string name="configure">Nastavit</string>
<string name="unlock_and_link_biometric">Propojení s odemykáním zařízení</string>
<string name="menu_appearance_settings_summary">Motivy, barvy, atributy</string>
<string name="unlock">Odemknout</string>
<string name="education_validate_entry_title">Ověřit vstup</string>
<string name="education_validate_entry_summary">Nezapomeňte ověřit svůj vstup a uložit databázi.
\n
\nPokud je aktivované automatické uzamčení a zapomenete, že jste něco upravili, riskujete ztrátu dat.</string>
</resources>

View File

@@ -224,9 +224,9 @@
<string name="reset_education_screens_summary">Alle Hilfsinfos nochmal anzeigen</string>
<string name="reset_education_screens_text">Hilfeanzeige zurückgesetzt</string>
<string name="education_create_database_title">Datenbankdatei erstellen</string>
<string name="education_create_database_summary">Die erste Datei zur Passwortverwaltung erstellen.</string>
<string name="education_create_database_summary">Erstellt eine erste Datei zur Passwortverwaltung.</string>
<string name="education_select_database_title">Existierende Datenbank öffnen</string>
<string name="education_select_database_summary">Eine frühere Datenbankdatei mit dem Dateimanager öffnen, um sie weiter zu verwenden.</string>
<string name="education_select_database_summary">Öffnet über den Dateimanager eine früher erstellte Datenbankdatei, um sie weiter zu verwenden.</string>
<string name="education_new_node_title">Datenbankelemente hinzufügen</string>
<string name="education_new_node_summary">Einträge helfen dabei digitale Konten zu verwalten.
\n
@@ -236,7 +236,7 @@
<string name="education_entry_edit_title">Eintrag bearbeiten</string>
<string name="education_entry_edit_summary">Dem Eintrag eigene Felder hinzufügen. Die Felder können mit Querverweisen aus anderen Einträgen ergänzt werden.</string>
<string name="education_generate_password_title">Ein starkes Passwort erstellen</string>
<string name="education_generate_password_summary">Ein starkes Passwort generieren, um es mit dem Eintrag zu verknüpfen; es den Anforderungen des Formulars anpassen und die Passwortsicherheit nicht vergessen.</string>
<string name="education_generate_password_summary">Lassen Sie ein starkes Passwort erstellen, das mit Ihrem Eintrag verbunden wird, legen Sie es einfach anhand von Formularkriterien fest und vergessen Sie nicht Ihr Passwort zu sichern.</string>
<string name="education_entry_new_field_title">Eigene Felder hinzufügen</string>
<string name="education_entry_new_field_summary">Ein zusätzliches Feld einfügen, einen Wert hinzufügen und diesen optional schützen.</string>
<string name="education_unlock_title">Datenbank entsperren</string>
@@ -427,17 +427,15 @@
<string name="hide_expired_entries_summary">Abgelaufene Einträge werden nicht angezeigt</string>
<string name="style_choose_title">App-Design</string>
<string name="style_choose_summary">In der App verwendetes Design</string>
<string-array name="list_style_names">
<item>Wald</item>
<item>Göttlich</item>
<item>Klassisch</item>
<item>Einfach</item>
<item>Mond</item>
<item>Sonne</item>
<item>Antwort</item>
<item>Kunzite</item>
<item>System verfolgen</item>
</string-array>
<string name="style_name_forest">Wald</string>
<string name="style_name_divine">Göttlich</string>
<string name="style_name_classic">Klassisch</string>
<string name="style_name_simple">Einfach</string>
<string name="style_name_moon">Mond</string>
<string name="style_name_sun">Sonne</string>
<string name="style_name_reply">Antwort</string>
<string name="style_name_kunzite">Kunzite</string>
<string name="style_name_follow_system">System verfolgen</string>
<string name="warning_database_read_only">Schreibrechte gewähren, um Datenbankänderungen zu speichern</string>
<string name="education_setup_OTP_summary">Einmal-Passwortverwaltung (HOTP/TOTP) einrichten, um Token für Zwei-Faktor-Authentifizierung (2FA) zu generieren.</string>
<string name="education_setup_OTP_title">OTP einrichten</string>

View File

@@ -43,7 +43,7 @@
<string name="digits">Dígitos</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft es de &lt;strong&gt;código abierto&lt;/strong&gt; y &lt;strong&gt;sin publicidad&lt;/strong&gt;.
\nSe proporciona tal cual, bajo licencia &lt;strong&gt;GPLv3&lt;/strong&gt;, sin ninguna garantía.</string>
<string name="select_database_file">Abrir base de datos existente</string>
<string name="select_database_file">Abrir la cámara acorazada existente</string>
<string name="entry_accessed">Accedido</string>
<string name="entry_cancel">Cancelar</string>
<string name="entry_notes">Notas</string>
@@ -91,11 +91,11 @@
<string name="menu_change_key_settings">Cambiar contraseña maestra</string>
<string name="settings">Configuración</string>
<string name="menu_database_settings">Configuración de base de datos</string>
<string name="menu_delete">Eliminar</string>
<string name="menu_delete">Borrar</string>
<string name="menu_donate">Donar</string>
<string name="menu_edit">Editar</string>
<string name="menu_hide_password">Ocultar contraseña</string>
<string name="menu_lock">Bloquear base de datos</string>
<string name="menu_lock">Bloquear la base de datos</string>
<string name="menu_open">Abrir</string>
<string name="menu_search">Buscar</string>
<string name="menu_showpass">Mostrar contraseña</string>
@@ -106,7 +106,7 @@
<string name="no_url_handler">Instale un navegador web para abrir esta URL.</string>
<string name="progress_create">Creando nueva base de datos…</string>
<string name="progress_title">Trabajando…</string>
<string name="content_description_remove_from_list">Eliminar</string>
<string name="content_description_remove_from_list">Quitar</string>
<string name="root">Raíz</string>
<string name="rounds">Rondas de transformación</string>
<string name="rounds_explanation">Un alto número de pasadas de cifrado proporciona protección adicional contra ataques de fuerza bruta, pero puede ralentizar mucho el cargado y el guardado.</string>
@@ -169,7 +169,7 @@
<string name="encrypted_value_stored">Contraseña cifrada almacenada</string>
<string name="database_history">Historial</string>
<string name="autofill_explanation_summary">Habilite el servicio para completar formularios fácilmente desde otras aplicaciones</string>
<string name="unavailable">Esta base de datos aún no tiene credenciales almacenadas.</string>
<string name="unavailable">No disponible</string>
<string name="menu_appearance_settings">Apariencia</string>
<string name="general">General</string>
<string name="autofill">Autocompletado</string>
@@ -186,18 +186,18 @@
<string name="lock">Bloquear</string>
<string name="lock_database_screen_off_title">Bloqueo de pantalla</string>
<string name="lock_database_screen_off_summary">Bloquear la base de datos después de unos segundos cuando la pantalla esté apagada</string>
<string name="advanced_unlock">Desbloqueo avanzado</string>
<string name="advanced_unlock">Desbloqueo del dispositivo</string>
<string name="biometric_unlock_enable_title">Desbloqueo biométrico</string>
<string name="biometric_unlock_enable_summary">Le permite escanear sus datos biométricos para abrir la base de datos</string>
<string name="biometric_delete_all_key_title">Eliminar claves de cifrado</string>
<string name="biometric_delete_all_key_summary">Eliminar todas las claves de cifrado relacionadas con el reconocimiento de desbloqueo avanzado</string>
<string name="biometric_delete_all_key_summary">Borrar todas las claves de cifrado relacionadas con el reconocimiento de desbloqueo del dispositivo</string>
<string name="unavailable_feature_text">No se pudo iniciar esta funcionalidad.</string>
<string name="unavailable_feature_version">El dispositivo funciona con Android %1$s, pero necesita %2$s o posterior.</string>
<string name="unavailable_feature_hardware">No se pudo encontrar el hardware correspondiente.</string>
<string name="file_name">Nombre del archivo</string>
<string name="path">Ruta</string>
<string name="assign_master_key">Asignar una clave maestra</string>
<string name="create_keepass_file">Crear nueva base de datos</string>
<string name="create_keepass_file">Crear una nueva cámara acorazada</string>
<string name="recycle_bin_title">Uso de la papelera de reciclaje</string>
<string name="recycle_bin_summary">Mueve los grupos y las entradas al grupo \"Papelera de reciclaje\" antes de eliminarlos</string>
<string name="monospace_font_fields_enable_title">Tipografía del campo</string>
@@ -237,7 +237,7 @@
<string name="education_field_copy_summary">Los campos copiados pueden pegarse en cualquier sitio.
\n
\nUtilice el método de relleno de formularios que prefiera.</string>
<string name="education_lock_title">Bloquear base de datos</string>
<string name="education_lock_title">Bloquear la base de datos</string>
<string name="education_lock_summary">Bloquee su base de datos rápidamente, puede parametrizar la aplicación para bloquearla después de un tiempo o cuando la pantalla se apague.</string>
<string name="education_sort_title">Ordenar elementos</string>
<string name="education_sort_summary">Ordenar registros y grupos de acuerdo a parámetros específicos.</string>
@@ -331,10 +331,10 @@
<string name="content_description_update_from_list">Actualizar</string>
<string name="content_description_keyboard_close_fields">Cerrar campos</string>
<string name="error_create_database_file">No se puede crear la base de datos con esta contraseña y este archivo clave.</string>
<string name="menu_advanced_unlock_settings">Desbloqueo avanzado</string>
<string name="menu_advanced_unlock_settings">Desbloqueo de dispositivos</string>
<string name="biometric">Biometría</string>
<string name="biometric_auto_open_prompt_title">Abrir petición automáticamente</string>
<string name="biometric_auto_open_prompt_summary">Solicitar automáticamente el desbloqueo avanzado si la base de datos está configurada para utilizarlo</string>
<string name="biometric_auto_open_prompt_summary">Solicitar automáticamente el desbloqueo del dispositivo si la base de datos está configurada para utilizarlo</string>
<string name="enable">Activar</string>
<string name="disable">Desactivar</string>
<string name="education_read_only_summary">Cambiar el modo de apertura de la sesión.
@@ -382,7 +382,7 @@
<string name="settings_database_force_changing_master_key_summary">Requerir un cambio de la contraseña maestra (días)</string>
<string name="settings_database_force_changing_master_key_title">Forzar renovación</string>
<string name="max_history_size_title">Tamaño máximo</string>
<string name="advanced_unlock_explanation_summary">Usar el desbloqueo avanzado para abrir una base de datos más fácilmente</string>
<string name="advanced_unlock_explanation_summary">Utiliza el desbloqueo de dispositivos para abrir una base de datos más fácilmente</string>
<string name="lock_database_show_button_summary">Muestra el botón de bloqueo en la interfaz</string>
<string name="lock_database_show_button_title">Mostrar botón de bloqueo</string>
<string name="autofill_preference_title">Configuración de autocompletado</string>
@@ -442,27 +442,27 @@
<string name="database_data_remove_unlinked_attachments_summary">Elimina los archivos adjuntos contenidos en la base de datos pero no vinculados a una entrada</string>
<string name="database_data_remove_unlinked_attachments_title">Eliminar los datos no vinculados</string>
<string name="data">Datos</string>
<string name="advanced_unlock_delete_all_key_warning">¿Borrar todas las claves de encriptación relacionadas con el reconocimiento de desbloqueo avanzado\?</string>
<string name="advanced_unlock_timeout">Tiempo límite de desbloqueo avanzado</string>
<string name="temp_advanced_unlock_timeout_summary">Duración del uso de desbloqueo avanzado antes de borrar su contenido</string>
<string name="temp_advanced_unlock_timeout_title">Expiración de desbloqueo avanzado</string>
<string name="temp_advanced_unlock_enable_summary">No almacenar ningún contenido encriptado para utilizar el desbloqueo avanzado</string>
<string name="temp_advanced_unlock_enable_title">Desbloqueo avanzado temporal</string>
<string name="advanced_unlock_delete_all_key_warning">¿Borrar todas las claves de cifrado relacionadas con el reconocimiento del desbloqueo del dispositivo\?</string>
<string name="advanced_unlock_timeout">Tiempo de espera de desbloqueo del dispositivo</string>
<string name="temp_advanced_unlock_timeout_summary">Duración del uso del desbloqueo del dispositivo antes de borrar su contenido</string>
<string name="temp_advanced_unlock_timeout_title">Caducidad del desbloqueo del dispositivo</string>
<string name="temp_advanced_unlock_enable_summary">No almacenes ningún contenido cifrado para utilizar el desbloqueo del dispositivo</string>
<string name="temp_advanced_unlock_enable_title">Desbloqueo temporal de los dispositivos</string>
<string name="device_credential_unlock_enable_summary">Le permite usar la credenciales de su dispositivo para abrir la base de datos</string>
<string name="device_credential_unlock_enable_title">Desbloqueo de las credenciales del dispositivo</string>
<string name="advanced_unlock_tap_delete">Toque para eliminar las teclas de desbloqueo avanzadas</string>
<string name="advanced_unlock_tap_delete">Pulsa para eliminar las claves de desbloqueo del dispositivo</string>
<string name="content">Contenido</string>
<string name="clipboard_explanation_summary">Copiar los campos de entrada usando el portapapeles de su dispositivo</string>
<string name="device_credential">Credenciales del dispositivo</string>
<string name="credential_before_click_advanced_unlock_button">Introduzca la contraseña y luego haga clic en este botón.</string>
<string name="advanced_unlock_prompt_not_initialized">No se pudo inicializar el indicador de desbloqueo avanzado.</string>
<string name="advanced_unlock_scanning_error">Error de desbloqueo avanzado: %1$s</string>
<string name="advanced_unlock_not_recognized">No se pudo reconocer la impresión de desbloqueo avanzado</string>
<string name="advanced_unlock_invalid_key">No se puede leer la clave de desbloqueo avanzada. Por favor, bórrela y repita el procedimiento de reconocimiento del desbloqueo.</string>
<string name="advanced_unlock_prompt_extract_credential_message">Extraer la credencial de la base de datos con datos de desbloqueo avanzado</string>
<string name="advanced_unlock_prompt_extract_credential_title">Abrir la base de datos con reconocimiento de desbloqueo avanzado</string>
<string name="advanced_unlock_prompt_store_credential_message">Aún debe recordar su contraseña maestra si emplea el reconocimiento de desbloqueo avanzado.</string>
<string name="advanced_unlock_prompt_store_credential_title">Reconocimiento de desbloqueo avanzado</string>
<string name="advanced_unlock_prompt_not_initialized">No se ha podido inicializar el aviso de desbloqueo del dispositivo.</string>
<string name="advanced_unlock_scanning_error">Error de desbloqueo del dispositivo: %1$s</string>
<string name="advanced_unlock_not_recognized">No se reconoc la huella digital para desbloquear el dispositivo</string>
<string name="advanced_unlock_invalid_key">No se puede leer la clave de desbloqueo del dispositivo. Por favor, bórrala y repite el procedimiento de reconocimiento del desbloqueo.</string>
<string name="advanced_unlock_prompt_extract_credential_message">Extraer la credencial de la base de datos con los datos de desbloqueo del dispositivo</string>
<string name="advanced_unlock_prompt_extract_credential_title">Reconocimiento de desbloqueo de los dispositivos</string>
<string name="advanced_unlock_prompt_store_credential_message">Aún debes recordar la credencial principal de tu cámara acorazada si usas el reconocimiento para el desbloqueo del dispositivo.</string>
<string name="advanced_unlock_prompt_store_credential_title">Enlace para el desbloqueo del dispositivo</string>
<string name="keystore_not_accessible">El almacén de claves no está debidamente inicializado.</string>
<string name="biometric_security_update_required">Se requiere una actualización de la seguridad biométrica.</string>
<string name="configure_biometric">No se ha inscrito ninguna credencial biométrica o del dispositivo.</string>
@@ -472,7 +472,7 @@
<string name="save_mode">Modo de guardado</string>
<string name="search_mode">Modo de búsqueda</string>
<string name="contains_duplicate_uuid_procedure">¿Resolver el problema generando nuevos UUID para que los duplicados continúen\?</string>
<string name="menu_keystore_remove_key">Eliminar clave de desbloqueo avanzado</string>
<string name="menu_keystore_remove_key">Borrar la clave de desbloqueo del dispositivo</string>
<string name="error_field_name_already_exists">El nombre del campo ya existe.</string>
<string name="error_registration_read_only">Guardar un nuevo elemento no está permitido en una base de datos de sólo lectura</string>
<string name="settings_database_recommend_changing_master_key_title">Recomendar la renovación</string>
@@ -488,7 +488,7 @@
<string name="education_setup_OTP_summary">Configurar la gestión de contraseñas de un solo uso (HOTP / TOTP) para generar un token solicitado para la autenticación de dos factores (2FA).</string>
<string name="education_setup_OTP_title">Establecer la contraseña de un solo uso</string>
<string name="education_advanced_unlock_summary">Vincule su contraseña con su credencial biométrica o del dispositivo escaneada para desbloquear rápidamente su base de datos.</string>
<string name="education_advanced_unlock_title">Desbloqueo avanzado de la base de datos</string>
<string name="education_advanced_unlock_title">Desbloqueo de la base de datos de los dispositivos</string>
<string name="autofill_read_only_save">No se permite guardar datos en una base de datos abierta como de sólo lectura.</string>
<string name="autofill_block_restart">Reiniciar la aplicación que contiene el formulario para activar el bloqueo.</string>
<string name="autofill_web_domain_blocklist_summary">Lista de bloqueo que impide el llenado automático de los dominios web</string>
@@ -509,7 +509,7 @@
<string name="keyboard_previous_lock_summary">Cambiar automáticamente al teclado anterior después de bloquear la base de datos</string>
<string name="keyboard_previous_lock_title">Bloquear la base de datos</string>
<string name="keyboard_previous_fill_in_summary">Cambiar automáticamente al teclado anterior después de ejecutar \"Acción de la tecla automática\"</string>
<string name="keyboard_previous_fill_in_title">Acción de la tecla automática</string>
<string name="keyboard_previous_fill_in_title">Volver atrás</string>
<string name="keyboard_previous_database_credentials_summary">Cambiar automáticamente al teclado anterior en la pantalla de credenciales de la base de datos</string>
<string name="keyboard_previous_database_credentials_title">Pantalla de credenciales de la base de datos</string>
<string name="keyboard_auto_go_action_title">Acción de la tecla automática</string>
@@ -604,7 +604,7 @@
<string name="warning_database_info_reloaded">La recarga de la base de datos borrará los datos modificados localmente.</string>
<string name="warning_keyfile_integrity">El hash del archivo no está garantizado porque Android puede cambiar sus datos sobre la marcha. Cambia la extensión del archivo a .bin para una correcta integridad.</string>
<string name="enable_keep_screen_on_title">Mantener la pantalla encendida</string>
<string name="enable_keep_screen_on_summary">Mantenga la pantalla encendida cuando vea la entrada</string>
<string name="enable_keep_screen_on_summary">Mantén la pantalla encendida cuando veas o edites una entrada</string>
<string name="enable_screenshot_mode_title">Modo captura de pantalla</string>
<string name="enable_screenshot_mode_summary">Permitir que otras aplicaciones graben o tomen capturas de pantalla de la aplicación</string>
<string name="show_entry_colors_summary">Muestra los colores de primer y segundo plano de una entrada</string>
@@ -669,4 +669,25 @@
<string name="waiting_challenge_request">Esperando solicitud de desafío…</string>
<string name="waiting_challenge_response">Esperando respuesta al desafío…</string>
<string name="merge_success">Fusión finalizada con éxito</string>
</resources>
<string name="info">Información</string>
<string name="menu_app_settings_summary">Buscar, bloquear, historial, propiedades</string>
<string name="menu_form_filling_settings_summary">Teclado, autocompletar, portapapeles</string>
<string name="menu_database_settings_summary">Metadatos, papelera de reciclaje, plantillas, historial</string>
<string name="menu_advanced_unlock_settings_summary">Biometría, credencial del dispositivo</string>
<string name="menu_security_settings_summary">Cifrado, función de derivación de las claves</string>
<string name="master_key_settings_summary">Cambio, renovación</string>
<string name="warning_database_notification_permission">El permiso de notificación te permite mostrar el estado de la base de datos y bloquearla con un botón de fácil acceso.
\n
\nSi no activas este permiso, la base de datos abierta en segundo plano no será visible si hay otra aplicación en primer plano.</string>
<string name="warning_copy_permission">El permiso de notificación es necesario para utilizar la función de notificaciones para el portapapeles.</string>
<string name="later">Más tarde</string>
<string name="ask">Preguntar</string>
<string name="configure">Configurar</string>
<string name="unlock_and_link_biometric">Enlace de desbloqueo del dispositivo</string>
<string name="menu_appearance_settings_summary">Temas, colores, atributos</string>
<string name="unlock">Desbloquear</string>
<string name="education_validate_entry_title">Validar la entrada</string>
<string name="education_validate_entry_summary">No olvides validar tu entrada y guardar tu base de datos.
\n
\nSi se activa un bloqueo automático y olvidas que estabas haciendo una modificación, corres el riesgo de perder tus datos.</string>
</resources>

View File

@@ -159,7 +159,7 @@
<string name="configure_biometric">Aucune information didentification biométrique ou de périphérique nest enregistrée.</string>
<string name="encrypted_value_stored">Mot de passe chiffré stocké</string>
<string name="database_history">Historique</string>
<string name="unavailable">Cette base de données na pas encore stocké didentifiants.</string>
<string name="unavailable">Indisponible</string>
<string name="menu_appearance_settings">Apparence</string>
<string name="general">Général</string>
<string name="autofill">Remplissage automatique</string>
@@ -262,17 +262,17 @@
</string-array>
<string name="style_choose_title">Thème de lapplication</string>
<string name="style_choose_summary">Thème utilisé dans lapplication</string>
<string-array name="list_style_names">
<item>Forêt</item>
<item>Divin</item>
<item>Classique</item>
<item>Simple</item>
<item>Lune</item>
<item>Soleil</item>
<item>Réponse</item>
<item>Kunzite</item>
<item>Suivre le système</item>
</string-array>
<string name="style_name_forest">Forêt</string>
<string name="style_name_divine">Divin</string>
<string name="style_name_classic">Classique</string>
<string name="style_name_simple">Simple</string>
<string name="style_name_moon">Lune</string>
<string name="style_name_sun">Soleil</string>
<string name="style_name_reply">Réponse</string>
<string name="style_name_kunzite">Kunzite</string>
<string name="style_name_follow_system">Suivre le système</string>
<string name="style_name_light">Lumière</string>
<string name="style_name_dark">Ombre</string>
<string name="icon_pack_choose_title">Collection dicônes</string>
<string name="icon_pack_choose_summary">Collection dicônes utilisées dans lapplication</string>
<string name="menu_copy">Copier</string>
@@ -403,7 +403,7 @@
<string name="settings_database_force_changing_master_key_next_time_title">Forcer le renouvellement la prochaine fois</string>
<string name="settings_database_force_changing_master_key_next_time_summary">Nécessite de changer la clé principale la prochaine fois (une seule fois)</string>
<string name="database_default_username_title">Nom dutilisateur par défaut</string>
<string name="database_custom_color_title">Couleur de la base de données</string>
<string name="database_custom_color_title">Couleur customisée de la base de données</string>
<string name="compression">Compression</string>
<string name="compression_none">Aucune</string>
<string name="compression_gzip">Gzip</string>
@@ -509,7 +509,7 @@
<string name="device_credential">Identifiant de l\'appareil</string>
<string name="credential_before_click_advanced_unlock_button">Tapez le mot de passe, puis cliquez sur ce bouton.</string>
<string name="advanced_unlock_prompt_not_initialized">Impossible d\'initialiser l\'invite de déverrouillage avancé.</string>
<string name="advanced_unlock_scanning_error">Erreur de déverrouillage avancé: %1$s</string>
<string name="advanced_unlock_scanning_error">Erreur de déverrouillage avancé : %1$s</string>
<string name="advanced_unlock_not_recognized">Impossible de reconnaître l\'empreinte de déverrouillage de l\'appareil</string>
<string name="advanced_unlock_invalid_key">Impossible de lire la clé de déverrouillage de l\'appareil. Veuillez la supprimer et répéter la procédure de reconnaissance de déverrouillage.</string>
<string name="advanced_unlock_prompt_extract_credential_message">Extraire les identifiants de la base de données avec des données de déverrouillage de l\'appareil</string>

View File

@@ -12,8 +12,8 @@
<string name="menu_showpass">Tampilkan Kata Sandi</string>
<string name="menu_search">Cari</string>
<string name="menu_open">Buka</string>
<string name="menu_save_database">Simpan Database</string>
<string name="menu_lock">Basisdata Terkunci</string>
<string name="menu_save_database">Simpan data</string>
<string name="menu_lock">Basis Data Terkunci</string>
<string name="menu_hide_password">Sembunyikan Kata Sandi</string>
<string name="menu_cancel">Batal</string>
<string name="menu_delete">Hapus</string>
@@ -25,7 +25,7 @@
<string name="menu_master_key_settings">Pengaturan Kunci Utama</string>
<string name="menu_security_settings">Pengaturan Keamanan</string>
<string name="menu_app_settings">Pengaturan Aplikasi</string>
<string name="menu_database_settings">Pengaturan Basisdata</string>
<string name="menu_database_settings">Pengaturan Basis Data</string>
<string name="menu_advanced_unlock_settings">Membuka kunci perangkat</string>
<string name="menu_form_filling_settings">Pengisian Formulir</string>
<string name="settings">Pengaturan</string>
@@ -68,7 +68,7 @@
<string name="error_otp_secret_key">Kunci rahasia harus dalam format Base32.</string>
<string name="error_save_database">Tidak dapat menyimpan basis data.</string>
<string name="error_create_database_file">Tidak bisa membuat basis data dengan kata sandi dan file kunci ini.</string>
<string name="error_create_database">Tidak bisa membuat berkas database.</string>
<string name="error_create_database">Tidak bisa membuat berkas basis data.</string>
<string name="error_copy_group_here">Anda tidak bisa menyalin grup di sini.</string>
<string name="error_copy_entry_here">Anda tidak dapat menyalin entri di sini.</string>
<string name="error_move_entry_here">Anda tidak dapat memindahkan sebuah entri ke sini.</string>
@@ -93,7 +93,7 @@
<string name="entry_add_attachment">Tambahkan Lampiran</string>
<string name="digits">Dijit</string>
<string name="app_timeout_summary">Waktu idle sebelum mengunci basis data</string>
<string name="file_manager_install_description">Manajer file yang menerima ACTION_CREATE_DOCUMENT ACTION_OPEN_DOCUMENT izin diperlukan untuk membuat, membuka, dan menyimpan file database.</string>
<string name="file_manager_install_description">Manajer file yang menerima ACTION_CREATE_DOCUMENT ACTION_OPEN_DOCUMENT izin diperlukan untuk membuat, membuka, dan menyimpan file basis data.</string>
<string name="otp_type">Jenis OTP</string>
<string name="entry_setup_otp">Penyiapan Sandi Sekali Pakai (OTP)</string>
<string name="error_can_not_handle_uri">Tidak bisa menangani URI ini di KeePassDX.</string>
@@ -131,7 +131,7 @@
\nTersedia apa adanya, di bawah lisensi &lt;strong&gt;GPLv3&lt;/strong&gt;, tanpa jaminan apa pun.</string>
<string name="default_checkbox">Gunakan sebagai basis data standar</string>
<string name="decrypting_db">Mendekripsi konten basis data…</string>
<string name="database">BasisData</string>
<string name="database">Basis Data</string>
<string name="select_to_copy">Pilih untuk menyalin %1$s ke papan klip</string>
<string name="content_description_keyboard_close_fields">Tutup Bidang</string>
<string name="content_description_remove_from_list">Buang</string>
@@ -175,7 +175,7 @@
<string name="feedback">Umpan Balik</string>
<string name="contribution">Kontribusi</string>
<string name="contact">Kontak</string>
<string name="auto_focus_search_summary">Minta pencarian saat membuka database</string>
<string name="auto_focus_search_summary">Minta pencarian saat membuka basis data</string>
<string name="auto_focus_search_title">Pencarian cepat</string>
<string name="create_keepass_file">Membuat brankas baru</string>
<string name="select_database_file">Buka brankas yang ada</string>
@@ -190,11 +190,11 @@
<string name="show_recent_files_title">Tampilkan file sebelumnya</string>
<string name="remember_keyfile_locations_summary">Melacak di mana file kunci disimpan</string>
<string name="remember_keyfile_locations_title">Ingat lokasi file kunci</string>
<string name="remember_database_locations_summary">Melacak di mana database disimpan</string>
<string name="remember_database_locations_summary">Melacak di mana basis data disimpan</string>
<string name="remember_database_locations_title">Ingat lokasi basis data</string>
<string name="selection_mode">Mode seleksi</string>
<string name="contains_duplicate_uuid_procedure">Selesaikan masalah dengan menghasilkan UUID baru, lanjutkan\?</string>
<string name="contains_duplicate_uuid">Basisdata berisi UUIDs duplikat.</string>
<string name="contains_duplicate_uuid">Basis data berisi UUID yang terduplikat.</string>
<string name="read_only_warning">Tergantung pada manajer file Anda, KeePassDX mungkin tidak diizinkan untuk menulis di penyimpanan Anda.</string>
<string name="read_only">Terlindung dari penulisan</string>
<string name="protection">Perlindungan</string>
@@ -219,7 +219,7 @@
<string name="warning_empty_keyfile">Tidak disarankan menambah keyfile kosong.</string>
<string name="warning_sure_remove_data">Hapus data ini\?</string>
<string name="warning">Peringatan</string>
<string name="unsupported_db_version">Versi database tidak di dukung.</string>
<string name="unsupported_db_version">Versi basis data tidak didukung.</string>
<string name="search">Cari</string>
<string name="sort_last_access_time">Akses</string>
<string name="sort_last_modify_time">Modifikasi</string>
@@ -241,19 +241,19 @@
<string name="keystore_not_accessible">Keystore tidak diinisialisasi dengan benar.</string>
<string name="biometric_security_update_required">Pembaruan keamanan biometrik diperlukan.</string>
<string name="configure_biometric">Tidak ada kredensial biometrik atau perangkat yang terdaftar.</string>
<string name="warning_remove_unlinked_attachment">Menghapus data yang tidak tertaut dapat mengurangi ukuran database Anda, tetapi juga dapat menghapus data yang digunakan untuk plugin KeePass.</string>
<string name="warning_remove_unlinked_attachment">Menghapus data yang tidak tertaut dapat mengurangi ukuran basis data Anda, tetapi juga dapat menghapus data yang digunakan untuk plugin KeePass.</string>
<string name="warning_sure_add_file">Tetap tambahkan berkas\?</string>
<string name="warning_replace_file">Mengunggah berkas ini akan menggantikan berkas yang ada.</string>
<string name="warning_file_too_big">Database KeePass seharusnya hanya berisi file utilitas kecil (seperti file kunci PGP).
<string name="warning_file_too_big">Basis data KeePass seharusnya hanya berisi file utilitas kecil (seperti file kunci PGP).
\n
\nDatabase Anda mungkin menjadi sangat besar dan mengurangi kinerja dengan unggahan ini.</string>
\nBasis data Anda mungkin menjadi sangat besar dan mengurangi kinerja dengan unggahan ini.</string>
<string name="warning_empty_recycle_bin">Hapus permanen semua node dari keranjang sampah\?</string>
<string name="advanced_unlock_tap_delete">Ketuk untuk menghapus tombol pembuka kunci lanjutan</string>
<string name="advanced_unlock">Buka kunci lanjutan</string>
<string name="advanced_unlock_tap_delete">Ketuk untuk menghapus tombol pembuka kunci perangkat</string>
<string name="advanced_unlock">Buka kunci perangkat</string>
<string name="content">Konten</string>
<string name="lock_database_show_button_summary">Tampilkan tombol kunci di antarmuka pengguna</string>
<string name="lock_database_show_button_title">Tampilkan tombol kunci</string>
<string name="lock_database_back_root_summary">Kunci database saat pengguna mengklik tombol kembali di layar root</string>
<string name="lock_database_back_root_summary">Kunci basis data saat pengguna mengklik tombol kembali di layar root</string>
<string name="lock_database_back_root_title">Tekan \'Kembali\' untuk mengunci</string>
<string name="lock_database_screen_off_summary">Kunci basis data setelah beberapa detik ketika layar mati</string>
<string name="lock_database_screen_off_title">Kunci layar</string>
@@ -263,14 +263,14 @@
<string name="clipboard_notifications_title">Pemberitahuan papan klip</string>
<string name="clipboard_explanation_summary">Salin kolom entri menggunakan papan klip perangkat Anda</string>
<string name="clipboard">Papan klip</string>
<string name="database_opened">Database dibuka</string>
<string name="database_opened">Basis data dibuka</string>
<string name="list_password_generator_options_summary">Atur karakter pembuat kata sandi yang diperbolehkan</string>
<string name="list_password_generator_options_title">Karakter kata sandi</string>
<string name="password_size_summary">Setel ukuran default kata sandi yang dihasilkan</string>
<string name="password_size_title">Ukuran kata sandi yang dihasilkan</string>
<string name="database_data_remove_unlinked_attachments_summary">Menghapus lampiran yang terdapat dalam database tetapi tidak ditautkan ke entri</string>
<string name="database_data_remove_unlinked_attachments_summary">Menghapus lampiran yang terdapat dalam basis data tetapi tidak ditautkan ke entri</string>
<string name="database_data_remove_unlinked_attachments_title">Hapus data yang tidak tertaut</string>
<string name="database_data_compression_summary">Kompresi data mengurangi ukuran database</string>
<string name="database_data_compression_summary">Kompresi data mengurangi ukuran basis data</string>
<string name="database_data_compression_title">Kompresi data</string>
<string name="data">Data</string>
<string name="assign_master_key">Tetapkan kunci master</string>
@@ -296,7 +296,7 @@
<string name="unit_kibibyte">KiB</string>
<string name="unit_byte">B</string>
<string name="show_uuid_summary">Tampilkan UUID yang ditautkan ke entri atau grup</string>
<string name="warning_password_encoding">Hindari karakter kata sandi di luar format pengkodean teks dalam file database (karakter yang tidak dikenal dikonversi ke huruf yang sama).</string>
<string name="warning_password_encoding">Hindari karakter kata sandi di luar format pengkodean teks dalam file basis data (karakter yang tidak dikenal dikonversi ke huruf yang sama).</string>
<string name="uppercase">Huruf besar</string>
<string name="sort_creation_time">Penciptaan</string>
<string name="sort_ascending">Terendah pertama ↓</string>
@@ -311,9 +311,9 @@
<string name="search_mode">Mode pencarian</string>
<string name="menu_keystore_remove_key">Menghapus kunci buka kunci perangkat</string>
<string name="menu_reload_database">Muat ulang data</string>
<string name="error_database_uri_null">URI database tidak dapat diambil.</string>
<string name="error_database_uri_null">URI basis data tidak dapat diambil.</string>
<string name="error_field_name_already_exists">Nama bidang sudah ada.</string>
<string name="error_registration_read_only">Menyimpan item baru tidak diperbolehkan dalam database read-only</string>
<string name="error_registration_read_only">Menyimpan item baru tidak diperbolehkan dalam basis data hanya-baca</string>
<string name="error_otp_type">Tipe OTP yang ada tidak dikenali oleh formulir ini, validasinya mungkin tidak lagi menghasilkan token dengan benar.</string>
<string name="content_description_credentials_information">Info kredensial</string>
<string name="autofill_inline_suggestions_keyboard">Saran pengisian otomatis ditambahkan.</string>
@@ -328,17 +328,17 @@
<string name="autofill_save_search_info_summary">Cobalah untuk menyimpan informasi pencarian saat membuat pilihan entri manual untuk penggunaan mudah di waktu mendatang</string>
<string name="autofill_save_search_info_title">Simpan info pencarian</string>
<string name="autofill_inline_suggestions_title">Saran sebaris</string>
<string name="autofill_close_database_summary">Menutup database setelah pilihan isi-auto</string>
<string name="autofill_close_database_title">Tutup database</string>
<string name="autofill_close_database_summary">Tutup basis data setelah pengisian otomatis pada pilihan</string>
<string name="autofill_close_database_title">Tutup basis data</string>
<string name="enter">Enter</string>
<string name="backspace">Hapus</string>
<string name="select_entry">Pilih entri</string>
<string name="back_to_previous_keyboard">Kembali ke papan tik sebelumnya</string>
<string name="custom_fields">Bidang kustom</string>
<string name="keyboard_previous_lock_title">Kunci database</string>
<string name="keyboard_previous_lock_title">Kunci basis data</string>
<string name="keyboard_auto_go_action_title">Aksi tombol otomatis</string>
<string name="keyboard_keys_category">Tombol</string>
<string name="keyboard_previous_database_credentials_title">Layar kredensial database</string>
<string name="keyboard_previous_database_credentials_title">Layar kredensial basis data</string>
<string name="keyboard_change">Ganti papan tik</string>
<string name="keyboard_key_sound_title">Tombol terdengar</string>
<string name="keyboard_key_vibrate_title">Getar saat menekan tombol</string>
@@ -350,7 +350,7 @@
<string name="keyboard_notification_entry_content_title_text">Entri</string>
<string name="keyboard_entry_timeout_summary">Waktu habis untuk menghapus entri papan tik</string>
<string name="keyboard_entry_timeout_title">Waktu habis</string>
<string name="keyboard_notification_entry_clear_close_summary">Tutup database saat menutup notifikasi</string>
<string name="keyboard_notification_entry_clear_close_summary">Tutup basis data saat menutup notifikasi</string>
<string name="keyboard_notification_entry_clear_close_title">Bersihkan saat menutup</string>
<string name="keyboard_notification_entry_summary">Tampilkan notifikasi ketika entri tersedia</string>
<string name="keyboard_notification_entry_title">Info notifikasi</string>
@@ -390,10 +390,10 @@
<string name="education_field_copy_title">Salin bidang</string>
<string name="education_setup_OTP_title">Atur OTP</string>
<string name="education_donation_title">Partisipasi</string>
<string name="advanced_unlock_prompt_extract_credential_title">Buka basis data dengan pengenalan pembuka kunci tingkat lanjut</string>
<string name="advanced_unlock_prompt_store_credential_message">Anda tetap harus mengingat kata sandi utama Anda jika Anda menggunakan pengenalan pembukaan kunci tingkat lanjut.</string>
<string name="advanced_unlock_prompt_extract_credential_title">Pengenalan pembuka kunci perangkat</string>
<string name="advanced_unlock_prompt_store_credential_message">Anda masih perlu mengingat kredensial utama vault Anda jika Anda menggunakan pengenalan kunci perangkat.</string>
<string name="warning_database_revoked">Akses ke berkas dicabut oleh pengelola berkas, tutup basis data dan buka kembali dari lokasi tempatnya.</string>
<string name="warning_database_info_changed_options">Gabungkan data, timpa perubahan dengan cara menyimpan database atau muat ulang dengan perubahan terbaru.</string>
<string name="warning_database_info_changed_options">Gabungkan data, timpa perubahan dengan cara menyimpan basis data atau muat ulang dengan perubahan terbaru.</string>
<string name="warning_database_info_changed">Informasi yang tersimpan di berkas basis data Anda sudah diubah di luar aplikasi.</string>
<string name="warning_no_encryption_key">Lanjut tanpa kunci enkripsi\?</string>
<string name="warning_empty_password">Lanjut tanpa proteksi buka kunci dengan kata sandi\?</string>
@@ -414,11 +414,11 @@
<string name="device_credential_unlock_enable_title">Membuka kredensial perangkat</string>
<string name="biometric_unlock_enable_summary">Memperbolehkan Anda memindai biometrik Anda untuk membuka basis data</string>
<string name="biometric_unlock_enable_title">Membuka kunci biometrik</string>
<string name="advanced_unlock_explanation_summary">Gunakan buka kunci lanjutan untuk membuka database dengan lebih mudah</string>
<string name="unavailable">Basis data ini belum menyimpan kredensial.</string>
<string name="advanced_unlock_not_recognized">Tidak dapat mengenali cetakan buka kunci lanjutan</string>
<string name="advanced_unlock_invalid_key">Tidak dapat membaca kunci pembuka lanjutan. Harap hapus dan ulangi prosedur pengenalan buka kunci.</string>
<string name="advanced_unlock_prompt_extract_credential_message">Ekstrak kredensial basis data dengan pembuka kunci data lanjutan</string>
<string name="advanced_unlock_explanation_summary">Gunakan buka kunci perangkat untuk membuka basis data dengan lebih mudah</string>
<string name="unavailable">Tidak tersedia</string>
<string name="advanced_unlock_not_recognized">Tidak dapat mengenali cetakan buka kunci perangkat</string>
<string name="advanced_unlock_invalid_key">Tidak dapat membaca kunci pembuka perangkat. Harap hapus dan ulangi prosedur pengenalan buka kunci.</string>
<string name="advanced_unlock_prompt_extract_credential_message">Ekstrak kredensial basis data dengan pembuka kunci data perangkat</string>
<string name="error_word_reserved">Kata ini telah dipakai dan tidak bisa digunakan.</string>
<string name="credential_before_click_advanced_unlock_button">Ketik kata sandi, lalu klik tombol ini.</string>
<string name="autofill_service_name">Isi formulir KeePassDX otomatis</string>
@@ -461,14 +461,14 @@
<string name="menu_external_icon">Ikon eksternal</string>
<string name="holder">Penyangga</string>
<string name="autofill_select_entry">Pilih entri…</string>
<string name="biometric_auto_open_prompt_summary">Secara otomatis meminta buka kunci lanjutan jika basis data diatur menggunakan itu</string>
<string name="temp_advanced_unlock_enable_title">Buka kunci lanjutan sementara</string>
<string name="temp_advanced_unlock_enable_summary">Jangan simpan konten terenkripsi apa pun untuk menggunakan buka kunci lanjutan</string>
<string name="temp_advanced_unlock_timeout_summary">Durasi penggunaan buka kunci lanjutan sebelum menghapus konten tersebut</string>
<string name="advanced_unlock_timeout">Batas waktu membuka kunci lanjutan</string>
<string name="advanced_unlock_delete_all_key_warning">Hapus semua kunci enkripsi yang terkait pengenalan buka kunci lanjutan\?</string>
<string name="biometric_auto_open_prompt_summary">Secara otomatis meminta buka kunci perangkat jika basis data diatur menggunakan itu</string>
<string name="temp_advanced_unlock_enable_title">Buka kunci perangkat sementara</string>
<string name="temp_advanced_unlock_enable_summary">Jangan simpan konten terenkripsi apa pun untuk menggunakan buka kunci perangkat</string>
<string name="temp_advanced_unlock_timeout_summary">Durasi penggunaan buka kunci perangkat sebelum menghapus konten tersebut</string>
<string name="advanced_unlock_timeout">Batas waktu membuka kunci perangkat</string>
<string name="advanced_unlock_delete_all_key_warning">Hapus semua kunci enkripsi yang terkait pengenalan buka kunci perangkat\?</string>
<string name="templates_group_enable_title">Penggunaan templat</string>
<string name="biometric_delete_all_key_summary">Hapus semua kunci enkripsi yang terkait pengenalan buka kunci lanjutan</string>
<string name="biometric_delete_all_key_summary">Hapus semua kunci enkripsi yang terkait pengenalan buka kunci perangkat</string>
<string name="max_history_items_summary">Batasi jumlah item riwayat per entri</string>
<string name="template_group_name">Templat</string>
<string name="date_of_issue">Tanggal diterbitkan</string>
@@ -480,7 +480,7 @@
<string name="max_history_size_summary">Batasi ukuran riwayat per entri</string>
<string name="max_history_size_title">Ukuran maksimum</string>
<string name="biometric_delete_all_key_title">Hapus kunci enkripsi</string>
<string name="temp_advanced_unlock_timeout_title">Kedaluwarsa pembuka kunci lanjutan</string>
<string name="temp_advanced_unlock_timeout_title">Kedaluwarsa pembuka kunci perangkat</string>
<string name="templates_group_enable_summary">Gunakan templat dinamis untuk mengisi bidang entri</string>
<string name="education_read_only_summary">Ubah mode pembuka untuk sesi.
\n
@@ -526,7 +526,7 @@
<string name="html_text_dev_feature_buy_pro">Dengan membeli versi &lt;strong&gt;pro&lt;/strong&gt;,</string>
<string name="content_description_database_color">Warna basis data</string>
<string name="menu_merge_database">Gabung data</string>
<string name="warning_database_info_reloaded">Memuat ulang database akan menghapus data yang diubah secara lokal.</string>
<string name="warning_database_info_reloaded">Memuat ulang basis data akan menghapus data yang diubah secara lokal.</string>
<string name="warning_keyfile_integrity">Hash file tidak dijamin karena Android dapat mengubah datanya dengan cepat. Ubah ekstensi file menjadi .bin untuk integritas yang benar.</string>
<string name="content_description_entry_foreground_color">Warna latar depan entri</string>
<string name="content_description_entry_background_color">Warna latar belakang entri</string>
@@ -562,7 +562,7 @@
\n
\nGrup (~folder) mengatur entri dalam basis data Anda.</string>
<string name="education_search_summary">Masukkan judul, nama pengguna atau konten bidang lain untuk mengambil kata sandi Anda.</string>
<string name="education_advanced_unlock_title">Pembukaan kunci basis data tingkat lanjut</string>
<string name="education_advanced_unlock_title">Pembukaan kunci basis data perangkat</string>
<string name="education_advanced_unlock_summary">Tautkan kata sandi Anda ke kredensial biometrik atau perangkat yang dipindai untuk membuka kunci basis data Anda dengan cepat.</string>
<string name="education_entry_new_field_title">Tambahkan bidang kustom</string>
<string name="education_entry_new_field_summary">Daftarkan bidang tambahan, tambahkan nilai, dan lindungi secara opsional.</string>
@@ -582,11 +582,11 @@
<string name="upper_case">HURUF BESAR</string>
<string name="title_case">Huruf Judul</string>
<string name="character_count">Jumlah karakter: %1$d</string>
<string name="advanced_unlock_scanning_error">Terjadi kesalahan buka kunci lanjutan: %1$s</string>
<string name="advanced_unlock_prompt_not_initialized">Tidak dapat menginisialisasi prompt buka kunci tingkat lanjut.</string>
<string name="advanced_unlock_scanning_error">Terjadi kesalahan buka kunci perangkat: %1$s</string>
<string name="advanced_unlock_prompt_not_initialized">Tidak dapat menginisialisasi perintah buka kunci perangkat.</string>
<string name="monospace_font_fields_enable_title">Bidang tipe huruf</string>
<string name="keyboard_save_search_info_title">Simpan info terbagi</string>
<string name="keyboard_previous_fill_in_title">Tindakan tombol otomatis</string>
<string name="keyboard_previous_fill_in_title">Ganti kembali</string>
<string name="keyboard_previous_lock_summary">Secara otomatis beralih kembali ke keyboard sebelumnya setelah mengunci basis data</string>
<string name="autofill_inline_suggestions_summary">Coba tampilkan saran pengisian otomatis langsung dari keyboard yang kompatibel</string>
<string name="enable_education_screens_title">Petunjuk pendidikan</string>
@@ -616,10 +616,10 @@
\n
\nBergantung pada implementasi API asli dari sistem operasi, mungkin tidak berfungsi penuh.
\nPeriksa kompatibilitas dan keamanan KeyStore dengan produsen perangkat Anda dan pembuat ROM yang Anda gunakan.</string>
<string name="education_read_only_title">Lindungi database Anda dari penulisan</string>
<string name="education_read_only_title">Lindungi basis data Anda dari penulisan</string>
<string name="keyboard_save_search_info_summary">Coba simpan informasi terbagi ketika membuat sebuah pilihan entri manual untuk penggunaan mudah di waktu mendatang</string>
<string name="enable_read_only_title">Terlindungi-tulis</string>
<string name="enable_keep_screen_on_summary">Jaga layar tetap menyala saat melihat entri</string>
<string name="enable_keep_screen_on_summary">Jaga layar tetap menyala saat melihat atau menyunting sebuah entri</string>
<string name="content_description_hardware_key_checkbox">Kotak centang kunci perangkat keras</string>
<string name="waiting_challenge_request">Menunggu untuk permintaan tantangan…</string>
<string name="waiting_challenge_response">Menunggu untuk tanggapan tantangan…</string>
@@ -652,7 +652,7 @@
<string name="menu_database_settings_summary">Metadata, tempat sampah, templat, riwayat</string>
<string name="menu_security_settings_summary">Enkripsi, fungsi derivasi kunci</string>
<string name="master_key_settings_summary">Perubahan, pembaruan</string>
<string name="warning_database_notification_permission">Izin notifikasi memungkinkan Anda untuk menampilkan status database dan menguncinya dengan tombol yang mudah diakses.
<string name="warning_database_notification_permission">Izin notifikasi memungkinkan Anda untuk menampilkan status basis data dan menguncinya dengan tombol yang mudah diakses.
\n
\nJika Anda tidak mengaktifkan, basis data yang terbuka di latar belakang tidak akan terlihat jika ada aplikasi lain di latar depan.</string>
<string name="warning_copy_permission">Izin pemberitahuan diperlukan untuk menggunakan fitur pemberitahuan papan klip.</string>
@@ -660,4 +660,10 @@
<string name="configure">Atur</string>
<string name="later">Nanti</string>
<string name="unlock_and_link_biometric">Tautan buka kunci perangkat</string>
<string name="education_validate_entry_summary">Ingat untuk memvalidasi entri Anda dan simpan basis data Anda.
\n
\nJika penguncian otomatis diaktifkan dan Anda lupa bahwa Anda sedang membuat perubahan, Anda berisiko kehilangan data Anda.</string>
<string name="menu_appearance_settings_summary">Tema, warna, atribut</string>
<string name="unlock">Buka kunci</string>
<string name="education_validate_entry_title">Validasi entri</string>
</resources>

View File

@@ -468,17 +468,7 @@
</string-array>
<string name="style_choose_title">アプリのテーマ</string>
<string name="style_choose_summary">アプリで使用するテーマ</string>
<string-array name="list_style_names">
<item>Forest</item>
<item>Divine</item>
<item>Classic</item>
<item>Simple</item>
<item>Moon</item>
<item>Sun</item>
<item>Reply</item>
<item>Kunzite</item>
<item>システムに従う</item>
</string-array>
<string name="style_name_follow_system">システムに従う</string>
<string name="icon_pack_choose_title">アイコンパック</string>
<string name="icon_pack_choose_summary">アプリで使用するアイコンパック</string>
<string name="hide_expired_entries_title">有効期限切れのエントリーを非表示にする</string>

View File

@@ -18,81 +18,81 @@
along with KeePassDX. If not, see <http://www.gnu.org/licenses/>.
--><resources>
<string name="about_description">Implementarea Android a managerului de parole KeePass</string>
<string name="accept">Accept</string>
<string name="add_entry">Introduce intrarea</string>
<string name="edit_entry">Editeaza intrarea</string>
<string name="add_group">Aduce grup</string>
<string name="master_key">Cheia generala</string>
<string name="accept">Acceptați</string>
<string name="add_entry">Introduceți intrarea</string>
<string name="edit_entry">Editați intrarea</string>
<string name="add_group">Adăugați un grup</string>
<string name="master_key">Cheia generală</string>
<string name="security">Securitate</string>
<string name="encryption">Criptare</string>
<string name="encryption_algorithm">Algoritm de criptare</string>
<string name="key_derivation_function">Functie derivata a cheii</string>
<string name="key_derivation_function">Funcție de derivare a cheii</string>
<string name="app_timeout">Timeout</string>
<string name="app_timeout_summary">Timpul de asteptare inaintea blocarii bancii de date</string>
<string name="app_timeout_summary">Timpul de așteptare înaintea blocării bazei de date</string>
<string name="application">Aplicație</string>
<string name="brackets">Paranteze patrate</string>
<string name="brackets">Paranteze pătrate</string>
<string name="extended_ASCII">ASCII extins</string>
<string name="file_manager_install_description">Pentru a crea, deschide și salva fișiere de baze de date, este necesar un manager de fișiere care acceptă acțiunea de intenție ACTION_CREATE_DOCUMENT și ACTION_OPEN_DOCUMENT.</string>
<string name="allow">Permite</string>
<string name="clipboard_cleared">Carnetelul din memorie curatat</string>
<string name="clipboard_error_title">Eroare de citire copiere memorie</string>
<string name="clipboard_error">Unele dispozitive nu permit aplicatiei sa foloseasca memoria de citire din carnetel.</string>
<string name="clipboard_error_clear">Nu s-a putut curata memoria carnetelului</string>
<string name="clipboard_timeout">Timp expirat de citire a carnetelului</string>
<string name="clipboard_timeout_summary">Durata de stocare în carnețel (dacă este acceptată de dispozitivul tău)</string>
<string name="content_description_background">In spate</string>
<string name="content_description_open_file">Deschide fisier</string>
<string name="content_description_node_children">Copil nod</string>
<string name="content_description_add_node">Introduce nod</string>
<string name="content_description_add_entry">Introduce o intrare</string>
<string name="content_description_add_group">Aduce un grup</string>
<string name="file_manager_install_description">Un manager de fișiere care acceptă acțiunea intenției ACTION_CREATE_DOCUMENT și ACTION_OPEN_DOCUMENT este necesară pentru a crea, deschide, și salva fișierele bazei de date.</string>
<string name="allow">Permiteți</string>
<string name="clipboard_cleared">Clipboard curățat</string>
<string name="clipboard_error_title">Eroare de Clipboard</string>
<string name="clipboard_error">Unele dispozitive nu permit aplicației sa folosească clipboard-ul.</string>
<string name="clipboard_error_clear">Nu s-a putut curăța clipboard-ul</string>
<string name="clipboard_timeout">Timeout pentru clipboard</string>
<string name="clipboard_timeout_summary">Durata de stocare în clipboard (dacă dispozitivul tău suportă)</string>
<string name="content_description_background">În fundal</string>
<string name="content_description_open_file">Deschide fișier</string>
<string name="content_description_node_children">Nod copil</string>
<string name="content_description_add_node">Adăugați nod</string>
<string name="content_description_add_entry">Introduceți intrarea</string>
<string name="content_description_add_group">Adăugați un grup</string>
<string name="content_description_file_information">Informații despre fișier</string>
<string name="content_description_password_checkbox">Verifica parola</string>
<string name="content_description_keyfile_checkbox">Verifica fisierul cheie</string>
<string name="content_description_repeat_toggle_password_visibility">Repetați pentru a comuta vizibilitatea parolei</string>
<string name="content_description_entry_icon">Pictograma de intrare</string>
<string name="entry_password_generator">Generator de parole</string>
<string name="content_description_password_checkbox">Căsuță de selectare pentru parolă</string>
<string name="content_description_keyfile_checkbox">Căsuță de selectare pentru fișier-cheie</string>
<string name="content_description_repeat_toggle_password_visibility">Repetați comutarea vizibilității parolei</string>
<string name="content_description_entry_icon">Pictogramă de intrare</string>
<string name="entry_password_generator">Generator de parolă</string>
<string name="content_description_password_length">Lungimea parolei</string>
<string name="entry_add_field">Adăugați câmp</string>
<string name="content_description_remove_field">Elimina câmp</string>
<string name="content_description_remove_field">Eliminați câmpul</string>
<string name="content_description_update_from_list">Actualizați</string>
<string name="content_description_remove_from_list">Elimina</string>
<string name="content_description_keyboard_close_fields">Câmpuri închise</string>
<string name="content_description_remove_from_list">Eliminați</string>
<string name="content_description_keyboard_close_fields">Închideți câmpurile</string>
<string name="select_to_copy">Selectați pentru a copia %1$s în clipboard</string>
<string name="retrieving_db_key">Obtinerea cheii bazei de date…</string>
<string name="database">Baza de date</string>
<string name="decrypting_db">Decriptarea continutului bazei de date.…</string>
<string name="retrieving_db_key">Se recuperea cheia bazei de date…</string>
<string name="database">Bază de date</string>
<string name="decrypting_db">Se decriptea conținutul bazei de date.…</string>
<string name="contact">Contact</string>
<string name="contribution">Contributie</string>
<string name="contribution">Contribuție</string>
<string name="feedback">Opinii</string>
<string name="homepage">Pagina acasa</string>
<string name="homepage">Pagina principală</string>
<string name="default_checkbox">Folosiți ca bază de date implicită</string>
<string name="digits">Digits</string>
<string name="digits">Cifre</string>
<string name="entry_accessed">Accesat</string>
<string name="entry_cancel">Anuleaza</string>
<string name="entry_cancel">Anulează</string>
<string name="entry_notes">Note</string>
<string name="entry_confpassword">Confirma parola</string>
<string name="entry_created">Creeat</string>
<string name="entry_expires">Expira</string>
<string name="entry_confpassword">Confirmă parola</string>
<string name="entry_created">Creat</string>
<string name="entry_expires">Expiră</string>
<string name="entry_UUID">UUID</string>
<string name="entry_history">Istoric</string>
<string name="entry_attachments">Atasamente</string>
<string name="entry_keyfile">Fisiercheie</string>
<string name="entry_attachments">Atașamente</string>
<string name="entry_keyfile">Fișier-cheie</string>
<string name="entry_modified">Modificat</string>
<string name="entry_not_found">Nu s-au putut găsi date de intrare.</string>
<string name="entry_password">Parola</string>
<string name="save">Salveaza</string>
<string name="entry_password">Parolă</string>
<string name="save">Salvează</string>
<string name="entry_title">Titlu</string>
<string name="entry_setup_otp">Setați o singură parolă</string>
<string name="otp_type">Tipul OTP</string>
<string name="entry_setup_otp">Setați o parolă unică</string>
<string name="otp_type">Tip OTP</string>
<string name="otp_secret">Secret</string>
<string name="otp_period">Perioada(secunde)</string>
<string name="otp_counter">Numaratoare</string>
<string name="otp_digits">Digiti</string>
<string name="otp_period">Perioadă (secunde)</string>
<string name="otp_counter">Numărătoare</string>
<string name="otp_digits">Cifre</string>
<string name="otp_algorithm">Algoritm</string>
<string name="entry_otp">OTP</string>
<string name="entry_url">URL</string>
<string name="entry_user_name">Nume utilizator</string>
<string name="entry_user_name">Nume de utilizator</string>
<string name="error_arc4">Cifrarea fluxului Arcfour nu este acceptată.</string>
<string name="error_can_not_handle_uri">Nu s-a putut gestiona acest URI în KeePassDX.</string>
<string name="error_file_not_create">Nu s-a putut creea fisierul</string>
@@ -123,7 +123,7 @@
<string name="field_name">Numele domeniului</string>
<string name="field_value">Valoarea câmpului</string>
<string name="file_not_found_content">Nu s-a putut găsi fișierul. Încercați să-l redeschideți din browserul de fișiere.</string>
<string name="file_browser">Browser de fișiere</string>
<string name="file_browser">Manager fișiere</string>
<string name="generate_password">Generați parola</string>
<string name="hint_conf_pass">Confirmă parola</string>
<string name="hint_generated_password">Parola generata</string>
@@ -152,7 +152,7 @@
<string name="settings">Setări</string>
<string name="menu_app_settings">Setările aplicației</string>
<string name="menu_form_filling_settings">Completarea formularului</string>
<string name="menu_advanced_unlock_settings">Deblocare avansată</string>
<string name="menu_advanced_unlock_settings">Deblocare dispozitiv</string>
<string name="menu_database_settings">Setările bazei de date</string>
<string name="menu_security_settings">Setări de securitate</string>
<string name="menu_master_key_settings">Setări cheie master</string>
@@ -165,7 +165,7 @@
<string name="menu_cancel">Anulare</string>
<string name="menu_hide_password">Ascunde parola</string>
<string name="menu_lock">Blocați baza de date</string>
<string name="menu_save_database">Salvați baza de date</string>
<string name="menu_save_database">Salvați datele</string>
<string name="menu_open">Deschide</string>
<string name="menu_search">Căutare</string>
<string name="menu_showpass">Arata parola</string>
@@ -178,15 +178,15 @@
<string name="minus">Minus</string>
<string name="never">Niciodata</string>
<string name="no_results">Nu există Rezultate</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft is &lt;strong&gt;sursa deschisa&lt;/strong&gt; and &lt;strong&gt;fara publicitate&lt;/strong&gt;.
\nEste prevăzut așa cum este, sub &lt;strong&gt;GPLv3&lt;/strong&gt; licenta, fara nici un fel de garantie.</string>
<string name="html_about_contribution">In oridine sa &lt;strong&gt;pastram libertatea noastra&lt;/strong&gt;, &lt;strong&gt;fix bugs&lt;/strong&gt;, &lt;strong&gt;adăugați funcții&lt;/strong&gt; si&lt;strong&gt;sa fie intotdeauna activ&lt;/strong&gt;, ne bazam pe &lt;strong&gt;contributie&lt;/strong&gt;.</string>
<string name="html_about_licence">KeePassDX © %1$d Kunzisoft este &lt;strong&gt;open-source (sursă deschisă)&lt;/strong&gt; și &lt;strong&gt;fără reclame&lt;/strong&gt;.
\nEste prevăzut așa cum este, sub licența &lt;strong&gt;GPLv3&lt;/strong&gt;, fără nici un fel de garanție.</string>
<string name="html_about_contribution">În ordine să &lt;strong&gt;pastrăm libertatea noastră&lt;/strong&gt;, &lt;strong&gt;fixăm bug-uri&lt;/strong&gt;, &lt;strong&gt;adăugăm funcții&lt;/strong&gt; și&lt;strong&gt;să fie întotdeauna activ&lt;/strong&gt;, ne bazam pe &lt;strong&gt;contribuția&lt;/strong&gt; ta.</string>
<string name="hide_password_title">Ascundeți parolele</string>
<string name="hide_password_summary">Mascați parolele (***) în mod implicit</string>
<string name="about">Despre</string>
<string name="no_url_handler">Instalați un browser web pentru a deschide această adresă URL.</string>
<string name="select_database_file">Deschide baza de date existentă</string>
<string name="create_keepass_file">Creați o bază de date nouă</string>
<string name="select_database_file">Deschideți seiful existentă</string>
<string name="create_keepass_file">Creați un nou seif</string>
<string name="progress_create">Crearea noii baze de date …</string>
<string name="progress_title">Lucrând …</string>
<string name="protection">Protecție</string>
@@ -407,10 +407,10 @@
<string name="hide_expired_entries_summary">Înscrierile expirate vor fi ascunse</string>
<string name="auto_focus_search_title">Căutare rapidă</string>
<string name="auto_focus_search_summary">Solicitați o căutare atunci când deschideți o bază de date</string>
<string name="remember_database_locations_title">Salvați locația bazelor de date</string>
<string name="remember_database_locations_summary">Amintiți-vă locația bazelor de date</string>
<string name="remember_keyfile_locations_title">Salvați locația fișierelor cheie</string>
<string name="remember_keyfile_locations_summary">Amintiți-vă locația bazelor de date cheie de date</string>
<string name="remember_database_locations_title">Amintiți locațiile bazelor de date</string>
<string name="remember_database_locations_summary">Ține evidența locului în care sunt stocate bazele de date</string>
<string name="remember_keyfile_locations_title">Amintiți locațiile fișierelor cheie</string>
<string name="remember_keyfile_locations_summary">Ține evidența locului în care sunt stocate fișierele cheie</string>
<string name="show_recent_files_title">Afișați fișiere recente</string>
<string name="show_recent_files_summary">Afișați locațiile bazelor de date recente</string>
<string name="hide_broken_locations_title">Ascundeți linkurile de bază de date stricate</string>
@@ -419,27 +419,27 @@
<string name="warning_database_link_revoked">Accesul catre fisier eliminat de catre managerul de fisiere</string>
<string name="error_create_database">Imposibil de creeat fisierul bazei de date.</string>
<string name="error_label_exists">Aceasta eticheta exista</string>
<string name="entry_add_attachment">Aduce atasament</string>
<string name="discard">Renunta</string>
<string name="discard_changes">Renunti la schimbari\?</string>
<string name="validate">Valideaza</string>
<string name="content_description_add_item">adaugă un element</string>
<string name="entry_add_attachment">Adăugați atașament</string>
<string name="discard">Renunțați</string>
<string name="discard_changes">Renunțați la schimbări\?</string>
<string name="validate">Validează</string>
<string name="content_description_add_item">Adăugați un element</string>
<string name="content_description_database_color">Culoarea bazei de date</string>
<string name="content_description_entry_foreground_color">Culoarea primului plan</string>
<string name="content_description_entry_background_color">Culoarea de fundal</string>
<string name="debit_credit_card">Card de debit / credit</string>
<string name="holder">Titularul</string>
<string name="holder">Titular</string>
<string name="number">Număr</string>
<string name="card_verification_value">CVV</string>
<string name="name">Nume</string>
<string name="place_of_issue">Locul de eliberare</string>
<string name="date_of_issue">Data eliberării</string>
<string name="email">Email</string>
<string name="email_address">Adresa email</string>
<string name="email_address">Adresă de email</string>
<string name="ssid">SSID</string>
<string name="type">Tip</string>
<string name="cryptocurrency">Portofel de criptomonede</string>
<string name="token">Token</string>
<string name="token">Token (Jeton)</string>
<string name="public_key">Cheie publică</string>
<string name="private_key">Cheie privată</string>
<string name="seed">Sămânță</string>
@@ -452,15 +452,15 @@
<string name="content_description_otp_information">Informații despre parola de unică folosință</string>
<string name="template_group_name">Șabloane</string>
<string name="content_description_credentials_information">Informații despre acreditări</string>
<string name="id_card">Cartă de identitate</string>
<string name="id_card">Carte de identitate</string>
<string name="bank_identifier_code">SWIFT / BIC</string>
<string name="personal_identification_number">PIN</string>
<string name="bank_name">Numele băncii</string>
<string name="account">Cont</string>
<string name="bank">Banca</string>
<string name="bank">Bancă</string>
<string name="international_bank_account_number">IBAN</string>
<string name="expired">Expirat</string>
<string name="custom_data">Date personalizat</string>
<string name="custom_data">Date personalizate</string>
<string name="tags">Etichete</string>
<string name="error_otp_type">Tipul de OTP existent nu este recunoscut de acest formular, este posibil ca validarea acestuia să nu mai genereze corect token-ul.</string>
<string name="error_move_group_here">Nu poți muta grupul aici.</string>
@@ -469,20 +469,70 @@
<string name="error_field_name_already_exists">Numele câmpului există deja.</string>
<string name="navigation_drawer_open">Sertar de navigare deschis</string>
<string name="content_description_passphrase_word_count">Numărul de cuvinte al frazei de siguranță</string>
<string name="html_about_privacy">&lt;strong&gt;Nu se recuperează date de utilizator &lt;/strong&gt;, această aplicație nu se conectează la niciun server, funcționează doar la nivel local și respectă pe deplin confidențialitatea utilizatorilor.</string>
<string name="html_about_privacy">&lt;strong&gt;Nu este colectat datele utilizatorilor &lt;/strong&gt;, această aplicație nu se conectează la niciun server, funcționează doar la local și respectă pe deplin confidențialitatea utilizatorilor.</string>
<string name="current_group">Grup curent</string>
<string name="search_filters">Filtre de căutare</string>
<string name="navigation_drawer_close">Sertar de navigare închis</string>
<string name="content_description_nav_header">Antet de navigare</string>
<string name="inherited">Moștenește</string>
<string name="searchable">Căutabil</string>
<string name="case_sensitive">Caz sensibil</string>
<string name="regex">Expresie regular</string>
<string name="case_sensitive">Sensibil la majuscule</string>
<string name="regex">Expresie regula</string>
<string name="waiting_challenge_request">Se așteaptă pentru cererea de provocare…</string>
<string name="waiting_challenge_response">Se așteaptă pentru un răspuns la provocare…</string>
<string name="content_description_hardware_key_checkbox">Casetă de selectare a cheilor hardware</string>
<string name="content_description_hardware_key_checkbox">Căsuță de selectare a cheii hardware</string>
<string name="hardware_key">Cheie hardware</string>
<string name="auto_type_sequence">Secvență Auto-Type</string>
<string name="error_database_uri_null">URI-ul bazei de date nu poate fi recuperat.</string>
<string name="error_no_hardware_key">Selectează o cheie hardware.</string>
<string name="info">Info</string>
<string name="menu_merge_database">Fuzionați datele</string>
<string name="menu_reload_database">Reîncărcați datele</string>
<string name="save_mode">Mod de salvare</string>
<string name="colorize_password_summary">Colorați caracterele parolei în funcție de tip</string>
<string name="show_uuid_title">Arată UUID</string>
<string name="hint_icon_name">Numele iconiței</string>
<string name="search_mode">Mod de căutare</string>
<string name="wireless">Wi-Fi</string>
<string name="menu_merge_from">Fuzionați din …</string>
<string name="menu_save_copy_to">Salvați o copie în …</string>
<string name="menu_keystore_remove_key">Ștergeți cheia de deblocare a dispozitivului</string>
<string name="error_duplicate_file">Datele din fișier există deja.</string>
<string name="error_remove_file">S-a produs o eroare în timpul eliminării datelor din fișier.</string>
<string name="error_response_already_provided">Răspuns deja furnizat.</string>
<string name="error_hardware_key_unsupported">Cheia hardware nu este suportat(ă).</string>
<string name="error_empty_key">Cheia nu poate fi goală.</string>
<string name="corrupted_file">Fișier coruptat.</string>
<string name="passphrase">Fraza de acces</string>
<string name="colorize_password_title">Colorați parolele</string>
<string name="show_otp_token_summary">Afișează tokenurile OTP în lista de intrări</string>
<string name="show_otp_token_title">Afișați Tokenul OTP</string>
<string name="show_uuid_summary">Afișează UUID-ul legat de o intrare sau de un grup</string>
<string name="menu_app_settings_summary">Căutare, blocare, istoric, proprietăți</string>
<string name="menu_form_filling_settings_summary">Tastatură, completarea automată, clipboard</string>
<string name="menu_advanced_unlock_settings_summary">Biometrie, acreditare din dispozitiv</string>
<string name="menu_database_settings_summary">Metadata, coșul de reciclare, șabloane, istoric</string>
<string name="master_key_settings_summary">Schimbare, reînnoire</string>
<string name="menu_security_settings_summary">Criptare, funcție de derivare a cheilor</string>
<string name="menu_external_icon">Iconiță externă</string>
<string name="subdomain_search_title">Căutare subdomeniu</string>
<string name="subdomain_search_summary">Căutați domenii web cu constrângeri de subdomenii</string>
<string name="import_app_properties_title">Importați proprietățile aplicației</string>
<string name="auto_type">Auto-Scriere</string>
<string name="error_XML_malformed">XML malformat.</string>
<string name="error_rebuild_list">Nu s-a putut reconstrui corect lista.</string>
<string name="error_file_to_big">Fișierul pe care încercați să-o încărcați este prea mare.</string>
<string name="error_upload_file">A apărut o eroare în timpul încărcării datelor din fișier.</string>
<string name="error_start_database_action">A apărut o eroare în timpul efectuării unei acțiuni în baza de date.</string>
<string name="error_challenge_already_requested">Provocare deja solicitată</string>
<string name="error_no_response_from_challenge">Nu s-a reușit să obțină răspunsul la provocare.</string>
<string name="error_cancel_by_user">Anulat de utilizator.</string>
<string name="error_driver_required">Driver-ul pentru %1$s este necesară.</string>
<string name="error_unable_merge_database_kdb">Nu s-a putut fuziona de la o bază de date V1.</string>
<string name="error_location_unknown">Locația bazei de date este necunoscută, acțiunea bazei de date nu poate fi efectuată.</string>
<string name="registration_mode">Mod de înregistrare</string>
<string name="remember_hardware_key_title">Amintiți cheile hardware</string>
<string name="remember_hardware_key_summary">Ține evidența cheilor hardware utilizate</string>
<string name="import_app_properties_summary">Selectați un fișier pentru a importa proprietățile aplicației</string>
<string name="export_app_properties_title">Exportați proprietățile aplicației</string>
</resources>

View File

@@ -230,7 +230,7 @@
<string name="enable_read_only_summary">По умолчанию открывать базу только для чтения</string>
<string name="enable_education_screens_title">Обучающие подсказки</string>
<string name="enable_education_screens_summary">Выделять элементы, чтобы показать, как работает приложение</string>
<string name="reset_education_screens_title">Сбросить обучающие подсказки</string>
<string name="reset_education_screens_title">Вернуть обучающие подсказки</string>
<string name="reset_education_screens_summary">Снова показывать все обучающие подсказки</string>
<string name="reset_education_screens_text">Обучающие подсказки сброшены</string>
<string name="education_create_database_title">Создайте файл базы</string>
@@ -412,10 +412,10 @@
<string name="html_about_contribution">Для &lt;strong&gt;сохранения нашей независимости&lt;/strong&gt;, &lt;strong&gt;исправления ошибок&lt;/strong&gt;, &lt;strong&gt;добавления новых функций&lt;/strong&gt; и &lt;strong&gt;поддержания разработки в активном состоянии&lt;/strong&gt;, мы рассчитываем на вашу &lt;strong&gt;поддержку&lt;/strong&gt;.</string>
<string name="auto_focus_search_title">Быстрый поиск</string>
<string name="auto_focus_search_summary">Открывать поисковый запрос при открытии базы</string>
<string name="remember_database_locations_title">Помнить расположение баз паролей</string>
<string name="remember_database_locations_summary">Помнить расположение файлов баз паролей</string>
<string name="remember_database_locations_title">Помнить расположение баз</string>
<string name="remember_database_locations_summary">Запоминать расположение баз паролей</string>
<string name="remember_keyfile_locations_title">Помнить расположение ключей</string>
<string name="remember_keyfile_locations_summary">Помнить расположение файлов ключей баз паролей</string>
<string name="remember_keyfile_locations_summary">Запоминать расположение файлов ключей к базам паролей</string>
<string name="show_recent_files_title">Показывать последние базы</string>
<string name="show_recent_files_summary">Показывать расположение последних открытых баз</string>
<string name="hide_broken_locations_title">Скрывать отсутствующие</string>
@@ -545,10 +545,10 @@
<string name="error_import_app_properties">Ошибка при импорте настроек приложения</string>
<string name="success_import_app_properties">Настройки приложения импортированы</string>
<string name="description_app_properties">Управление настройками приложения KeePassDX</string>
<string name="export_app_properties_summary">Создать файл настроек приложения</string>
<string name="export_app_properties_summary">Создать резервную копию настроек</string>
<string name="export_app_properties_title">Экспорт настроек</string>
<string name="import_app_properties_summary">Импортировать настройки приложения из файла</string>
<string name="import_app_properties_title">Импорт настроек</string>
<string name="import_app_properties_summary">Выберите резервную копию настроек</string>
<string name="import_app_properties_title">Восстановить настройки</string>
<string name="error_start_database_action">Произошла ошибка при выполнении действия с базой.</string>
<string name="error_move_group_here">Сюда группу переместить невозможно.</string>
<string name="error_word_reserved">Это слово зарезервировано и не может быть использовано.</string>
@@ -657,7 +657,7 @@
<string name="corrupted_file">Файл повреждён.</string>
<string name="error_location_unknown">Расположение базы неизвестно, действие с базой не может быть выполнено.</string>
<string name="remember_hardware_key_title">Помнить аппаратные ключи</string>
<string name="remember_hardware_key_summary">Помнить используемые аппаратные ключи</string>
<string name="remember_hardware_key_summary">Запоминать используемые аппаратные ключи</string>
<string name="screenshot_mode_banner_text">Режим снимка экрана</string>
<string name="enable_screenshot_mode_title">Разрешать снимки экрана</string>
<string name="hardware_key">Аппаратный ключ</string>

View File

@@ -35,6 +35,11 @@
<item name="android:elevation">0dp</item>
</style>
<!-- Action Style -->
<style name="KeepassDXStyle.Toolbar.Action" parent="KeepassDXStyle.Toolbar">
<item name="android:backgroundTint">@color/surface_selector</item>
</style>
<!-- Preference Theme -->
<style name="KeepassDXStyle.Preference.Theme" parent="@style/PreferenceThemeOverlay">
<item name="android:tint">?attr/colorOnSurface</item>

View File

@@ -20,12 +20,10 @@
<resources>
<style name="KeepassDXStyle.Light.v23" parent="KeepassDXStyle.Light.v21" >
<item name="android:statusBarColor">?attr/colorSurface</item>
<item name="android:navigationBarColor">?attr/colorSurface</item>
<item name="android:windowLightStatusBar">true</item>
</style>
<style name="KeepassDXStyle.Night.v23" parent="KeepassDXStyle.Night.v21" >
<item name="android:statusBarColor">?attr/colorSurface</item>
<item name="android:navigationBarColor">?attr/colorSurface</item>
<item name="android:windowLightStatusBar">false</item>
</style>
</resources>

View File

@@ -21,9 +21,11 @@
<style name="KeepassDXStyle.Light.v27" parent="KeepassDXStyle.Light.v23" >
<item name="android:navigationBarColor">?attr/colorSurface</item>
<item name="android:windowLightNavigationBar">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="KeepassDXStyle.Night.v27" parent="KeepassDXStyle.Night.v23" >
<item name="android:navigationBarColor">?attr/colorSurface</item>
<item name="android:windowLightNavigationBar">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
</resources>

View File

@@ -335,7 +335,7 @@
<color name="simple_theme_light_onPrimary">@color/white</color>
<color name="simple_theme_light_primaryContainer">@color/blue_deep</color>
<color name="simple_theme_light_onPrimaryContainer">@color/white_darkest</color>
<color name="simple_theme_light_secondary">@color/blue_deep</color>
<color name="simple_theme_light_secondary">#4F91FF</color>
<color name="simple_theme_light_onSecondary">@color/white</color>
<color name="simple_theme_light_secondaryContainer">#B9DFFF</color>
<color name="simple_theme_light_onSecondaryContainer">#151B2C</color>
@@ -545,7 +545,7 @@
<color name="reply_theme_light_onPrimary">#232F34</color>
<color name="reply_theme_light_primaryContainer">#F9AA33</color>
<color name="reply_theme_light_onPrimaryContainer">#232F34</color>
<color name="reply_theme_light_secondary">#FF9A00</color>
<color name="reply_theme_light_secondary">#E6900A</color>
<color name="reply_theme_light_onSecondary">#232F34</color>
<color name="reply_theme_light_secondaryContainer">#3E5560</color>
<color name="reply_theme_light_onSecondaryContainer">#F6F8FA</color>
@@ -579,7 +579,7 @@
<color name="reply_theme_night_onPrimary">#232F34</color>
<color name="reply_theme_night_primaryContainer">#F9AA33</color>
<color name="reply_theme_night_onPrimaryContainer">#232F34</color>
<color name="reply_theme_night_secondary">#FF9A00</color>
<color name="reply_theme_night_secondary">#DC8400</color>
<color name="reply_theme_night_onSecondary">#232F34</color>
<color name="reply_theme_night_secondaryContainer">#2D3E45</color>
<color name="reply_theme_night_onSecondaryContainer">#F6F8FA</color>
@@ -615,7 +615,7 @@
<color name="purple_theme_light_onPrimary">@color/white</color>
<color name="purple_theme_light_primaryContainer">@color/red</color>
<color name="purple_theme_light_onPrimaryContainer">@color/white</color>
<color name="purple_theme_light_secondary">@color/red</color>
<color name="purple_theme_light_secondary">#A34296</color>
<color name="purple_theme_light_onSecondary">@color/white</color>
<color name="purple_theme_light_secondaryContainer">#8449A8</color>
<color name="purple_theme_light_onSecondaryContainer">@color/white</color>
@@ -649,7 +649,7 @@
<color name="purple_theme_night_onPrimary">@color/white_purple_light</color>
<color name="purple_theme_night_primaryContainer">@color/red_dark</color>
<color name="purple_theme_night_onPrimaryContainer">@color/white</color>
<color name="purple_theme_night_secondary">@color/red</color>
<color name="purple_theme_night_secondary">#8A3C80</color>
<color name="purple_theme_night_onSecondary">@color/white_purple_light</color>
<color name="purple_theme_night_secondaryContainer">#4C186A</color>
<color name="purple_theme_night_onSecondaryContainer">#DED1E8</color>

View File

@@ -320,15 +320,15 @@
<string name="show_recent_files_summary">Show locations of recent databases</string>
<string name="hide_broken_locations_title">Hide broken database links</string>
<string name="hide_broken_locations_summary">Hide broken links in the list of recent databases</string>
<string name="import_app_properties_title">Import app properties</string>
<string name="import_app_properties_summary">Select a file to import app properties</string>
<string name="export_app_properties_title">Export app properties</string>
<string name="export_app_properties_summary">Create a file to export app properties</string>
<string name="import_app_properties_title">Import app settings</string>
<string name="import_app_properties_summary">Select a file to import app settings</string>
<string name="export_app_properties_title">Export app settings</string>
<string name="export_app_properties_summary">Create a file to export app settings</string>
<string name="description_app_properties">KeePassDX properties to manage app settings</string>
<string name="success_import_app_properties">App properties imported</string>
<string name="error_import_app_properties">Error during app properties importation</string>
<string name="success_export_app_properties">App properties exported</string>
<string name="error_export_app_properties">Error during app properties exportation</string>
<string name="success_import_app_properties">App settings imported</string>
<string name="error_import_app_properties">Error during app settings import</string>
<string name="success_export_app_properties">App settings exported</string>
<string name="error_export_app_properties">Error during app settings export</string>
<string name="root">Root</string>
<string name="encryption_explanation">Database encryption algorithm used for all data</string>
<string name="kdf_explanation">To generate the key for the encryption algorithm, the master key is transformed using a randomly salted key derivation function.</string>
@@ -693,23 +693,34 @@
</string-array>
<string name="style_choose_title">App theme</string>
<string name="style_choose_summary">Theme used in the app</string>
<string name="style_name_forest">Forest</string>
<string name="style_name_divine">Divine</string>
<string name="style_name_classic">Classic</string>
<string name="style_name_simple">Simple</string>
<string name="style_name_moon">Moon</string>
<string name="style_name_sun">Sun</string>
<string name="style_name_reply">Reply</string>
<string name="style_name_kunzite">Kunzite</string>
<string name="style_name_follow_system">Follow the system</string>
<string-array name="list_style_names">
<item>Forest</item>
<item>Divine</item>
<item>Classic</item>
<item>Simple</item>
<item>Moon</item>
<item>Sun</item>
<item>Reply</item>
<item>Kunzite</item>
<item>Follow the system</item>
<item>@string/style_name_forest</item>
<item>@string/style_name_divine</item>
<item>@string/style_name_classic</item>
<item>@string/style_name_simple</item>
<item>@string/style_name_moon</item>
<item>@string/style_name_sun</item>
<item>@string/style_name_reply</item>
<item>@string/style_name_kunzite</item>
<item>@string/style_name_follow_system</item>
</string-array>
<string name="style_brightness_title">Theme brightness</string>
<string name="style_brightness_summary">Select light or dark themes</string>
<string name="style_name_light">Light</string>
<string name="style_name_dark">Dark</string>
<string-array name="list_style_brightness_names">
<item>Light</item>
<item>Dark</item>
<item>Follow the system</item>
<item>@string/style_name_light</item>
<item>@string/style_name_dark</item>
<item>@string/style_name_follow_system</item>
</string-array>
<string name="icon_section_standard">Standard</string>
<string name="icon_section_custom">Custom</string>

View File

@@ -29,6 +29,9 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat
<compatibility-package
android:name="alook.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="alook.browser.google"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="app.vanadium.browser"
android:maxLongVersionCode="10000000000"/>
@@ -89,12 +92,24 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat
<compatibility-package
android:name="com.google.android.apps.chrome_dev"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.google.android.captiveportallogin"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.iode.firefox"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.jamal2367.styx"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.kiwibrowser.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.kiwibrowser.browser.dev"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.lemurbrowser.exts"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.microsoft.emmx"
android:maxLongVersionCode="10000000000"/>
@@ -119,12 +134,18 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat
<compatibility-package
android:name="com.naver.whale"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.neeva.app"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.browser.beta"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.gx"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.opera.mini.native"
android:maxLongVersionCode="10000000000"/>
@@ -134,9 +155,15 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat
<compatibility-package
android:name="com.opera.touch"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.qflair.browserq"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.qwant.liberty"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.rainsee.create"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.sec.android.app.sbrowser"
android:maxLongVersionCode="10000000000"/>
@@ -161,6 +188,15 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat
<compatibility-package
android:name="com.yandex.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.yjllq.internet"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.yjllq.kito"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.yujian.ResideMenuDemo"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="com.z28j.feel"
android:maxLongVersionCode="10000000000"/>
@@ -182,6 +218,9 @@ Settings Activity. This is pointed to in the service's meta-data in the applicat
<compatibility-package
android:name="mark.via.gp"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="net.dezor.browser"
android:maxLongVersionCode="10000000000"/>
<compatibility-package
android:name="net.slions.fulguris.full.download"
android:maxLongVersionCode="10000000000"/>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -46,6 +46,7 @@ class Group : Node, GroupVersionedInterface<Group, Entry> {
var isVirtual = false
var numberOfChildEntries: Int = 0
var recursiveNumberOfChildEntries: Int = 0
/**
* Use this constructor to copy a Group
@@ -332,6 +333,18 @@ class Group : Node, GroupVersionedInterface<Group, Entry> {
fun refreshNumberOfChildEntries(filters: Array<ChildFilter> = emptyArray()) {
this.numberOfChildEntries = getFilteredChildEntries(filters).size
this.recursiveNumberOfChildEntries = getFilteredChildEntriesInGroups(filters)
}
/**
* @return the cumulative number of entries in the current group and its children
*/
private fun getFilteredChildEntriesInGroups(filters: Array<ChildFilter>): Int {
var counter = 0
getChildGroups().forEach { childGroup ->
counter += childGroup.getFilteredChildEntriesInGroups(filters)
}
return getFilteredChildEntries(filters).size + counter
}
/**

View File

@@ -2,6 +2,6 @@
* Material You theme (follow system colors) #1469
* Refactoring inner code #1371
* Migration to API 33
# Cut, copy and delete from search #891 #1308 #1263
* Fix behaviors #1351
* Fix bugs #1589 #1584 #1545 #1563 #1371
* Cut, copy and delete from search #891 #1308 #1263
* Fix behaviors #1351 #874 #1327
* Fix bugs #1589 #1584 #1545 #1563 #1371 #1609

View File

@@ -0,0 +1,3 @@
* Fix back lock #1635 #1629 #1634
* Fix lock button in settings #1630
* Improve theme translation #1631

View File

@@ -0,0 +1 @@
* Fix Autofill with API 33

Binary file not shown.

Before

Width:  |  Height:  |  Size: 182 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 234 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 KiB

After

Width:  |  Height:  |  Size: 173 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 179 KiB

View File

@@ -3,5 +3,5 @@
* Refactorisation du code interne #1371
* Migration vers API 33
* Couper, copier et supprimer depuis la recherche #891 #1308 #1263
* Corrections de comportements #1351
* Corrections de bugs #1589 #1584 #1545 #1563 #1371
* Corrections de comportements #1351 #874 #1327
* Corrections de bugs #1589 #1584 #1545 #1563 #1371 #1609

View File

@@ -0,0 +1,3 @@
* Correction du verrouillage de retour #1635 #1629 #1634
* Correction du bouton de verrouillage dans les paramètres #1630
* Amélioration des traductions de thèmes #1631

View File

@@ -0,0 +1 @@
* Correction de l'Autofill avec l'API 33