Compare commits

...

240 Commits

Author SHA1 Message Date
PhilippC
830494851d Merge pull request #2734 from anttiharju/prevent-duplicate-CI-runs
Prevent duplicate CI runs in PRs
2024-12-31 11:34:24 +01:00
anttiharju
6e30dd35ee Prevent duplicate runs in PRs 2024-12-20 08:11:26 +02:00
Philipp Crocoll
dad9b0e53f update minSdk of offline version to 21 (Android 5.0) to simplify the build. 2024-10-22 15:49:08 +02:00
Philipp Crocoll
b2b0b8ddc9 switch to Java 17 in build.yml 2024-10-22 15:23:27 +02:00
Philipp Crocoll
9494f28acf Merge branch 'anttiharju/master' into update-libs-and-tools 2024-10-22 15:11:36 +02:00
Philipp Crocoll
a98cd33cff updating OkHttp, okhttp-digest and dropbox sdk. Removing no longer needed onedrive aar.
I wasn't successful in binding the latest dropbox sdk (7.0) and therefor only updated to 5.4.6 which doesn't require an .aar.
2024-10-22 15:02:10 +02:00
anttiharju
65092dcccf Switch okhttp-digest source to github
as instructed at
https://github.com/rburgst/okhttp-digest?tab=readme-ov-file#use-via-gradle
2024-10-15 22:55:48 +03:00
anttiharju
e464c59796 Downgrade setup-gradle to v3
v3 is node20 and doesn't do validation by default like v4

validation can be disabled in v4 but when that bump is made it's
probably better to resolve the issues rather than ignore them.
2024-10-15 22:48:50 +03:00
anttiharju
7dcccf1105 Bump artifact actions to v4
v4 included breaking changes, but the setup here was compatible
thanks to the usage of `${{ github.job }}`.
https://github.com/actions/upload-artifact/releases/tag/v4.0.0

v3 artifact actions will be deprecated on November 30th
https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/

node16 actions will be EOL on October 15th
https://github.blog/changelog/2024-09-25-end-of-life-for-actions-node16/

These seem contradictory but I _guess_ on self-hosted runners one
can keep using v3 artifact actions until November 30th.
2024-10-13 15:29:45 +03:00
anttiharju
8d354bb3f0 Update actions/setup-java to v4
Just a node20 update
https://github.com/actions/setup-java/releases/tag/v4.0.0
2024-10-13 15:22:50 +03:00
anttiharju
5882263ee8 Bump microsoft/setup-msbuild to v2 for node20
Just a node20 update
https://github.com/microsoft/setup-msbuild/releases/tag/v2
2024-10-13 15:20:33 +03:00
anttiharju
38e305bb4a Pin a third-party action
This is security hardening, see
https://docs.github.com/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions#using-third-party-actions
2024-10-13 15:16:37 +03:00
anttiharju
177b1fc9a3 Update al-cheb/configure-pagefile-action to v1.4
Just a node20 update per
https://github.com/al-cheb/configure-pagefile-action/releases/tag/v1.4
2024-10-13 15:15:11 +03:00
anttiharju
8bde5ed262 Use actions/checkout for fetching submodules 2024-10-13 15:10:36 +03:00
anttiharju
247b37262d Bump actions/cache to v4
Just a node20 update per
https://github.com/actions/cache/releases/tag/v4.0.0
2024-10-13 14:58:18 +03:00
anttiharju
84230b32ef Bump gradle/actions/setup-gradle to v4
It includes caching improvements as described here:
https://github.com/gradle/actions/releases/tag/v4.0.0

windows-2022 includes node20 per
https://github.com/actions/runner-images/blob/main/images/windows/Windows2022-Readme.md#nodejs
2024-10-13 14:56:14 +03:00
anttiharju
a54444e919 Bump gradle-build-action to v3
Gradle v2 uses node16 which will be EOL soon.

"The only major breaking change from gradle-build-action@v2.12.0
is the update to require a Node 20 runtime environment.

Aside from that change, this release should generally serve as a
drop-in replacement for gradle-build-action@v2."

Gradle updated the action name, following the advice from
https://github.com/gradle/gradle-build-action/releases/tag/v3.0.0
2024-10-13 14:42:06 +03:00
anttiharju
4b55e2ce8b Bump checkout from v3 to v4
checkout v3 uses node16 which reaches EOL on 15th of Oct 2024
https://github.blog/changelog/2024-09-25-end-of-life-for-actions-node16/
2024-10-13 14:35:35 +03:00
Philipp Crocoll
5ae718c58e update targetframework for Guava libs 2024-10-08 16:19:24 +02:00
Philipp Crocoll
669022ddf0 update Newtonsoft.Json, FluentFTP and MegaApiClient to the latest versions 2024-10-08 16:07:56 +02:00
Philipp Crocoll
f0fd21a6ec upgrade to Gradle version 8.6 (plugin version 8.4) 2024-10-08 16:03:03 +02:00
Philipp Crocoll
73a8ec27d4 remove no-longer-needed jars from JavaFileStorageBindings 2024-10-08 15:19:23 +02:00
Philipp Crocoll
51902c9bc4 fix build issues related to removal of deprecated OneDrive API jars. onedrive:// is now no longer supported, but has been replaced with onedrive2:// a long time ago already. 2024-10-08 14:59:49 +02:00
PhilippC
32d3abf5d6 Merge pull request #2544 from PhilippC/release-preparation-1-11
Version 1.11-r0
2024-02-20 07:10:16 +01:00
Philipp Crocoll
543eeb69ef manifest for 1.11 2024-02-19 21:07:32 +01:00
PhilippC
ec6e1593b0 Merge pull request #2542 from PhilippC/l10n_master2
New Crowdin updates
2024-02-19 16:18:36 +01:00
PhilippC
ee27bea111 New translations strings.xml (Dutch) 2024-02-19 14:39:34 +01:00
PhilippC
de93b12877 New translations strings.xml (Japanese) 2024-02-19 14:39:33 +01:00
PhilippC
71d2a332c7 New translations strings.xml (German) 2024-02-19 14:38:53 +01:00
PhilippC
37d1481658 Merge pull request #2513 from PhilippC/l10n_master2
New Crowdin updates
2024-02-19 11:45:11 +01:00
PhilippC
a8cc1ad66d New translations strings.xml (Portuguese, Brazilian) 2024-02-16 16:28:07 +01:00
PhilippC
3056ee9d45 New translations strings.xml (Portuguese, Brazilian) 2024-02-16 13:17:44 +01:00
PhilippC
0ec5996c8d New translations strings.xml (Portuguese, Brazilian) 2024-02-16 11:48:14 +01:00
PhilippC
01666d8402 New translations strings.xml (Czech) 2024-02-13 12:46:17 +01:00
PhilippC
422fa01ba1 New translations strings.xml (Czech) 2024-02-13 11:30:21 +01:00
PhilippC
ca9c19e8a9 New translations strings.xml (Turkish) 2024-02-12 16:21:28 +01:00
PhilippC
093f7683b8 New translations strings.xml (German) 2024-02-11 22:31:36 +01:00
PhilippC
d4cf908f4a New translations strings.xml (German) 2024-02-11 21:35:40 +01:00
PhilippC
55d62144fb New translations strings.xml (Portuguese, Brazilian) 2024-02-08 12:03:39 +01:00
PhilippC
c181565aaa New translations strings.xml (Slovenian) 2024-02-07 18:03:13 +01:00
PhilippC
c0c4524562 Merge pull request #2530 from PhilippC/release-preparation-1-11
changelog for version 1.11
2024-02-06 21:46:13 +01:00
PhilippC
eac1803084 New translations strings.xml (German) 2024-02-06 13:47:53 +01:00
PhilippC
58904f1166 New translations strings.xml (German) 2024-02-06 12:09:11 +01:00
Philipp Crocoll
54eb1baee2 changelog for version 1.11 2024-02-06 09:40:54 +01:00
PhilippC
ada01924ba New translations strings.xml (Chinese Simplified) 2024-02-06 04:25:32 +01:00
PhilippC
e38e7df221 Merge pull request #2516 from PhilippC/803--totp-overview
TOTP overview
2024-01-17 18:34:29 +01:00
Philipp Crocoll
fb4ab84ceb Merge branch 'master' of https://github.com/PhilippC/keepass2android into 803--totp-overview 2024-01-17 07:48:06 +01:00
Philipp Crocoll
4475fac51e add missing file for SearchTotpResults, preview TOTPs depending on settings, make TOTP copyable from Entry view
closes #803
2024-01-17 07:46:51 +01:00
Philipp Crocoll
13ef4ca9ff add FAB for TOTP, add activity for showing TOTP entries 2024-01-17 07:35:05 +01:00
Philipp Crocoll
f297ebcd40 * introduce FAB for search
* introduce TOTP preview on PwEntryView

first steps towards #803
2024-01-17 07:07:46 +01:00
PhilippC
a5ef4ccc7a Merge pull request #2514 from PhilippC/1942--fix-text-color-not-themed
Fix bad text color on autofill target preference dialog
2024-01-15 12:30:50 +01:00
Philipp Crocoll
dfd9c32251 Fixes bad text color, closes https://github.com/PhilippC/keepass2android/issues/1942 2024-01-15 11:51:59 +01:00
PhilippC
5397a1c88f New translations strings.xml (Polish) 2024-01-15 09:22:32 +01:00
PhilippC
fdcd4321e0 Merge pull request #2512 from PhilippC/2504--copy-on-longclick
fix merge issue
2024-01-15 08:27:57 +01:00
Philipp Crocoll
11013791ef revert another unintentionally commit change 2024-01-15 08:06:19 +01:00
Philipp Crocoll
6958a2d189 revert unintentionally commited changes to AutofillTest 2024-01-15 07:47:21 +01:00
Philipp Crocoll
94ec8cf1ac fix merge issue 2024-01-15 06:56:32 +01:00
Philipp Crocoll
63631fa81f Merge branch '2504--copy-on-longclick'
# Resolved Conflicts:
#	src/keepass2android/EntryActivity.cs
2024-01-14 21:55:23 +01:00
PhilippC
107d9c6235 Merge pull request #2500 from PhilippC/l10n_master2
New Crowdin updates
2024-01-14 21:52:47 +01:00
PhilippC
8e4ee4f588 Merge pull request #2508 from PhilippC/2507--dialog-behind-keyboard
making activity adjustResize to (hopefully) close #2507
2024-01-14 21:52:39 +01:00
Philipp Crocoll
f0a06faae1 copy text value to clipboard when long-clicking in Entry view. closes #2504 2024-01-14 21:34:19 +01:00
PhilippC
99db263833 Merge branch 'master' into 2507--dialog-behind-keyboard 2024-01-13 11:47:12 +01:00
Philipp Crocoll
e2e42cd177 making activity adjustResize to (hopefully) close #2507 (in some Android versions, it seems like the keyboard from autofill does not get hidden as it should, overlaying the dialog buttons) 2024-01-13 11:45:44 +01:00
PhilippC
a376c6ee0b New translations strings.xml (Japanese) 2024-01-11 14:40:23 +01:00
PhilippC
0326e02ddd New translations strings.xml (Slovenian) 2024-01-09 09:54:12 +01:00
PhilippC
d75482f3bd New translations strings.xml (Dutch) 2024-01-08 13:48:56 +01:00
PhilippC
bca0d042a1 New translations strings.xml (Dutch) 2024-01-08 12:05:55 +01:00
PhilippC
29eaf5f205 New translations strings.xml (Dutch) 2024-01-07 18:14:06 +01:00
PhilippC
78da5e2973 New translations strings.xml (Dutch) 2024-01-07 18:14:05 +01:00
PhilippC
20541618f9 New translations strings.xml (Dutch) 2024-01-07 18:14:04 +01:00
PhilippC
e459d280f2 New translations strings.xml (Dutch) 2024-01-07 17:09:40 +01:00
PhilippC
705e2e4a86 New translations strings.xml (Dutch) 2024-01-07 15:55:10 +01:00
PhilippC
cf9b368afc New translations strings.xml (Dutch) 2024-01-07 14:01:42 +01:00
PhilippC
f1c6a5365c New translations strings.xml (Dutch) 2024-01-07 13:03:09 +01:00
PhilippC
6a61bf6364 New translations strings.xml (Dutch) 2024-01-07 11:14:14 +01:00
PhilippC
814571c746 New translations strings.xml (Dutch) 2024-01-06 21:07:45 +01:00
PhilippC
fc5587260f New translations strings.xml (Dutch) 2024-01-06 19:51:14 +01:00
PhilippC
674ba7bd71 New translations strings.xml (Dutch) 2024-01-06 18:54:57 +01:00
PhilippC
556f82f786 New translations strings.xml (Dutch) 2024-01-06 17:48:44 +01:00
PhilippC
58c5c5882b New translations strings.xml (Chinese Simplified) 2024-01-06 04:27:00 +01:00
PhilippC
a706571e66 New translations strings.xml (Portuguese, Brazilian) 2024-01-05 12:03:52 +01:00
PhilippC
3997b21aec Merge pull request #2502 from PhilippC/totp-improvements
TOTP improvements
2024-01-05 09:28:50 +01:00
Philipp Crocoll
c354612369 catch potential crash when otp data is invalid
closes https://github.com/PhilippC/keepass2android/issues/1602
2024-01-05 09:27:34 +01:00
Philipp Crocoll
4fea731c87 move TOTP field up in EntryActivity and add a progress bar to indicate the time left for using the TOTP
closes https://github.com/PhilippC/keepass2android/issues/2315
2024-01-05 09:01:29 +01:00
Philipp Crocoll
e189776ba9 Merge branch 'master' into totp-improvements 2024-01-05 06:46:04 +01:00
Philipp Crocoll
31255f0c52 move TOTP button on keyboard to third position (after User/Pwd) and disable TOTP "internal fields"
closes #1341
closes #2394
closes #1844
2024-01-04 19:09:24 +01:00
Philipp Crocoll
059280efd0 Introduce preference options to control the behavior when autofilling TOTP entries (show entry notification, activate keyboard, copy TOTP to clipboard)
Required a bit of refactoring to decide when to bring up keyboard selection dialog. Also changed the code so it shows e.g. on Pixel 6a with Android 14, previously did not.
closes #2308
closes #1286 as it now shows up the entry notificaton (unless disabled) and solves the underlying issue in the best found way
2024-01-04 19:06:49 +01:00
Philipp Crocoll
5edc070aa8 show entry notification when autofilling an entry with TOTP (to allow copying TOTP to clipboard)
fixes https://github.com/PhilippC/keepass2android/issues/1272
2024-01-04 08:21:45 +01:00
PhilippC
95843b1134 New translations strings.xml (Dutch) 2024-01-03 23:15:02 +01:00
PhilippC
d2ea9b18a8 New translations strings.xml (Spanish) 2024-01-03 21:44:24 +01:00
PhilippC
828425ab0e New translations strings.xml (Spanish) 2024-01-03 20:48:41 +01:00
PhilippC
4395f422b3 New translations strings.xml (Portuguese, Brazilian) 2024-01-03 11:52:22 +01:00
PhilippC
be2c28811c Merge pull request #2498 from PhilippC/2246--fix-base32-parsing-in-keepass2totp
replace base32 parsing algorithm to fix issue with some TOTP entries using KeePass2 style
2024-01-03 11:27:14 +01:00
Philipp Crocoll
fcc4d44786 replace base32 parsing algorithm to fix issue with some TOTP entries using KeePass2 style
fixes #2020
fixes #2246
2024-01-03 10:17:06 +01:00
PhilippC
337e6324ff Merge pull request #2497 from PhilippC/1248--totp-docs
add TOTP section in Docs
2024-01-03 09:01:45 +01:00
Philipp Crocoll
310143c612 add TOTP section in Docs
closes #1248
2024-01-03 09:00:30 +01:00
PhilippC
49cb33a4da Merge pull request #2496 from PhilippC/2458--seed-only-traytotp-style-entries
make settings field for TrayTotp style otp entries optional
2024-01-03 08:52:22 +01:00
Philipp Crocoll
c934755e1c make settings field for TrayTotp style otp entries optional
closes https://github.com/PhilippC/keepass2android/issues/2458
2024-01-03 08:06:20 +01:00
PhilippC
64355a3da7 Merge pull request #2495 from PhilippC/1949--enable-shared-folders-in-pcloud
update to pcloud 1.9.1 to enable access to shared folders
2024-01-03 06:46:15 +01:00
PhilippC
9579f3bf51 Merge pull request #2463 from PhilippC/l10n_master2
New Crowdin updates
2024-01-03 06:30:55 +01:00
PhilippC
674ae26bd7 Merge pull request #2493 from PhilippC/1327--replace-placeholders-in-more-places
replace placeholder in title for viewing entries and autofill entry a…
2024-01-03 06:30:35 +01:00
PhilippC
d2778e8496 Merge pull request #2494 from PhilippC/2449--ignore-android-settings-for-autofill
ignore Android settings for Autofill, fixes #2449
2024-01-03 06:30:21 +01:00
Philipp Crocoll
cc19e6f326 update to pcloud 1.9.1 to enable access to shared folders
fixes #1949, fixes #2474
fixes https://github.com/pCloud/pcloud-sdk-java/issues/33
2024-01-03 06:29:03 +01:00
Philipp Crocoll
dd7a2718c9 ignore Android settings for Autofill, fixes #2449 2024-01-03 05:50:25 +01:00
PhilippC
9c50d2d98a Merge pull request #2464 from PhilippC/2396--webdav-password-in-logs
avoid passwords appearing in logfiles (#2396)
2024-01-02 21:08:51 +01:00
PhilippC
8ee13acdde Merge pull request #2490 from PhilippC/2488-fix-crash-in-autofill
avoid potentiall null hints in autofill (#2488)
2024-01-02 21:03:30 +01:00
PhilippC
aeda304919 Merge pull request #2492 from PhilippC/2466--reduce-logging
do not log folder name to fix #2466
2024-01-02 21:03:14 +01:00
Philipp Crocoll
9f08e0039b replace placeholder in title for viewing entries and autofill entry as well as in search results, fixes #1327 2024-01-02 21:00:43 +01:00
Philipp Crocoll
dfd101da77 do not log folder name to fix #2466 2024-01-02 16:34:30 +01:00
Philipp Crocoll
f4b5eee171 avoid potentiall null hints in autofill (#2488) 2024-01-02 16:26:02 +01:00
Philipp Crocoll
98e31942e1 remove potential password in logs 2024-01-02 12:40:39 +01:00
PhilippC
385aad8fb0 New translations strings.xml (Portuguese, Brazilian) 2023-12-31 01:42:46 +01:00
PhilippC
3e383d50f8 New translations strings.xml (Portuguese, Brazilian) 2023-12-31 00:44:33 +01:00
PhilippC
8c089a8711 New translations strings.xml (Polish) 2023-12-17 16:05:36 +01:00
PhilippC
098123787d New translations strings.xml (Czech) 2023-12-15 10:06:50 +01:00
PhilippC
a22b8474c3 New translations strings.xml (Polish) 2023-12-11 19:31:51 +01:00
PhilippC
8fc4607a34 New translations strings.xml (Polish) 2023-12-11 18:32:40 +01:00
PhilippC
4b56405960 New translations strings.xml (Portuguese, Brazilian) 2023-12-10 23:11:27 +01:00
PhilippC
c4b41001b3 New translations strings.xml (Portuguese, Brazilian) 2023-12-07 12:13:32 +01:00
PhilippC
cb51be349e New translations strings.xml (Portuguese, Brazilian) 2023-12-03 11:06:26 +01:00
PhilippC
13170bb88c New translations strings.xml (Portuguese, Brazilian) 2023-12-02 14:03:33 +01:00
PhilippC
88a20d947c New translations strings.xml (Portuguese, Brazilian) 2023-12-02 13:07:24 +01:00
PhilippC
4fcc2625c0 New translations strings.xml (Greek) 2023-12-01 12:14:22 +01:00
PhilippC
324cf74a2b New translations strings.xml (Greek) 2023-12-01 10:59:01 +01:00
PhilippC
e3d14221f9 New translations strings.xml (Portuguese, Brazilian) 2023-12-01 00:48:04 +01:00
PhilippC
7d0a43397a New translations strings.xml (Portuguese, Brazilian) 2023-11-30 13:08:04 +01:00
PhilippC
a6d1b26479 New translations strings.xml (Portuguese, Brazilian) 2023-11-30 11:28:31 +01:00
PhilippC
79ad753218 New translations strings.xml (Portuguese, Brazilian) 2023-11-29 13:52:17 +01:00
PhilippC
24ee49ea9f New translations strings.xml (Portuguese, Brazilian) 2023-11-27 12:52:12 +01:00
PhilippC
ab6e8e3685 New translations strings.xml (Portuguese, Brazilian) 2023-11-27 11:08:20 +01:00
PhilippC
81e8820732 New translations strings.xml (Slovenian) 2023-11-24 07:53:52 +01:00
PhilippC
93c72ee04e New translations strings.xml (Chinese Simplified) 2023-11-24 07:53:51 +01:00
PhilippC
8a53357e3d New translations strings.xml (Chinese Simplified) 2023-11-24 06:46:31 +01:00
PhilippC
c12ae13077 New translations strings.xml (Portuguese, Brazilian) 2023-11-21 18:16:54 +01:00
PhilippC
071fc3fd51 New translations strings.xml (Japanese) 2023-11-21 13:38:50 +01:00
Philipp Crocoll
ad6ced3aad addition to last commit: this refers to #2396 2023-11-21 13:33:37 +01:00
Philipp Crocoll
6ef8b8fc3b replace usage of IoConnectionInfo::GetDisplayName() to avoid passwords (as part of the URL) appearing in logfiles 2023-11-21 13:31:54 +01:00
PhilippC
825793f385 New translations strings.xml (Portuguese, Brazilian) 2023-11-21 12:01:55 +01:00
PhilippC
bd6af10fd5 New translations strings.xml (Portuguese, Brazilian) 2023-11-21 10:48:05 +01:00
Philipp Crocoll
2e9400cf4d Manifest and changelog for 1.10-pre 2023-11-21 08:43:54 +01:00
PhilippC
c719043159 New translations strings.xml (Azerbaijani) 2023-11-21 08:12:31 +01:00
PhilippC
c6e32937ce New translations strings.xml (Croatian) 2023-11-21 08:12:29 +01:00
PhilippC
081b77c2bd New translations strings.xml (Persian) 2023-11-21 08:12:28 +01:00
PhilippC
a950298c11 New translations strings.xml (Indonesian) 2023-11-21 08:12:26 +01:00
PhilippC
eafd3bb702 New translations strings.xml (Galician) 2023-11-21 08:12:25 +01:00
PhilippC
0e53f91d01 New translations strings.xml (Chinese Traditional) 2023-11-21 08:12:24 +01:00
PhilippC
96156bf8b9 New translations strings.xml (Ukrainian) 2023-11-21 08:12:23 +01:00
PhilippC
8efc1f3c1f New translations strings.xml (Turkish) 2023-11-21 08:12:22 +01:00
PhilippC
67d20124ff New translations strings.xml (Swedish) 2023-11-21 08:12:21 +01:00
PhilippC
b93739926d New translations strings.xml (Serbian (Cyrillic)) 2023-11-21 08:12:20 +01:00
PhilippC
4afac75bb4 New translations strings.xml (Slovenian) 2023-11-21 08:12:19 +01:00
PhilippC
cea41d1446 New translations strings.xml (Slovak) 2023-11-21 08:12:18 +01:00
PhilippC
dd5b744bfb New translations strings.xml (Russian) 2023-11-21 08:12:17 +01:00
PhilippC
47cbe5b0ab New translations strings.xml (Portuguese) 2023-11-21 08:12:16 +01:00
PhilippC
99950e3c93 New translations strings.xml (Polish) 2023-11-21 08:12:15 +01:00
PhilippC
df8f375b59 New translations strings.xml (Dutch) 2023-11-21 08:12:14 +01:00
PhilippC
fdc213bfc1 New translations strings.xml (Korean) 2023-11-21 08:12:12 +01:00
PhilippC
428b008017 New translations strings.xml (Japanese) 2023-11-21 08:12:11 +01:00
PhilippC
3d4a0a79f9 New translations strings.xml (Italian) 2023-11-21 08:12:10 +01:00
PhilippC
008e55598c New translations strings.xml (Portuguese, Brazilian) 2023-11-21 08:12:09 +01:00
PhilippC
7c3832830e New translations strings.xml (Vietnamese) 2023-11-21 08:12:08 +01:00
PhilippC
c3e234da25 New translations strings.xml (Chinese Simplified) 2023-11-21 08:12:07 +01:00
PhilippC
6ba0b29c77 New translations strings.xml (Hungarian) 2023-11-21 08:12:06 +01:00
PhilippC
b16f747913 New translations strings.xml (Hebrew) 2023-11-21 08:12:05 +01:00
PhilippC
35ac1cf642 New translations strings.xml (Finnish) 2023-11-21 08:12:04 +01:00
PhilippC
5d2da784b9 New translations strings.xml (Basque) 2023-11-21 08:12:03 +01:00
PhilippC
86b225034c New translations strings.xml (Greek) 2023-11-21 08:12:02 +01:00
PhilippC
727cf74201 New translations strings.xml (German) 2023-11-21 08:12:01 +01:00
PhilippC
6f8ae7be34 New translations strings.xml (Danish) 2023-11-21 08:12:00 +01:00
PhilippC
a84d26b151 New translations strings.xml (Catalan) 2023-11-21 08:11:59 +01:00
PhilippC
6f7419e38a New translations strings.xml (Arabic) 2023-11-21 08:11:57 +01:00
PhilippC
bdb11f4873 New translations strings.xml (Spanish) 2023-11-21 08:11:56 +01:00
PhilippC
87603cd9c1 New translations strings.xml (Romanian) 2023-11-21 08:11:55 +01:00
PhilippC
e6cec96504 New translations strings.xml (Czech) 2023-11-21 08:11:54 +01:00
PhilippC
fb478af6c7 New translations strings.xml (Belarusian) 2023-11-21 08:11:53 +01:00
PhilippC
9991964c9b New translations strings.xml (French) 2023-11-21 08:11:51 +01:00
Philipp Crocoll
d761f07fc9 change app-id of pCloud because the previous app couldn't be modified anymore (https://github.com/PhilippC/keepass2android/pull/2388#issuecomment-1799771771) but is not compatible with the latest sdk version 2023-11-21 08:07:39 +01:00
PhilippC
b18515dd8c Merge pull request #2456 from PhilippC/l10n_master2
New Crowdin updates
2023-11-21 08:05:10 +01:00
PhilippC
2677cae5e6 Merge pull request #2457 from hyproman/persist-ftp-debug-perf
Persist ftp debug preference
2023-11-21 07:11:33 +01:00
Philipp Crocoll
cb832c412f improve some source strings (removing superfluous characters) 2023-11-21 07:08:41 +01:00
PhilippC
97018b15f7 New translations strings.xml (Norwegian Bokmal) 2023-11-21 07:04:00 +01:00
PhilippC
6b06d4ba8d New translations strings.xml (Malayalam) 2023-11-21 07:03:58 +01:00
PhilippC
902fc6f6d3 New translations strings.xml (Azerbaijani) 2023-11-21 07:03:57 +01:00
PhilippC
d4fd8db455 New translations strings.xml (Norwegian Nynorsk) 2023-11-21 07:03:56 +01:00
PhilippC
9f1be03dc4 New translations strings.xml (Croatian) 2023-11-21 07:03:55 +01:00
PhilippC
7b863e115f New translations strings.xml (Persian) 2023-11-21 07:03:54 +01:00
PhilippC
06fa5a5fcd New translations strings.xml (Indonesian) 2023-11-21 07:03:53 +01:00
PhilippC
b1837468d7 New translations strings.xml (Galician) 2023-11-21 07:03:52 +01:00
PhilippC
0ffe6cda16 New translations strings.xml (Chinese Traditional) 2023-11-21 07:03:51 +01:00
PhilippC
0ba1e946d1 New translations strings.xml (Ukrainian) 2023-11-21 07:03:50 +01:00
PhilippC
ba2890cc80 New translations strings.xml (Turkish) 2023-11-21 07:03:49 +01:00
PhilippC
ee9750e689 New translations strings.xml (Swedish) 2023-11-21 07:03:47 +01:00
PhilippC
3f358fed38 New translations strings.xml (Serbian (Cyrillic)) 2023-11-21 07:03:46 +01:00
PhilippC
4eb7b4519e New translations strings.xml (Slovenian) 2023-11-21 07:03:45 +01:00
PhilippC
9b61f651c4 New translations strings.xml (Slovak) 2023-11-21 07:03:44 +01:00
PhilippC
c716fa0c12 New translations strings.xml (Russian) 2023-11-21 07:03:43 +01:00
PhilippC
013d69b520 New translations strings.xml (Portuguese) 2023-11-21 07:03:42 +01:00
PhilippC
fec2875e6a New translations strings.xml (Polish) 2023-11-21 07:03:41 +01:00
PhilippC
1a1036f7b8 New translations strings.xml (Dutch) 2023-11-21 07:03:40 +01:00
PhilippC
b9fcf8deda New translations strings.xml (Korean) 2023-11-21 07:03:39 +01:00
PhilippC
a9a88dbdbe New translations strings.xml (Japanese) 2023-11-21 07:03:37 +01:00
PhilippC
d3f505fb55 New translations strings.xml (Italian) 2023-11-21 07:03:36 +01:00
PhilippC
da10ebd2f4 New translations strings.xml (Hungarian) 2023-11-21 07:03:35 +01:00
PhilippC
daeee50e09 New translations strings.xml (Hebrew) 2023-11-21 07:03:34 +01:00
PhilippC
f602367a6c New translations strings.xml (Finnish) 2023-11-21 07:03:33 +01:00
PhilippC
db2ad49f36 New translations strings.xml (Basque) 2023-11-21 07:03:32 +01:00
PhilippC
a782843b29 New translations strings.xml (Greek) 2023-11-21 07:03:31 +01:00
PhilippC
e35babb8eb New translations strings.xml (German) 2023-11-21 07:03:30 +01:00
PhilippC
e6b296c0b9 New translations strings.xml (Danish) 2023-11-21 07:03:28 +01:00
PhilippC
44692afa98 New translations strings.xml (Catalan) 2023-11-21 07:03:27 +01:00
PhilippC
491912a6ab New translations strings.xml (Bulgarian) 2023-11-21 07:03:26 +01:00
PhilippC
5cb02e88bf New translations strings.xml (Arabic) 2023-11-21 07:03:25 +01:00
PhilippC
69ce92a7b7 New translations strings.xml (Spanish) 2023-11-21 07:03:24 +01:00
PhilippC
a09e2656be New translations strings.xml (Romanian) 2023-11-21 07:03:23 +01:00
PhilippC
445923e12c New translations strings.xml (Portuguese, Brazilian) 2023-11-21 07:03:21 +01:00
PhilippC
6499c97206 New translations strings.xml (Vietnamese) 2023-11-21 07:03:20 +01:00
PhilippC
41ef1900a1 New translations strings.xml (Chinese Simplified) 2023-11-21 07:03:19 +01:00
PhilippC
290f61d114 New translations strings.xml (Czech) 2023-11-21 07:03:18 +01:00
PhilippC
11f45c61e8 New translations strings.xml (Belarusian) 2023-11-21 07:03:16 +01:00
PhilippC
ac6df5d10f New translations strings.xml (French) 2023-11-21 07:03:15 +01:00
Philipp Crocoll
206ab3ac42 Merge branch 'master' of https://github.com/PhilippC/keepass2android 2023-11-13 09:55:58 +01:00
PhilippC
33847deb00 Merge pull request #2455 from PhilippC/l10n_master2
New Crowdin updates
2023-11-13 09:54:48 +01:00
PhilippC
baf9a29646 update links from codeplex to github, closes 2454 2023-11-13 09:52:42 +01:00
PhilippC
66166e44a0 New translations strings.xml (Czech) 2023-11-10 15:42:42 +01:00
PhilippC
8ace491d84 New translations strings.xml (French) 2023-11-10 13:52:04 +01:00
PhilippC
39deef4053 New translations strings.xml (Belarusian) 2023-11-08 10:39:24 +01:00
PhilippC
1faa0b06bd New translations strings.xml (French) 2023-11-07 19:30:59 +01:00
PhilippC
1eb1e1cb2b New translations strings.xml (Vietnamese) 2023-11-07 17:23:46 +01:00
PhilippC
d551969b04 New translations strings.xml (Vietnamese) 2023-11-07 14:30:33 +01:00
PhilippC
0f0c1ddbfd New translations strings.xml (Portuguese, Brazilian) 2023-11-07 11:06:02 +01:00
PhilippC
b46f2984a3 New translations strings.xml (Spanish) 2023-11-07 07:00:55 +01:00
PhilippC
cce1e2794e New translations strings.xml (Chinese Simplified) 2023-11-07 02:44:46 +01:00
PhilippC
3d2ae980b7 New translations strings.xml (Slovenian) 2023-11-06 19:56:59 +01:00
PhilippC
a8f4fcde7b New translations strings.xml (Portuguese, Brazilian) 2023-11-06 11:41:33 +01:00
PhilippC
add8b2dad6 New translations strings.xml (Chinese Simplified) 2023-11-06 11:41:29 +01:00
PhilippC
50074d547f New translations strings.xml (Slovenian) 2023-11-06 11:41:25 +01:00
PhilippC
e6b425a30e New translations strings.xml (Slovak) 2023-11-06 11:41:23 +01:00
PhilippC
9af9d34d87 New translations strings.xml (Czech) 2023-11-06 11:41:10 +01:00
PhilippC
4fee92f591 New translations strings.xml (Spanish) 2023-11-06 11:41:05 +01:00
PhilippC
1b658f1c39 New translations strings.xml (French) 2023-11-06 11:41:04 +01:00
158 changed files with 3448 additions and 9181 deletions

View File

@@ -1,6 +1,10 @@
name: Build keepass2android app
on: [push, pull_request]
on:
push:
branches:
- main
pull_request:
jobs:
# macos:
@@ -10,16 +14,15 @@ jobs:
# runs-on: macos-12
# steps:
# - uses: actions/checkout@v3
# - name: Fetch submodules
# run: git submodule init && git submodule update
# - uses: actions/checkout@v4
# with:
# submodules: true
# - name: Setup Gradle
# uses: gradle/gradle-build-action@v2
# uses: gradle/actions/setup-gradle@v3
# - name: Cache NuGet packages
# uses: actions/cache@v3
# uses: actions/cache@v4
# with:
# path: ~/.nuget/packages
# key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }}
@@ -52,7 +55,7 @@ jobs:
# # $VM_ASSETS/select-xamarin-sdk-v2.sh --mono=6.12 --android=11.2
# - name: Switch to JDK-11
# uses: actions/setup-java@v3
# uses: actions/setup-java@v4
# with:
# java-version: '11'
# distribution: 'temurin'
@@ -82,7 +85,7 @@ jobs:
# make apk Flavor=Net
# - name: Archive production artifacts (net)
# uses: actions/upload-artifact@v3
# uses: actions/upload-artifact@v4
# with:
# name: signed APK ('net' built on ${{ github.job }})
# path: |
@@ -100,7 +103,7 @@ jobs:
# make apk Flavor=NoNet
# - name: Archive production artifacts (nonet)
# uses: actions/upload-artifact@v3
# uses: actions/upload-artifact@v4
# with:
# name: signed APK ('nonet' built on ${{ github.job }})
# path: |
@@ -130,16 +133,15 @@ jobs:
# # Build Artifact of xamarin.android-oss dated 2022-02-16, master branch (= version 12.2.99)
# xamarin_url: https://artprodcus3.artifacts.visualstudio.com/Ad0adf05a-e7d7-4b65-96fe-3f3884d42038/6fd3d886-57a5-4e31-8db7-52a1b47c07a8/_apis/artifact/cGlwZWxpbmVhcnRpZmFjdDovL3hhbWFyaW4vcHJvamVjdElkLzZmZDNkODg2LTU3YTUtNGUzMS04ZGI3LTUyYTFiNDdjMDdhOC9idWlsZElkLzU0OTUzL2FydGlmYWN0TmFtZS9pbnN0YWxsZXJzLXVuc2lnbmVkKy0rTGludXg1/content?format=zip
# steps:
# - uses: actions/checkout@v3
# - name: Fetch submodules
# run: git submodule init && git submodule update
# - uses: actions/checkout@v4
# with:
# submodules: true
# - name: Setup Gradle
# uses: gradle/gradle-build-action@v2
# uses: gradle/actions/setup-gradle@v3
# - name: Cache NuGet packages
# uses: actions/cache@v3
# uses: actions/cache@v4
# with:
# path: ~/.nuget/packages
# key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }}
@@ -148,7 +150,7 @@ jobs:
# - name: Cache Xamarin.Android packages
# id: xamarin_cache
# uses: actions/cache@v3
# uses: actions/cache@v4
# with:
# path: ~/xamarin.android-oss
# key: ${{ runner.os }}-xamarin.android-oss-${{ env.xamarin_url }}
@@ -183,7 +185,7 @@ jobs:
# echo "$HOME/xamarin.android-oss/bin/Release/bin" >> $GITHUB_PATH
# - name: Switch to JDK-11
# uses: actions/setup-java@v3
# uses: actions/setup-java@v4
# with:
# java-version: '11'
# distribution: 'temurin'
@@ -217,7 +219,7 @@ jobs:
# make apk Flavor=Net
# - name: Archive production artifacts (net)
# uses: actions/upload-artifact@v3
# uses: actions/upload-artifact@v4
# with:
# name: signed APK ('net' built on ${{ github.job }})
# path: |
@@ -235,7 +237,7 @@ jobs:
# make apk Flavor=NoNet
# - name: Archive production artifacts (nonet)
# uses: actions/upload-artifact@v3
# uses: actions/upload-artifact@v4
# with:
# name: signed APK ('nonet' built on ${{ github.job }})
# path: |
@@ -254,39 +256,38 @@ jobs:
runs-on: windows-2022
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/actions/setup-gradle@v3
- name: Cache NuGet packages
uses: actions/cache@v3
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Fetch submodules
run: git submodule init && git submodule update
# Workaround an issue when building on windows-2022. Error was
# D8 : OpenJDK 64-Bit Server VM warning : INFO: os::commit_memory(0x00000000ae400000, 330301440, 0) failed; error='The paging file is too small for this operation to complete' (DOS error/errno=1455) [D:\a\keepass2android\keepass2android\src\keepass2android\keepass2android-app.csproj]
# C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Xamarin\Android\Xamarin.Android.D8.targets(81,5): error MSB6006: "java.exe" exited with code 1. [D:\a\keepass2android\keepass2android\src\keepass2android\keepass2android-app.csproj]
- name: Configure Pagefile
uses: al-cheb/configure-pagefile-action@v1.3
uses: al-cheb/configure-pagefile-action@a3b6ebd6b634da88790d9c58d4b37a7f4a7b8708 # v1.4
with:
minimum-size: 8GB
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.1
uses: microsoft/setup-msbuild@v2
# If we want to also have nmake, use this instead
#uses: ilammy/msvc-dev-cmd@v1
- name: Switch to JDK-11
uses: actions/setup-java@v3
- name: Switch to JDK-17
uses: actions/setup-java@v4
with:
java-version: '11'
java-version: '17'
distribution: 'temurin'
- name: Display java version
@@ -320,7 +321,7 @@ jobs:
make apk Flavor=Net
- name: Archive production artifacts (net)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: signed APK ('net' built on ${{ github.job }})
path: |
@@ -341,7 +342,7 @@ jobs:
make apk Flavor=NoNet
- name: Archive production artifacts (nonet)
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: signed APK ('nonet' built on ${{ github.job }})
path: |

1
.gitignore vendored
View File

@@ -176,3 +176,4 @@ src/java/Keepass2AndroidPluginSDK2/build/generated/mockable-Google-Inc.-Google-A
/src/ActionViewFilterTest
/docs/gdrive-verification
/src/MegaTest
*.dtbcache.json

View File

@@ -68,6 +68,9 @@ Please see the [How to use Keepass2Android with YubiKey NEO](How-to-use-Keepass2
## Advanced usage of the Keepass2Android keyboard
Please see the [Advanced usage of the Keepass2Android keyboard](Advanced-usage-of-the-Keepass2Android-keyboard.md) page.
## Using Keepass2Android like an authenticator app to generate Time-based One-Time-Passwords (TOTPs)
Please see [Generating TOTPs with Keepass2Android](Generating-TOTPs.md)
# FAQ
## Should I use the KP2A keyboard for entering passwords?

53
docs/Generating-TOTPs.md Normal file
View File

@@ -0,0 +1,53 @@
## TOTP in brief
TOTP stands for [Time-based One-Time Password algorithm](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) which is one of the most common way proposed by websites to do a [two-factor authentication (2FA)](https://en.wikipedia.org/wiki/Multi-factor_authentication).
On these websites, this option will often be mentioned in the 2FA configuration menu as things like "_use code generated by an application_", "_use [Google] Authenticator app_".
You're prompted to scan a QR code with the app, which essentially contains a code called "_seed_", usually with a form like "_AZER TYUI OPQS DFGH JKLM_", used to generate TOTPs. The seed can be also directly copied if there is no scanning option on the app.
Most common apps:
- Google Authenticator
- Authy
- Microsoft Authenticator
- FreeOTP
- LastPass Authenticator
## TOTP in KeePass and benefits
In KeePass (by Dominik Reichl) there is are several ways to enable this Authenticator app ability:
- built-in TOTP support: https://keepass.info/help/base/placeholders.html#otp
- [KeePassOTP plugin](https://keepass.info/plugins.html#kpotp)
- [KeeOtp plugin](https://keepass.info/plugins.html#keeotp)
- [KeeTrayTOTP plugin](https://keepass.info/plugins.html#keetraytotp) (note the name "_TrayTOTP_" on this one for later)
KeePassXC also supports TOTP: https://keepassxc.org/docs/KeePassXC_UserGuide#_adding_totp_to_an_entry
The greatest benefits are:
- the seed stays available contrary to the above apps (for which it's more or less hard to backup/restore/switch with another app)
- TOTPs are available wherever the KeePass database is available. But conceptually it's not really 2FA anymore (all things are stored in the same place).
The different implementations use different ways of storing the TOTP seed (or secret, or key) and optional settings (e.g. the length of the TOTP to generate) within an entry inside the kdbx database. Keepass2Android attempts to be able to read the different formats, but can only write one:
## TOTP in Keepass2Android
If you use any of the tools mentioned above, you can set up TOTP entries with them. Keepass2Android can read those entries and generate TOTPs if any of the following styles are used:
* Keepass2 style: used when there are TimeOtp-Secret(-XXX) fields in the entry
* KeeOtpPlugin style: used when there is an otp field containing a query string in the form of key=abc&step=X&size=Y (step and size are optional)
* KeeWebOtp/Key Uri Format style: used when entry contains a URL starting with otpauth://totp/, e.g. otpauth://totp/?secret=abc (https://github.com/google/google-authenticator/wiki/Key-Uri-Format)
* KeeTrayTotp style:
* requires a non-empty seed field (default key is "TOTP seed", can be changed in KP2A settings), value is base32 encoded data
* requires a non-empty settings field (default key is "TOTP Settings", can be changed as well), value is expected to be a csv-separated array with [Duration];Length(;TimeCorrectionURL). Length is either an integer value or "S" to indicate Steam encoding
In order to view the generated TOTP code in KP2A, open the corresponding entry. You can then
* use a dynamically generated field called "_TOTP_" containing the TOTP or
* use the "Copy TOTP" button on the system notification for the selected entry or
* switch to the KP2A keyboard and use the TOTP button to insert the TOTP value into the target app or browser
If you want to configure an entry to contain the TOTP fields, it is suggested to enter edit mode for the entry. Then click the "Configure TOTP" button. You can either enter the data manually or scan a QR code with the information.
### Spaces in otp field
Make sure that the URI doesn't contain spaces, otherwise KeePass2Android will fail to generate TOTPs as a space is an invalid character. If your URIs have spaces, check [this comment](https://github.com/PhilippC/keepass2android/issues/1248#issuecomment-628035961)._

View File

@@ -3,13 +3,13 @@
Creating a plug-in for Keepass2Android or enabling your app to query credentials from Keepass2Android is pretty simple. Please follow the steps below to get started. In case you have any questions, please contact me.
## Preparations
First check out the source code and import the Keepass2AndroidPluginSDK from [https://keepass2android.codeplex.com/SourceControl/latest#src/java/Keepass2AndroidPluginSDK/](https://keepass2android.codeplex.com/SourceControl/latest#src/java/Keepass2AndroidPluginSDK/) into your workspace. You should be able to build this library project.
First check out the source code and import the Keepass2AndroidPluginSDK from [https://github.com/PhilippC/keepass2android/tree/master/src/java/Keepass2AndroidPluginSDK2](https://github.com/PhilippC/keepass2android/tree/master/src/java/Keepass2AndroidPluginSDK2/) into your workspace. You should be able to build this library project.
Now add a reference to the PluginSDK library from your existing app or add a new plug-in app and then add the reference.
## Authorization
Keepass2Android stores very sensitive user data and therefore implements a plug-in authorization scheme based on broadcasts sent between the plug-in and the host app (=Keepass2Android or Keepass2Android Offline). Before your app/plug-in gets any information from KP2A, the user will have to grant your app/plug-in access to KP2A. As not every app/plug-in requires access to all information, you must specify which scopes are required by your app. The implemented scopes can be found in [https://keepass2android.codeplex.com/SourceControl/latest#src/java/Keepass2AndroidPluginSDK/src/keepass2android/pluginsdk/Strings.java](https://keepass2android.codeplex.com/SourceControl/latest#src/java/Keepass2AndroidPluginSDK/src/keepass2android/pluginsdk/Strings.java).
Keepass2Android stores very sensitive user data and therefore implements a plug-in authorization scheme based on broadcasts sent between the plug-in and the host app (=Keepass2Android or Keepass2Android Offline). Before your app/plug-in gets any information from KP2A, the user will have to grant your app/plug-in access to KP2A. As not every app/plug-in requires access to all information, you must specify which scopes are required by your app. The implemented scopes can be found in [https://github.com/PhilippC/keepass2android/tree/master/src/java/Keepass2AndroidPluginSDK2/src/keepass2android/pluginsdk/Strings.java](https://github.com/PhilippC/keepass2android/tree/master/src/java/Keepass2AndroidPluginSDK2/src/keepass2android/pluginsdk/Strings.java).
To tell Kp2a that you're a plug-in, you need to add a simple BroadcastReceiver like this:
@@ -55,8 +55,8 @@ These strings will be displayed to the user when KP2A asks if access should be g
## Modifying the entry view
You can add menu options for the full entry or for individual fields of the entry when displayed to the user. This is done, for example, by the QR plugin ([https://play.google.com/store/apps/details?id=keepass2android.plugin.qr](https://play.google.com/store/apps/details?id=keepass2android.plugin.qr)).
In addition, it is even possible to add new fields or modify existing fields. Please see the sample plugin "PluginA" in the KP2A repository for a simple example on how to do this:
[https://keepass2android.codeplex.com/SourceControl/latest#src/java/PluginA/src/keepass2android/plugina/PluginAActionReceiver.java](https://keepass2android.codeplex.com/SourceControl/latest#src/java/PluginA/src/keepass2android/plugina/PluginAActionReceiver.java)
In addition, it is even possible to add new fields or modify existing fields. Please see the sample plugin "PluginA" for a simple example on how to do this:
[https://github.com/PhilippC/keepass2android-sampleplugin/blob/main/src/keepass2android/plugina/PluginAAccessReceiver.java](https://github.com/PhilippC/keepass2android-sampleplugin/blob/main/src/keepass2android/plugina/PluginAAccessReceiver.java)
## Querying credentials
KP2A 0.9.4 adds a great opportunity for third party apps: Instead of prompting the user to enter credentials or a passphrase, the app should try to get the data from KP2A if it is installed: If the user grants (or previously granted) access for the app, KP2A will automatically retrieve the matching entry. User action is only required if the KP2A database is locked (user will usually unlock it with the short QuickUnlock code) or if no matching entry is found (user can then create a new entry or select an existing one. in the latter case KP2A will offer to add entry information so that the entry will be found automatically next time).

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.services.msa"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="22" />
<uses-permission android:name="com.sony.mobile.permission.SYSTEM_UI_VISIBILITY_EXTENSION" />
</manifest>

View File

@@ -1 +0,0 @@
int string app_name 0x7f020000

View File

@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.services.msa"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="22" />
<uses-permission android:name="com.sony.mobile.permission.SYSTEM_UI_VISIBILITY_EXTENSION" />
</manifest>

View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- From: file:/C:/Users/pnied/Documents/git/msa-auth-for-android/src/main/res/values/strings.xml -->
<eat-comment/>
<string name="app_name">msa-auth</string>
</resources>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.onedrivesdk"
android:versionCode="10202"
android:versionName="1.2.2" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
</manifest>

View File

@@ -1,22 +0,0 @@
int dimen activity_horizontal_margin 0x7f030000
int dimen activity_vertical_margin 0x7f030001
int id LinearLayout1 0x7f060004
int id com_microsoft_aad_adal_editDummyText 0x7f060002
int id com_microsoft_aad_adal_progressBar 0x7f060003
int id com_microsoft_aad_adal_webView1 0x7f060001
int id editPassword 0x7f060006
int id editUserName 0x7f060005
int id webView1 0x7f060000
int layout activity_authentication 0x7f020000
int layout dialog_authentication 0x7f020001
int layout http_auth_dialog 0x7f020002
int string app_loading 0x7f050000
int string app_name 0x7f050001
int string broker_processing 0x7f050002
int string http_auth_dialog_cancel 0x7f050003
int string http_auth_dialog_login 0x7f050004
int string http_auth_dialog_password 0x7f050005
int string http_auth_dialog_title 0x7f050006
int string http_auth_dialog_username 0x7f050007
int style AppBaseTheme 0x7f040000
int style AppTheme 0x7f040001

View File

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.onedrivesdk"
android:versionCode="10202"
android:versionName="1.2.2" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="23" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
</manifest>

View File

@@ -183,6 +183,7 @@
<LibraryProjectZip Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-debug.aar">
<Link>Jars\JavaFileStorage-debug.aar</Link>
</LibraryProjectZip>
<None Include="app.config" />
<None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" />
<None Include="packages.config" />
@@ -212,12 +213,6 @@
<Name>PCloudBindings</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\msa-auth-0.8.6\classes-msa-auth.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\onedrive-sdk-android-1.2.2\classes-onedrive-sdk.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\commons-logging-1.1.1.jar" />
</ItemGroup>
@@ -242,21 +237,6 @@
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-http-client-gson-1.16.0-rc.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\jackson-core-2.7.4.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okhttp-digest-2.5.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okio-2.9.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okhttp-4.10.0-RC1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedJar Include="Jars\dropbox-core-sdk-4.0.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gson-2.8.6.jar" />
</ItemGroup>
@@ -290,18 +270,30 @@
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\opencensus-api-0.24.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okhttp-4.12.0.jar" />
<EmbeddedReferenceJar Include="Jars\okio-3.6.0.jar" />
<EmbeddedReferenceJar Include="Jars\okio-jvm-3.6.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okhttp-digest-3.1.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\dropbox-core-sdk-5.4.6.jar" />
<EmbeddedReferenceJar Include="Jars\jackson-core-2.13.5.jar" />
</ItemGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets'))" />
@@ -326,7 +318,6 @@
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets'))" />
@@ -337,13 +328,14 @@
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets'))" />
</Target>
<Import Project="..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets')" />
<Import Project="..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets" Condition="Exists('..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets')" />
<Import Project="..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets" Condition="Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets" Condition="Exists('..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets')" />
<Import Project="..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets')" />
<Import Project="..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets')" />
<Import Project="..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets')" />
<Import Project="..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets" Condition="Exists('..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets')" />
@@ -368,7 +360,6 @@
<Import Project="..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets')" />
<Import Project="..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets" Condition="Exists('..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets')" />
<Import Project="..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets" Condition="Exists('..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets')" />
@@ -379,4 +370,5 @@
<Import Project="..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets')" />
<Import Project="..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets" Condition="Exists('..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets')" />
</Project>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Google.Apis.Auth" publicKeyToken="4b01fa6e34db77ab" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.67.0.0" newVersion="1.67.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -24,8 +24,8 @@
<package id="Xamarin.AndroidX.VersionedParcelable" version="1.1.1.14" targetFramework="monoandroid13.0" />
<package id="Xamarin.AndroidX.ViewPager" version="1.0.0.14" targetFramework="monoandroid13.0" />
<package id="Xamarin.Build.Download" version="0.11.4" targetFramework="monoandroid13.0" />
<package id="Xamarin.Google.Guava" version="28.2.0.1" targetFramework="monoandroid90" />
<package id="Xamarin.Google.Guava.FailureAccess" version="1.0.1.3" targetFramework="monoandroid90" />
<package id="Xamarin.Google.Guava" version="28.2.0.1" targetFramework="monoandroid13.0" />
<package id="Xamarin.Google.Guava.FailureAccess" version="1.0.1.3" targetFramework="monoandroid13.0" />
<package id="Xamarin.Google.Guava.ListenableFuture" version="1.0.0.9" targetFramework="monoandroid13.0" />
<package id="Xamarin.GooglePlayServices.Auth" version="120.4.0" targetFramework="monoandroid13.0" />
<package id="Xamarin.GooglePlayServices.Auth.Api.Phone" version="118.0.1.2" targetFramework="monoandroid13.0" />

View File

@@ -27,7 +27,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "keepass2android-app", "keep
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParser", "Kp2aAutofillParser\Kp2aAutofillParser.csproj", "{39B12571-BAFE-4D3A-AEE2-4D74F14DFD96}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Kp2aAutofillParserTest", "Kp2aAutofillParserTest\Kp2aAutofillParserTest.csproj", "{3D1560FF-86BB-4CB4-8367-80BA13B81C38}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParserTest", "Kp2aAutofillParserTest\Kp2aAutofillParserTest.csproj", "{3D1560FF-86BB-4CB4-8367-80BA13B81C38}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@@ -185,7 +185,7 @@ namespace KeePassLib.Serialization
byte[] pbFile = StrUtil.Utf8.GetBytes(sb.ToString());
s = IOConnection.OpenWrite(iocLockFile);
if(s == null) throw new IOException(iocLockFile.GetDisplayName());
if(s == null) throw new IOException(UrlUtil.GetFileName(iocLockFile.Path));
s.Write(pbFile, 0, pbFile.Length);
}
finally { if(s != null) s.Close(); }
@@ -205,8 +205,7 @@ namespace KeePassLib.Serialization
if(lfiEx != null)
{
m_iocLockFile = null; // Otherwise Dispose deletes the existing one
throw new FileLockException(iocBaseFile.GetDisplayName(),
lfiEx.GetOwner());
throw new FileLockException(UrlUtil.GetFileName(iocBaseFile.Path), lfiEx.GetOwner());
}
LockFileInfo.Create(m_iocLockFile);

View File

@@ -28,6 +28,7 @@ using System.Diagnostics;
using KeePassLib.Resources;
using KeePassLib.Serialization;
using Android.Webkit;
namespace KeePassLib.Utility
{
@@ -411,7 +412,7 @@ Clipboard.SetText(ObjectsToMessage(vLines, true));*/
public static void ShowLoadWarning(IOConnectionInfo ioConnection, Exception ex)
{
if (ioConnection != null)
ShowLoadWarning(ioConnection.GetDisplayName(), ex, false);
ShowLoadWarning(UrlUtil.GetFileName(ioConnection.Path), ex, false);
else ShowWarning(ex);
}
@@ -444,7 +445,7 @@ Clipboard.SetText(ObjectsToMessage(vLines, true));*/
bool bCorruptionWarning)
{
if (ioConnection != null)
ShowSaveWarning(ioConnection.GetDisplayName(), ex, bCorruptionWarning);
ShowSaveWarning(UrlUtil.GetFileName(ioConnection.Path), ex, bCorruptionWarning);
else ShowWarning(ex);
}

View File

@@ -434,7 +434,7 @@ namespace Kp2aAutofillParser
public static List<string> ConvertToCanonicalLowerCaseHints(string[] supportedHints)
{
List<string> result = new List<string>();
foreach (string hint in supportedHints)
foreach (string hint in supportedHints.Where(h => h != null))
{
var canonicalHint = ToCanonicalHint(hint);
result.Add(canonicalHint.ToLower());
@@ -829,7 +829,7 @@ namespace Kp2aAutofillParser
// * if there is no such autofill hint, we use IsPassword to
HashSet<string> autofillHintsOfAllFields = autofillView.InputFields.Where(f => f.AutofillHints != null)
.SelectMany(f => f.AutofillHints).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet();
.SelectMany(f => f.AutofillHints).Where(x => x != null).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet();
bool hasLoginAutofillHints = autofillHintsOfAllFields.Intersect(_autofillHintsForLogin).Any();
if (hasLoginAutofillHints)
@@ -839,9 +839,9 @@ namespace Kp2aAutofillParser
string[] viewHints = viewNode.AutofillHints;
if (viewHints == null)
continue;
if (viewHints.Select(AutofillHintsHelper.ToCanonicalHint).Intersect(_autofillHintsForLogin).Any())
if (viewHints.Where(h => h != null).Select(AutofillHintsHelper.ToCanonicalHint).Intersect(_autofillHintsForLogin).Any())
{
AddFieldToHintMap(viewNode, viewHints.Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet().ToArray());
AddFieldToHintMap(viewNode, viewHints.Where(h => h != null).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet().ToArray());
}
}

View File

@@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
</ItemGroup>
</Project>

View File

@@ -71,6 +71,12 @@ namespace Kp2aAutofillParserTest
var resourceName = "Kp2aAutofillParserTest.com-expressvpn-vpn-android13.json";
RunTestFromAutofillInput(resourceName, "com.expressvpn.vpn", null);
}
[Fact]
public void TestIgnoresAndroidSettings()
{
var resourceName = "Kp2aAutofillParserTest.android14-settings.json";
RunTestFromAutofillInput(resourceName, "com.android.settings", null);
}
private void RunTestFromAutofillInput(string resourceName, string expectedPackageName = null, string expectedWebDomain = null)
{

View File

@@ -9,6 +9,7 @@
</PropertyGroup>
<ItemGroup>
<None Remove="android14-settings.json" />
<None Remove="chrome-android10-amazon-it.json" />
<None Remove="com-expressvpn-vpn-android13.json" />
<None Remove="com-ifs-banking-fiid3364-android13.json" />
@@ -19,13 +20,13 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<PackageReference Include="coverlet.collector" Version="6.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
@@ -54,6 +55,9 @@
<EmbeddedResource Include="com-servicenet-mobile-no-focus.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="android14-settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>
<EmbeddedResource Include="imdb.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</EmbeddedResource>

View File

@@ -0,0 +1,99 @@
{
"InputFields": [
{
"IdEntry": null,
"Hint": null,
"ClassName": "android.widget.FrameLayout",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "content_parent",
"Hint": null,
"ClassName": "android.widget.LinearLayout",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "content_frame",
"Hint": null,
"ClassName": "android.widget.FrameLayout",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "main_content",
"Hint": null,
"ClassName": "android.widget.FrameLayout",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "password_entry",
"Hint": null,
"ClassName": "android.widget.EditText",
"AutofillHints": [
"passwordAuto"
],
"IsFocused": true,
"InputType": 18,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null,
"ExpectedAssignedHints": [ "password" ]
},
{
"IdEntry": "checkbox",
"Hint": null,
"ClassName": "android.widget.CheckBox",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "button_bar",
"Hint": null,
"ClassName": "android.widget.RelativeLayout",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "switch_bar",
"Hint": null,
"ClassName": "android.widget.LinearLayout",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
},
{
"IdEntry": "action_bar",
"Hint": null,
"ClassName": "android.view.ViewGroup",
"AutofillHints": null,
"IsFocused": false,
"InputType": 0,
"HtmlInfoTag": null,
"HtmlInfoTypeAttribute": null
}
],
"PackageId": "com.android.settings",
"WebDomain": null
}

View File

@@ -124,7 +124,7 @@ namespace keepass2android.Io
&& File.Exists(VersionFilePath(ioc))
&& File.Exists(BaseVersionFilePath(ioc));
Kp2aLog.Log(ioc.GetDisplayName() + " isCached = " + result);
Kp2aLog.Log(GetDisplayName(ioc) + " isCached = " + result);
return result;
}
@@ -598,13 +598,14 @@ namespace keepass2android.Io
public string GetBaseVersionHash(IOConnectionInfo ioc)
{
string hash = File.ReadAllText(BaseVersionFilePath(ioc));
Kp2aLog.Log(ioc.GetDisplayName() + " baseVersionHash = " + hash);
Kp2aLog.Log(GetDisplayName(ioc) + " baseVersionHash = " + hash);
return hash;
}
public string GetLocalVersionHash(IOConnectionInfo ioc)
{
string hash = File.ReadAllText(VersionFilePath(ioc));
Kp2aLog.Log(ioc.GetDisplayName() + " localVersionHash = " + hash);
Kp2aLog.Log(GetDisplayName(ioc) + " localVersionHash = " + hash);
return hash;
}
public bool HasLocalChanges(IOConnectionInfo ioc)

View File

@@ -348,7 +348,7 @@ namespace keepass2android.Io
}
catch (Exception e)
{
throw new Exception("Error finding " + filename + " in " + folderPath.GetDisplayName(), e);
throw new Exception("Error finding " + filename + " in " + GetDisplayName(folderPath), e);
}
}

View File

@@ -1,31 +1,23 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using KeePassLib.Serialization;
#if !EXCLUDE_JAVAFILESTORAGE
using Keepass2android.Javafilestorage;
using Exception = Java.Lang.Exception;
namespace keepass2android.Io
{
public class OneDriveFileStorage: JavaFileStorage
/// <summary>
/// This IFileStorage implementation becomes picked if a user is using a skydrive:// or onedrive:// file.
/// These refer to an old (Java) implementation which was replaced starting in 2019. The successor uses onedrive2:// (see OneDrive2FileStorage)
/// The Java implementation was removed in 2024 when the jar files became unavailable. We are keeping this file to notify any user who haven't updated their
/// file storage within 5 years.
/// This file should be removed around mid 2025.
/// </summary>
public class OneDriveFileStorage: IFileStorage
{
private const string ClientId = "000000004010C234";
public OneDriveFileStorage(Context ctx, IKp2aApp app) :
base(new Keepass2android.Javafilestorage.OneDriveStorage(ctx, ClientId), app)
{
}
public override IEnumerable<string> SupportedProtocols
public IEnumerable<string> SupportedProtocols
{
get
{
@@ -34,10 +26,146 @@ namespace keepass2android.Io
}
}
public override bool UserShouldBackup
private Exception GetDeprecatedMessage()
{
return new Exception(
"You have opened your file through a deprecated Microsoft API. Please select Change database, Open Database and then select One Drive again.");
}
public bool UserShouldBackup
{
get { return false; }
}
}
public void Delete(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public bool CheckForFileChangeFast(IOConnectionInfo ioc, string previousFileVersion)
{
throw GetDeprecatedMessage();
}
public string GetCurrentFileVersionFast(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public Stream OpenFileForRead(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction)
{
throw GetDeprecatedMessage();
}
public string GetFilenameWithoutPathAndExt(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public string GetFileExtension(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public bool RequiresCredentials(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public void CreateDirectory(IOConnectionInfo ioc, string newDirName)
{
throw GetDeprecatedMessage();
}
public IEnumerable<FileDescription> ListContents(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public FileDescription GetFileDescription(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public bool RequiresSetup(IOConnectionInfo ioConnection)
{
throw GetDeprecatedMessage();
}
public string IocToPath(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public void StartSelectFile(IFileStorageSetupInitiatorActivity activity, bool isForSave, int requestCode, string protocolId)
{
throw GetDeprecatedMessage();
}
public void PrepareFileUsage(IFileStorageSetupInitiatorActivity activity, IOConnectionInfo ioc, int requestCode,
bool alwaysReturnSuccess)
{
throw GetDeprecatedMessage();
}
public void PrepareFileUsage(Context ctx, IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public void OnCreate(IFileStorageSetupActivity activity, Bundle savedInstanceState)
{
throw GetDeprecatedMessage();
}
public void OnResume(IFileStorageSetupActivity activity)
{
throw GetDeprecatedMessage();
}
public void OnStart(IFileStorageSetupActivity activity)
{
throw GetDeprecatedMessage();
}
public void OnActivityResult(IFileStorageSetupActivity activity, int requestCode, int resultCode, Intent data)
{
throw GetDeprecatedMessage();
}
public string GetDisplayName(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public string CreateFilePath(string parent, string newFilename)
{
throw GetDeprecatedMessage();
}
public IOConnectionInfo GetParentPath(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public IOConnectionInfo GetFilePath(IOConnectionInfo folderPath, string filename)
{
throw GetDeprecatedMessage();
}
public bool IsPermanentLocation(IOConnectionInfo ioc)
{
throw GetDeprecatedMessage();
}
public bool IsReadOnly(IOConnectionInfo ioc, OptionalOut<UiStringKey> reason = null)
{
throw GetDeprecatedMessage();
}
}
}
#endif

View File

@@ -5,7 +5,7 @@ namespace keepass2android.Io
{
public class PCloudFileStorage: JavaFileStorage
{
private const string ClientId = "CkRWTQXY6Lm";
private const string ClientId = "yCeH59Ffgtm";
public PCloudFileStorage(Context ctx, IKp2aApp app) :
base(new Keepass2android.Javafilestorage.PCloudFileStorage(ctx, ClientId, "pcloud", ""), app)

View File

@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" InitialTargets="showFlavor">
<Target Name="showFlavor" AfterTargets="Build">
<Message Importance="high" Text="building flavor $(Flavor)"></Message>
</Target>
<Import Project="../build-properties.props"/>
<Target Name="showFlavor" AfterTargets="Build">
<Message Importance="high" Text="building flavor $(Flavor)">
</Message>
</Target>
<Import Project="../build-properties.props" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -182,10 +183,10 @@
</ItemGroup>
<ItemGroup Condition=" '$(Flavor)'!='NoNet' ">
<PackageReference Include="FluentFTP">
<Version>48.0.0</Version>
<Version>51.1.0</Version>
</PackageReference>
<PackageReference Include="MegaApiClient">
<Version>1.10.3</Version>
<Version>1.10.4</Version>
</PackageReference>
<PackageReference Include="Microsoft.Graph">
<Version>1.21.0</Version>
@@ -312,4 +313,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>

View File

@@ -91,7 +91,29 @@ namespace keepass2android
}
private static String ExtractHost(String url)
public PwGroup SearchForUuid(Database database, string uuid)
{
SearchParameters sp = SearchParameters.None;
sp.SearchInUuids = true;
sp.SearchString = uuid;
if (sp.RegularExpression) // Validate regular expression
{
new Regex(sp.SearchString);
}
string strGroupName = _app.GetResourceString(UiStringKey.search_results);
PwGroup pgResults = new PwGroup(true, true, strGroupName, PwIcon.EMailSearch) { IsVirtual = true };
PwObjectList<PwEntry> listResults = pgResults.Entries;
database.Root.SearchEntries(sp, listResults, new NullStatusLogger());
return pgResults;
}
private static String ExtractHost(String url)
{
return UrlUtil.GetHost(url.Trim());
}

View File

@@ -72,8 +72,9 @@ namespace keepass2android
}
private IDatabaseFormat _databaseFormat = new KdbxDatabaseFormat(KdbxFormat.Default);
private bool? _hasTotpEntries;
public bool ReloadRequested { get; set; }
public bool ReloadRequested { get; set; }
public bool DidOpenFileChange()
{
@@ -104,8 +105,9 @@ namespace keepass2android
SearchHelper = new SearchDbHelper(app);
_databaseFormat = databaseFormat;
_hasTotpEntries = null;
CanWrite = databaseFormat.CanWrite && !fileStorage.IsReadOnly(iocInfo);
CanWrite = databaseFormat.CanWrite && !fileStorage.IsReadOnly(iocInfo);
}
/// <summary>
@@ -174,10 +176,17 @@ namespace keepass2android
PwGroup group = SearchHelper.SearchForExactUrl(this, url);
return group;
}
public PwGroup SearchForHost(String url, bool allowSubdomains) {
}
public PwGroup SearchForUuid(String uuid)
{
PwGroup group = SearchHelper.SearchForUuid(this, uuid);
return group;
}
public PwGroup SearchForHost(String url, bool allowSubdomains) {
PwGroup group = SearchHelper.SearchForHost(this, url, allowSubdomains);
return group;
@@ -193,8 +202,21 @@ namespace keepass2android
trans.CommitWrite();
}
}
_hasTotpEntries = null;
}
public bool HasTotpEntries
{
get
{
if (_hasTotpEntries == null)
{
_hasTotpEntries = true;
}
return _hasTotpEntries.Value;
}
}
private void PopulateGlobals(PwGroup currentGroup, bool checkForDuplicateUuids )
{

Binary file not shown.

Binary file not shown.

View File

@@ -56,7 +56,7 @@
<ItemGroup>
<None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" />
<LibraryProjectZip Include="Jars\pcloud-sdk-android-1.8.1.aar" />
<LibraryProjectZip Include="Jars\pcloud-sdk-android-1.9.1.aar" />
</ItemGroup>
<ItemGroup>
<TransformFile Include="Transforms\Metadata.xml" />
@@ -72,6 +72,6 @@
</Target>
-->
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\pcloud-sdk-java-core-1.8.1.jar" />
<EmbeddedReferenceJar Include="Jars\pcloud-sdk-java-core-1.9.1.jar" />
</ItemGroup>
</Project>

View File

@@ -4,11 +4,10 @@ android {
namespace 'keepass2android.javafilestorage'
compileSdkVersion 33
defaultConfig {
minSdkVersion 15
minSdkVersion 21
targetSdkVersion 33
compileSdk 34
}
buildTypes {
release {
@@ -22,6 +21,10 @@ android {
sourceCompatibility 11
targetCompatibility 11
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
}
}
/*
@@ -30,27 +33,21 @@ NOTE: If you change dependencies here, don't forget to update the jar files in J
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.10.0-RC1'
implementation 'com.burgstaller:okhttp-digest:2.5'
implementation 'com.squareup.okhttp3:okhttp:4.12.0'
implementation 'io.github.rburgst:okhttp-digest:3.1.0'
implementation 'com.google.http-client:google-http-client-gson:1.20.0'
implementation('com.google.api-client:google-api-client-android:1.30.5') {
exclude group: 'com.google.android.google-play-services'
}
implementation 'com.google.apis:google-api-services-drive:v2-rev102-1.16.0-rc'
implementation 'com.dropbox.core:dropbox-core-sdk:4.0.0'
implementation 'com.dropbox.core:dropbox-core-sdk:5.4.6'
implementation 'com.google.api-client:google-api-client:1.30.5'
implementation 'com.google.api-client:google-api-client-android:1.30.5'
implementation 'com.google.android.gms:play-services-auth:20.4.0'
//onedrive:
implementation('com.onedrive.sdk:onedrive-sdk-android:1.2.0') {
transitive = false
}
implementation 'com.pcloud.sdk:java-core:1.8.1'
implementation 'com.pcloud.sdk:android:1.8.1'
implementation 'com.pcloud.sdk:java-core:1.9.1'
implementation 'com.pcloud.sdk:android:1.9.1'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.microsoft.services.msa:msa-auth:0.8.6'
implementation 'com.microsoft.aad:adal:1.14.0'
}

View File

@@ -1,436 +0,0 @@
package keepass2android.javafilestorage;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import androidx.annotation.NonNull;
import android.util.Log;
import com.onedrive.sdk.core.DefaultClientConfig;
import com.onedrive.sdk.core.IClientConfig;
import com.onedrive.sdk.core.OneDriveErrorCodes;
import com.onedrive.sdk.extensions.IItemCollectionPage;
import com.onedrive.sdk.extensions.IItemCollectionRequestBuilder;
import com.onedrive.sdk.extensions.IOneDriveClient;
import com.onedrive.sdk.extensions.Item;
import com.onedrive.sdk.extensions.OneDriveClient;
import com.onedrive.sdk.http.OneDriveServiceException;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Philipp on 20.11.2016.
*/
public class OneDriveStorage extends JavaFileStorageBase
{
final IClientConfig oneDriveConfig;
final keepass2android.javafilestorage.onedrive.MyMSAAuthenticator msaAuthenticator;
IOneDriveClient oneDriveClient;
public OneDriveStorage(final Context context, final String clientId) {
msaAuthenticator = new keepass2android.javafilestorage.onedrive.MyMSAAuthenticator(context) {
@Override
public String getClientId() {
return clientId;
}
@Override
public String[] getScopes() {
return new String[] { "offline_access", "onedrive.readwrite" };
}
};
oneDriveConfig = DefaultClientConfig.createWithAuthenticator(msaAuthenticator);
initAuthenticator(null);
}
@Override
public boolean requiresSetup(String path) {
return !isConnected(null);
}
@Override
public void startSelectFile(FileStorageSetupInitiatorActivity activity, boolean isForSave, int requestCode) {
initAuthenticator((Activity)activity.getActivity());
String path = getProtocolId()+":///";
Log.d("KP2AJ", "startSelectFile "+path+", connected: "+path);
if (isConnected(null))
{
Intent intent = new Intent();
intent.putExtra(EXTRA_IS_FOR_SAVE, isForSave);
intent.putExtra(EXTRA_PATH, path);
activity.onImmediateResult(requestCode, RESULT_FILECHOOSER_PREPARED, intent);
}
else
{
activity.startSelectFileProcess(path, isForSave, requestCode);
}
}
private boolean isConnected(Activity activity) {
if (oneDriveClient == null)
{
try
{
Log.d("KP2AJ", "trying silent login");
if (msaAuthenticator.loginSilent() != null)
{
Log.d("KP2AJ", "ok: silent login");
oneDriveClient = buildClient(activity);
}
else Log.d("KP2AJ", "trying silent login failed.");
}
catch (Exception e)
{
e.printStackTrace();
}
}
return oneDriveClient != null;
}
private void initAuthenticator(Activity activity) {
msaAuthenticator.init(
oneDriveConfig.getExecutors(),
oneDriveConfig.getHttpProvider(),
activity,
oneDriveConfig.getLogger());
}
@Override
public void prepareFileUsage(FileStorageSetupInitiatorActivity activity, String path, int requestCode, boolean alwaysReturnSuccess) {
initAuthenticator((Activity)activity.getActivity());
if (isConnected((Activity)activity.getActivity()))
{
Intent intent = new Intent();
intent.putExtra(EXTRA_PATH, path);
activity.onImmediateResult(requestCode, RESULT_FILEUSAGE_PREPARED, intent);
}
else
{
activity.startFileUsageProcess(path, requestCode, alwaysReturnSuccess);
}
}
@Override
public String getProtocolId() {
return "onedrive";
}
@Override
public void prepareFileUsage(Context appContext, String path) throws UserInteractionRequiredException {
if (!isConnected(null))
{
throw new UserInteractionRequiredException();
}
}
@Override
public void onCreate(FileStorageSetupActivity activity, Bundle savedInstanceState) {
Log.d("KP2AJ", "OnCreate");
}
@Override
public void onResume(final FileStorageSetupActivity activity) {
}
private IOneDriveClient buildClient(Activity activity) {
return new OneDriveClient.Builder()
.fromConfig(oneDriveConfig)
.loginAndBuildClient(activity);
}
String getPathFromSkydrivePath(String skydrivePath)
{
String path = "";
if (skydrivePath.equals(""))
return "";
String[] parts = skydrivePath.split("/");
for (int i = 0; i < parts.length; i++) {
String part = parts[i];
logDebug("parsing part " + part);
int indexOfSeparator = part.lastIndexOf(NAME_ID_SEP);
if (indexOfSeparator < 0) {
// seems invalid, but we're very generous here
path += "/" + part;
continue;
}
String name = part.substring(0, indexOfSeparator);
try {
name = decode(name);
} catch (UnsupportedEncodingException e) {
// ignore
}
path += "/" + name;
}
logDebug("return " +path + ". original was " + skydrivePath);
return path;
}
String removeProtocol(String path) throws Exception {
if (path == null)
return null;
if (path.startsWith("skydrive"))
return getPathFromSkydrivePath(path.substring("skydrive://".length()));
return path.substring(getProtocolId().length()+3);
}
@Override
public String getDisplayName(String path) {
if (path == null)
return null;
if (path.startsWith("skydrive"))
return getProtocolId()+"://"+getPathFromSkydrivePath(path.substring("skydrive://".length()));
return path;
}
@Override
public String getFilename(String path) throws Exception {
return path.substring(path.lastIndexOf("/")+1);
}
@Override
public boolean checkForFileChangeFast(String path, String previousFileVersion) throws Exception {
return false;
}
@Override
public String getCurrentFileVersionFast(String path) {
return null;
}
@Override
public InputStream openFileForRead(String path) throws Exception {
try {
path = removeProtocol(path);
logDebug("openFileForRead. Path="+path);
InputStream result = oneDriveClient.getDrive()
.getRoot()
.getItemWithPath(path)
.getContent()
.buildRequest()
.get();
logDebug("ok");
return result;
}
catch (OneDriveServiceException e)
{
throw convertException(e);
}
}
private Exception convertException(OneDriveServiceException e) {
if (e.isError(OneDriveErrorCodes.ItemNotFound))
return new FileNotFoundException(e.getMessage());
return e;
}
@Override
public void uploadFile(String path, byte[] data, boolean writeTransactional) throws Exception {
try {
path = removeProtocol(path);
oneDriveClient.getDrive()
.getRoot()
.getItemWithPath(path)
.getContent()
.buildRequest()
.put(data);
} catch (OneDriveServiceException e) {
throw convertException(e);
}
}
@Override
public String createFolder(String parentPath, String newDirName) throws Exception {
throw new Exception("not implemented.");
}
@Override
public String createFilePath(String parentPath, String newFileName) throws Exception {
String path = parentPath;
if (!path.endsWith("/"))
path = path + "/";
path = path + newFileName;
return path;
}
@Override
public List<FileEntry> listFiles(String parentPath) throws Exception {
try {
ArrayList<FileEntry> result = new ArrayList<FileEntry>();
parentPath = removeProtocol(parentPath);
IItemCollectionPage itemsPage = oneDriveClient.getDrive()
.getRoot()
.getItemWithPath(parentPath)
.getChildren()
.buildRequest()
.get();
if (parentPath.endsWith("/"))
parentPath = parentPath.substring(0,parentPath.length()-1);
while (true)
{
List<Item> items = itemsPage.getCurrentPage();
if (items.isEmpty())
return result;
for (Item i: items)
{
FileEntry e = getFileEntry(parentPath + "/" + i.name, i);
Log.d("KP2AJ", e.path);
result.add(e);
}
IItemCollectionRequestBuilder nextPageReqBuilder = itemsPage.getNextPage();
if (nextPageReqBuilder == null)
return result;
itemsPage = nextPageReqBuilder.buildRequest().get();
}
} catch (OneDriveServiceException e) {
throw convertException(e);
}
}
@NonNull
private FileEntry getFileEntry(String path, Item i) {
FileEntry e = new FileEntry();
if (i.size != null)
e.sizeInBytes = i.size;
else if ((i.remoteItem != null) && (i.remoteItem.size != null))
e.sizeInBytes = i.remoteItem.size;
e.displayName = i.name;
e.canRead = e.canWrite = true;
e.path = getProtocolId() +"://"+path;
if (i.lastModifiedDateTime != null)
e.lastModifiedTime = i.lastModifiedDateTime.getTimeInMillis();
else if ((i.remoteItem != null)&&(i.remoteItem.lastModifiedDateTime != null))
e.lastModifiedTime = i.remoteItem.lastModifiedDateTime.getTimeInMillis();
e.isDirectory = (i.folder != null) || ((i.remoteItem != null) && (i.remoteItem.folder != null));
return e;
}
@Override
public FileEntry getFileEntry(String filename) throws Exception {
try {
filename = removeProtocol(filename);
Item item = oneDriveClient.getDrive()
.getRoot()
.getItemWithPath(filename)
.buildRequest()
.get();
return getFileEntry(filename, item);
} catch (OneDriveServiceException e) {
throw convertException(e);
}
}
@Override
public void delete(String path) throws Exception {
try {
path = removeProtocol(path);
oneDriveClient.getDrive()
.getRoot()
.getItemWithPath(path)
.buildRequest()
.delete();
} catch (OneDriveServiceException e) {
throw convertException(e);
}
}
@Override
public void onStart(final FileStorageSetupActivity activity) {
Log.d("KP2AJ", "onStart");
if (activity.getProcessName().equals(PROCESS_NAME_SELECTFILE))
activity.getState().putString(EXTRA_PATH, activity.getPath());
JavaFileStorage.FileStorageSetupActivity storageSetupAct = activity;
if (oneDriveClient != null) {
Log.d("KP2AJ", "auth successful");
try {
finishActivityWithSuccess(activity);
return;
} catch (Exception e) {
Log.d("KP2AJ", "finish with error: " + e.toString());
finishWithError(activity, e);
return;
}
}
{
Log.d("KP2AJ", "Starting auth");
new AsyncTask<Object, Object, Object>() {
@Override
protected Object doInBackground(Object... params) {
try {
return buildClient((Activity) activity);
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(Object o) {
if (o == null)
{
Log.i(TAG, "authenticating not successful");
Intent data = new Intent();
data.putExtra(EXTRA_ERROR_MESSAGE, "authenticating not succesful");
((Activity)activity).setResult(Activity.RESULT_CANCELED, data);
((Activity)activity).finish();
}
else
{
Log.i(TAG, "authenticating successful");
oneDriveClient = (IOneDriveClient) o;
finishActivityWithSuccess(activity);
}
}
}.execute();
}
}
@Override
public void onActivityResult(FileStorageSetupActivity activity, int requestCode, int resultCode, Intent data) {
}
}

View File

@@ -1,102 +0,0 @@
package keepass2android.javafilestorage.onedrive;
/**
* Created by Philipp on 22.11.2016.
*/
import com.microsoft.services.msa.LiveConnectSession;
import com.onedrive.sdk.authentication.AccountType;
import com.onedrive.sdk.authentication.IAccountInfo;
import com.onedrive.sdk.authentication.MSAAccountInfo;
import com.onedrive.sdk.authentication.MSAAuthenticator;
import com.onedrive.sdk.logger.ILogger;
import com.microsoft.services.msa.LiveConnectSession;
import com.onedrive.sdk.logger.ILogger;
/**
* Account information for a MSA based account.
*/
public class MyMSAAccountInfo implements IAccountInfo {
/**
* The service root for the OneDrive personal API.
*/
public static final String ONE_DRIVE_PERSONAL_SERVICE_ROOT = "https://api.onedrive.com/v1.0";
/**
* The authenticator that can refresh this account.
*/
private final MyMSAAuthenticator mAuthenticator;
/**
* The session this account is based off of.
*/
private LiveConnectSession mSession;
/**
* The logger.
*/
private final ILogger mLogger;
/**
* Creates an MSAAccountInfo object.
* @param authenticator The authenticator that this account info was created from.
* @param liveConnectSession The session this account is based off of.
* @param logger The logger.
*/
public MyMSAAccountInfo(final MyMSAAuthenticator authenticator,
final LiveConnectSession liveConnectSession,
final ILogger logger) {
mAuthenticator = authenticator;
mSession = liveConnectSession;
mLogger = logger;
}
/**
* Get the type of the account.
* @return The MicrosoftAccount account type.
*/
@Override
public AccountType getAccountType() {
return AccountType.MicrosoftAccount;
}
/**
* Get the access token for requests against the service root.
* @return The access token for requests against the service root.
*/
@Override
public String getAccessToken() {
return mSession.getAccessToken();
}
/**
* Get the OneDrive service root for this account.
* @return the OneDrive service root for this account.
*/
@Override
public String getServiceRoot() {
return ONE_DRIVE_PERSONAL_SERVICE_ROOT;
}
/**
* Indicates if the account access token is expired and needs to be refreshed.
* @return true if refresh() needs to be called and
* false if the account is still valid.
*/
@Override
public boolean isExpired() {
return mSession.isExpired();
}
/**
* Refreshes the authentication token for this account info.
*/
@Override
public void refresh() {
mLogger.logDebug("Refreshing access token...");
final MyMSAAccountInfo newInfo = (MyMSAAccountInfo)mAuthenticator.loginSilent();
mSession = newInfo.mSession;
}
}

View File

@@ -1,446 +0,0 @@
package keepass2android.javafilestorage.onedrive;
/**
* Created by Philipp on 22.11.2016.
*/
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;
import com.microsoft.onedrivesdk.BuildConfig;
import com.microsoft.services.msa.LiveAuthClient;
import com.microsoft.services.msa.LiveAuthException;
import com.microsoft.services.msa.LiveAuthListener;
import com.microsoft.services.msa.LiveConnectSession;
import com.microsoft.services.msa.LiveStatus;
import com.onedrive.sdk.authentication.ClientAuthenticatorException;
import com.onedrive.sdk.authentication.IAccountInfo;
import com.onedrive.sdk.authentication.IAuthenticator;
import com.onedrive.sdk.authentication.MSAAccountInfo;
import com.onedrive.sdk.concurrency.ICallback;
import com.onedrive.sdk.core.ClientException;
import com.onedrive.sdk.concurrency.SimpleWaiter;
import com.onedrive.sdk.concurrency.IExecutors;
import com.onedrive.sdk.core.OneDriveErrorCodes;
import com.onedrive.sdk.http.IHttpProvider;
import com.onedrive.sdk.logger.ILogger;
import java.security.InvalidParameterException;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference;
/**
* Wrapper around the MSA authentication library.
* https://github.com/MSOpenTech/msa-auth-for-android
*/
@SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public abstract class MyMSAAuthenticator implements IAuthenticator {
private final Context mContext;
public MyMSAAuthenticator(Context context)
{
mContext = context;
}
/**
* The sign in cancellation message.
*/
private static final String SIGN_IN_CANCELLED_MESSAGE = "The user cancelled the login operation.";
/**
* The preferences for this authenticator.
*/
private static final String MSA_AUTHENTICATOR_PREFS = "MSAAuthenticatorPrefs";
/**
* The key for the user id.
*/
private static final String USER_ID_KEY = "userId";
/**
* The key for the version code
*/
public static final String VERSION_CODE_KEY = "versionCode";
/**
* The default user id
*/
private static final String DEFAULT_USER_ID = "@@defaultUser";
/**
* The active user id.
*/
private final AtomicReference<String> mUserId = new AtomicReference<>();
/**
* The executors.
*/
private IExecutors mExecutors;
/**
* Indicates whether this authenticator has been initialized.
*/
private boolean mInitialized;
/**
* The context UI interactions should happen with.
*/
private Activity mActivity;
/**
* The logger.
*/
private ILogger mLogger;
/**
* The client id for this authenticator.
* https://dev.onedrive.com/auth/msa_oauth.htm#to-register-your-app
* @return The client id.
*/
public abstract String getClientId();
/**
* The scopes for this application.
* https://dev.onedrive.com/auth/msa_oauth.htm#authentication-scopes
* @return The scopes for this application.
*/
public abstract String[] getScopes();
/**
* The live authentication client.
*/
private LiveAuthClient mAuthClient;
/**
* Initializes the authenticator.
* @param executors The executors to schedule foreground and background tasks.
* @param httpProvider The http provider for sending requests.
* @param activity The activity to create interactive UI on.
* @param logger The logger for diagnostic information.
*/
@Override
public synchronized void init(final IExecutors executors,
final IHttpProvider httpProvider,
final Activity activity,
final ILogger logger) {
mActivity = activity;
if (mInitialized) {
return;
}
mExecutors = executors;
mLogger = logger;
mInitialized = true;
mAuthClient = new LiveAuthClient(mContext, getClientId(), Arrays.asList(getScopes()));
final SharedPreferences prefs = getSharedPreferences();
mUserId.set(prefs.getString(USER_ID_KEY, null));
}
/**
* Starts an interactive login asynchronously.
* @param emailAddressHint The hint for the email address during the interactive login.
* @param loginCallback The callback to be called when the login is complete.
*/
@Override
public void login(final String emailAddressHint, final ICallback<IAccountInfo> loginCallback) {
Log.d("KP2AJ", "login()");
if (!mInitialized) {
throw new IllegalStateException("init must be called");
}
if (loginCallback == null) {
throw new InvalidParameterException("loginCallback");
}
mLogger.logDebug("Starting login async");
mExecutors.performOnBackground(new Runnable() {
@Override
public void run() {
try {
mExecutors.performOnForeground(login(emailAddressHint), loginCallback);
} catch (final ClientException e) {
mExecutors.performOnForeground(e, loginCallback);
}
}
});
}
/**
* Starts an interactive login.
* @param emailAddressHint The hint for the email address during the interactive login.
* @return The account info.
* @throws ClientException An exception occurs if the login was unable to complete for any reason.
*/
@Override
public synchronized IAccountInfo login(final String emailAddressHint) throws ClientException {
if (!mInitialized) {
throw new IllegalStateException("init must be called");
}
mLogger.logDebug("Starting login");
final AtomicReference<ClientException> error = new AtomicReference<>();
final SimpleWaiter waiter = new SimpleWaiter();
final LiveAuthListener listener = new LiveAuthListener() {
@Override
public void onAuthComplete(final LiveStatus liveStatus,
final LiveConnectSession liveConnectSession,
final Object o) {
if (liveStatus == LiveStatus.NOT_CONNECTED) {
mLogger.logDebug("Received invalid login failure from silent authentication with MSA, ignoring.");
} else {
mLogger.logDebug("Successful interactive login");
waiter.signal();
}
}
@Override
public void onAuthError(final LiveAuthException e,
final Object o) {
OneDriveErrorCodes code = OneDriveErrorCodes.AuthenticationFailure;
if (e.getError().equals(SIGN_IN_CANCELLED_MESSAGE)) {
code = OneDriveErrorCodes.AuthenticationCancelled;
}
error.set(new ClientAuthenticatorException("Unable to login with MSA", e, code));
mLogger.logError(error.get().getMessage(), error.get());
waiter.signal();
}
};
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
mAuthClient.login(mActivity, /* scopes */null, /* user object */ null, emailAddressHint, listener);
}
});
mLogger.logDebug("Waiting for MSA callback");
waiter.waitForSignal();
final ClientException exception = error.get();
if (exception != null) {
throw exception;
}
final String userId;
if (emailAddressHint != null) {
userId = emailAddressHint;
} else {
userId = DEFAULT_USER_ID;
}
mUserId.set(userId);
final SharedPreferences prefs = getSharedPreferences();
prefs.edit()
.putString(USER_ID_KEY, mUserId.get())
.putInt(VERSION_CODE_KEY, BuildConfig.VERSION_CODE)
.apply();
return getAccountInfo();
}
/**
* Starts a silent login asynchronously.
* @param loginCallback The callback to be called when the login is complete.
*/
@Override
public void loginSilent(final ICallback<IAccountInfo> loginCallback) {
if (!mInitialized) {
throw new IllegalStateException("init must be called");
}
if (loginCallback == null) {
throw new InvalidParameterException("loginCallback");
}
mLogger.logDebug("Starting login silent async");
mExecutors.performOnBackground(new Runnable() {
@Override
public void run() {
try {
mExecutors.performOnForeground(loginSilent(), loginCallback);
} catch (final ClientException e) {
mExecutors.performOnForeground(e, loginCallback);
}
}
});
}
/**
* Starts a silent login.
* @return The account info.
* @throws ClientException An exception occurs if the login was unable to complete for any reason.
*/
@Override
public synchronized IAccountInfo loginSilent() throws ClientException {
if (!mInitialized) {
throw new IllegalStateException("init must be called");
}
mLogger.logDebug("Starting login silent");
final int userIdStoredMinVersion = 10112;
if (getSharedPreferences().getInt(VERSION_CODE_KEY, 0) >= userIdStoredMinVersion
&& mUserId.get() == null) {
mLogger.logDebug("No login information found for silent authentication");
return null;
}
final SimpleWaiter loginSilentWaiter = new SimpleWaiter();
final AtomicReference<ClientException> error = new AtomicReference<>();
final boolean waitForCallback = mAuthClient.loginSilent(new LiveAuthListener() {
@Override
public void onAuthComplete(final LiveStatus liveStatus,
final LiveConnectSession liveConnectSession,
final Object o) {
if (liveStatus == LiveStatus.NOT_CONNECTED) {
error.set(new ClientAuthenticatorException("Failed silent login, interactive login required",
OneDriveErrorCodes.AuthenticationFailure));
mLogger.logError(error.get().getMessage(), error.get());
} else {
mLogger.logDebug("Successful silent login");
}
loginSilentWaiter.signal();
}
@Override
public void onAuthError(final LiveAuthException e,
final Object o) {
OneDriveErrorCodes code = OneDriveErrorCodes.AuthenticationFailure;
if (e.getError().equals(SIGN_IN_CANCELLED_MESSAGE)) {
code = OneDriveErrorCodes.AuthenticationCancelled;
}
error.set(new ClientAuthenticatorException("Login silent authentication error", e, code));
mLogger.logError(error.get().getMessage(), error.get());
loginSilentWaiter.signal();
}
});
if (!waitForCallback) {
mLogger.logDebug("MSA silent auth fast-failed");
return null;
}
mLogger.logDebug("Waiting for MSA callback");
loginSilentWaiter.waitForSignal();
final ClientException exception = error.get();
if (exception != null) {
throw exception;
}
return getAccountInfo();
}
/**
* Log the current user out.
* @param logoutCallback The callback to be called when the logout is complete.
*/
@Override
public void logout(final ICallback<Void> logoutCallback) {
if (!mInitialized) {
throw new IllegalStateException("init must be called");
}
if (logoutCallback == null) {
throw new InvalidParameterException("logoutCallback");
}
mLogger.logDebug("Starting logout async");
mExecutors.performOnBackground(new Runnable() {
@Override
public void run() {
try {
logout();
mExecutors.performOnForeground((Void) null, logoutCallback);
} catch (final ClientException e) {
mExecutors.performOnForeground(e, logoutCallback);
}
}
});
}
/**
* Log the current user out.
* @throws ClientException An exception occurs if the logout was unable to complete for any reason.
*/
@Override
public synchronized void logout() throws ClientException {
if (!mInitialized) {
throw new IllegalStateException("init must be called");
}
mLogger.logDebug("Starting logout");
final SimpleWaiter logoutWaiter = new SimpleWaiter();
final AtomicReference<ClientException> error = new AtomicReference<>();
mAuthClient.logout(new LiveAuthListener() {
@Override
public void onAuthComplete(final LiveStatus liveStatus,
final LiveConnectSession liveConnectSession,
final Object o) {
mLogger.logDebug("Logout completed");
logoutWaiter.signal();
}
@Override
public void onAuthError(final LiveAuthException e, final Object o) {
error.set(new ClientAuthenticatorException("MSA Logout failed",
e,
OneDriveErrorCodes.AuthenticationFailure));
mLogger.logError(error.get().getMessage(), error.get());
logoutWaiter.signal();
}
});
mLogger.logDebug("Waiting for logout to complete");
logoutWaiter.waitForSignal();
mLogger.logDebug("Clearing all MSA Authenticator shared preferences");
final SharedPreferences prefs = getSharedPreferences();
prefs.edit()
.clear()
.putInt(VERSION_CODE_KEY, BuildConfig.VERSION_CODE)
.apply();
mUserId.set(null);
final ClientException exception = error.get();
if (exception != null) {
throw exception;
}
}
/**
* Gets the current account info for this authenticator.
* @return NULL if no account is available.
*/
@Override
public IAccountInfo getAccountInfo() {
final LiveConnectSession session = mAuthClient.getSession();
if (session == null) {
return null;
}
return new MyMSAAccountInfo(this, session, mLogger);
}
/**
* Gets the shared preferences for this authenticator.
* @return The shared preferences.
*/
private SharedPreferences getSharedPreferences() {
return mContext.getSharedPreferences(MSA_AUTHENTICATOR_PREFS, Context.MODE_PRIVATE);
}
}

View File

@@ -6,7 +6,7 @@ buildscript {
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.0"
classpath "com.android.tools.build:gradle:8.4.0"
}
}

View File

@@ -1 +1,2 @@
org.gradle.jvmargs=-Xmx1536m
android.useAndroidX=true

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

View File

@@ -1,13 +1,3 @@
package com.crocoapps.javafilestoragetest2;
import android.app.Application;
import android.test.ApplicationTestCase;
/**
* <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
*/
public class ApplicationTest extends ApplicationTestCase<Application> {
public ApplicationTest() {
super(Application.class);
}
}

View File

@@ -145,7 +145,9 @@ import java.util.ArrayList;
import java.util.List;
//import keepass2android.javafilestorage.DropboxCloudRailStorage;
import keepass2android.javafilestorage.DropboxV2Storage;
import keepass2android.javafilestorage.GoogleDriveAppDataFileStorage;
import keepass2android.javafilestorage.ICertificateErrorHandler;
import keepass2android.javafilestorage.JavaFileStorage;
import keepass2android.javafilestorage.JavaFileStorage.FileEntry;
import keepass2android.javafilestorage.PCloudFileStorage;
@@ -347,7 +349,7 @@ public class MainActivity extends Activity implements JavaFileStorage.FileStorag
fileList = fs.listFiles(path);
checkFileList(path, fileList, false, true); //second param indicates the file must be gone
Log.d("KP2AJ", "Delete a folder recursive");
Log.d("KP2AJ", "xDelete a folder recursive: " + subfolderPath);
fs.delete(subfolderPath);
Log.d("KP2AJ", "List files again to check if deleting the folder was successful:");
@@ -540,12 +542,12 @@ public class MainActivity extends Activity implements JavaFileStorage.FileStorag
static JavaFileStorage createStorageToTest(Context ctx, Context appContext, boolean simulateRestart) {
//storageToTest = new SftpStorage(ctx.getApplicationContext());
storageToTest = new PCloudFileStorage(ctx, "FLm22de7bdS", "pcloud", "pcloudtest");
//storageToTest = new PCloudFileStorage(ctx, "FLm22de7bdS", "pcloud", "pcloudtest");
//storageToTest = new SkyDriveFileStorage("000000004010C234", appContext);
//storageToTest = new GoogleDriveAppDataFileStorage();
/*storageToTest = new WebDavStorage(new ICertificateErrorHandler() {
storageToTest = new WebDavStorage(new ICertificateErrorHandler() {
@Override
public boolean onValidationError(String error) {
return false;
@@ -555,7 +557,7 @@ public class MainActivity extends Activity implements JavaFileStorage.FileStorag
public boolean alwaysFailOnValidationError() {
return false;
}
});*/
});
//storageToTest = new DropboxV2Storage(ctx,"4ybka4p4a1027n6", "1z5lv528un9nre8", !simulateRestart);
//storageToTest = new DropboxFileStorage(ctx,"4ybka4p4a1027n6", "1z5lv528un9nre8", !simulateRestart);

View File

@@ -15,7 +15,7 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:inputType="textNoSuggestions"
android:text="https://daigers.diskstation.me:5006/Keepass2Android/Apps/Keepass2Android/"
android:text="https://webdav.hidrive.ionos.com/users/philippcro"
android:hint="Server URL" />
</LinearLayout>
<EditText
@@ -23,7 +23,7 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="Keepass"
android:text="PhilippCro"
android:hint="@string/hint_username" />
<EditText
@@ -32,7 +32,7 @@
android:layout_height="wrap_content"
android:inputType="textPassword"
android:singleLine="true"
android:text="$T3st17$"
android:text="WSBa1wh4o4YyLK"
android:hint="@string/hint_pass"
android:importantForAccessibility="no" />

View File

@@ -7,7 +7,7 @@ buildscript {
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.0"
classpath "com.android.tools.build:gradle:8.4.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

View File

@@ -4,11 +4,13 @@ android {
namespace 'keepass2android.kp2akeytransform'
compileSdkVersion 33
defaultConfig {
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
minSdkVersion 21
targetSdkVersion 34
compileSdk 34
}

View File

@@ -5,7 +5,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.0"
classpath "com.android.tools.build:gradle:8.4.0"
}
}

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

View File

@@ -3,10 +3,12 @@ android {
namespace 'keepass2android.softkeyboard'
compileSdkVersion 33
defaultConfig {
minSdkVersion 18
minSdkVersion 21
compileSdk 34
targetSdk 34
}
buildTypes {

View File

@@ -33,11 +33,11 @@
<!-- Option to enable using nearby keys when correcting/predicting -->
<string name="hit_correction">Corregir errores de escritura</string>
<!-- Description for hit_correction -->
<string name="hit_correction_summary">Habilitar la introducción de corrección de errores</string>
<string name="hit_correction_summary">Habilitar corrección de errores de entrada</string>
<!-- Option to enable using nearby keys when correcting/predicting in landscape-->
<string name="hit_correction_land">Errores de introducción de datos en vista horizontal</string>
<!-- Description for hit_correction in landscape -->
<string name="hit_correction_land_summary">Habilitar la introducción de corrección de errores</string>
<string name="hit_correction_land_summary">Habilitar corrección de errores de entrada</string>
<!-- Option to automatically correct word on hitting space -->
<string name="auto_correction">Sugerencias de palabras</string>
<!-- Description for auto_correction -->

View File

@@ -47,15 +47,15 @@
<!-- Category title for text prediction -->
<string name="prediction_category">Instellingen voor woordsuggesties</string>
<!-- Description for text prediction -->
<string name="prediction_summary">Automatisch voltooien tijdens typen inschakelen</string>
<string name="prediction_summary">Automatisch aanvullen tijdens typen inschakelen</string>
<!-- Dialog title for auto complete choices -->
<string name="auto_complete_dialog_title">Automatisch voltooien</string>
<string name="auto_complete_dialog_title">Automatisch aanvullen</string>
<!-- Option to enable text prediction in landscape -->
<string name="prediction_landscape">Tekstveld vergroten</string>
<!-- Description for text prediction -->
<string name="prediction_landscape_summary">Woordsuggesties verbergen in liggende weergave</string>
<!-- Option to enable auto capitalization of sentences -->
<string name="auto_cap">Auto-hoofdlettergebruik</string>
<string name="auto_cap">Automatisch hoofdlettergebruik</string>
<!-- Description for auto cap -->
<string name="auto_cap_summary">Hoofdletter gebruiken aan het begin van een zin</string>
<!-- Option to enable auto punctuate -->
@@ -64,15 +64,15 @@
<!-- Option to enable quick fixes -->
<string name="quick_fixes">Snelle oplossingen</string>
<!-- Description for quick fixes -->
<string name="quick_fixes_summary">Hiermee worden veelvoorkomende typefouten gecorrigeerd</string>
<string name="quick_fixes_summary">Corrigeert veelgemaakte typefouten</string>
<!-- Option to enable showing suggestions -->
<string name="show_suggestions">Suggesties weergeven</string>
<!-- Description for show suggestions -->
<string name="show_suggestions_summary">Voorgestelde woorden weergeven tijdens typen</string>
<string name="show_suggestions_summary">Woordsuggesties tijdens het typen tonen</string>
<!-- Option to enable auto completion -->
<string name="auto_complete">Auto-aanvullen</string>
<!-- Description for auto completion -->
<string name="auto_complete_summary">Gemarkeerd woord automatisch invoegen met spatiebalk en interpunctie</string>
<string name="auto_complete_summary">Spatiebalk en interpunctie voegen automatisch gemarkeerd woord in</string>
<!-- Option to show/hide the settings key -->
<string name="prefs_settings_key">Instellingscode weergeven</string>
<!-- Array of the settings key mode values -->

View File

@@ -5,7 +5,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.0"
classpath "com.android.tools.build:gradle:8.4.0"
}
}

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

View File

@@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.0"
classpath "com.android.tools.build:gradle:8.4.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

View File

@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip

View File

@@ -18,6 +18,10 @@ android {
debuggable false
}
}
buildFeatures {
buildConfig true
}
compileOptions {
targetCompatibility 11
sourceCompatibility 11

View File

@@ -42,7 +42,7 @@
<string name="afc_pmsg_file_has_been_deleted">%1$s「%2$s」が削除されました</string>
<string name="afc_pmsg_filename_is_directory">「%1$s」はフォルダーです</string>
<string name="afc_pmsg_filename_is_invalid">ファイル名「%1$s」は無効です</string>
<string name="afc_pmsg_max_file_count_allowed">ファイルが多すぎます。最大: %1$,d</string>
<string name="afc_pmsg_max_file_count_allowed">…のファイルが多すぎます。最大: %1$,d</string>
<string name="afc_pmsg_unknown_error">不明なエラー: %1$s</string>
<string name="afc_root">ルート</string>
<string name="afc_title_advanced_selection">選択…</string>

View File

@@ -36,9 +36,9 @@
<string name="afc_pmsg_cannot_access_dir">Geen toegang tot \"%1$s\"</string>
<string name="afc_pmsg_cannot_create_folder">Kan map \"%1$s\" niet maken</string>
<string name="afc_pmsg_cannot_delete_file">Kan %1$s \"%2$s\" niet verwijderen</string>
<string name="afc_pmsg_confirm_delete_file">Weet je zeker dat je deze %1$s wilt verwijderen: \"%2$s\"?</string>
<string name="afc_pmsg_confirm_delete_file">Weet je zeker dat je dit wilt verwijderen: %1$s \"%2$s\"?</string>
<string name="afc_pmsg_confirm_replace_file">Het bestand \"%1$s\" bestaat al.\n\nWilt u het vervangen?</string>
<string name="afc_pmsg_deleting_file">%1$s \"%2$s\" verwijderen</string>
<string name="afc_pmsg_deleting_file">Verwijdert %1$s \"%2$s\" …</string>
<string name="afc_pmsg_file_has_been_deleted">%1$s \"%2$s\" is verwijderd</string>
<string name="afc_pmsg_filename_is_directory">\"%1$s\" is een map</string>
<string name="afc_pmsg_filename_is_invalid">Bestandsnaam \"%1$s\" is ongeldig</string>
@@ -56,15 +56,15 @@
<string name="afc_title_sort_by">Sorteer op…</string>
<string name="afc_yesterday">Gisteren</string>
<plurals name="afc_title_choose_directories">
<item quantity="one">Kies map&#8230;</item>
<item quantity="other">Kies mappen&#8230;</item>
<item quantity="one">Kies map</item>
<item quantity="other">Kies mappen</item>
</plurals>
<plurals name="afc_title_choose_files">
<item quantity="one">Kies bestand&#8230;</item>
<item quantity="other">Kies bestanden&#8230;</item>
<item quantity="one">Kies bestand</item>
<item quantity="other">Kies bestanden</item>
</plurals>
<plurals name="afc_title_choose_files_directories">
<item quantity="one">Kies bestand/ map&#8230;</item>
<item quantity="other">Kies bestanden/ mappen&#8230;</item>
<item quantity="one">Kies bestand/ map</item>
<item quantity="other">Kies bestanden/ mappen</item>
</plurals>
</resources>

View File

@@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.4.0"
classpath "com.android.tools.build:gradle:8.4.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files

View File

@@ -1,6 +1,6 @@
#Tue Sep 20 20:32:06 CEST 2016
#Tue Oct 08 15:41:22 CEST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip

View File

@@ -27,6 +27,8 @@ namespace keepass2android
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ctx, Android.Resource.Style.ThemeHoloLightDialog));
builder.SetTitle(ctx.GetString(Resource.String.ChangeLog_title));
List<string> changeLog = new List<string>{
BuildChangelogString(ctx, new List<int>{Resource.Array.ChangeLog_1_11,Resource.Array.ChangeLog_1_11_net}, "1.11"),
BuildChangelogString(ctx, Resource.Array.ChangeLog_1_10, "1.10"),
BuildChangelogString(ctx, Resource.Array.ChangeLog_1_09e, "1.09e"),
BuildChangelogString(ctx, Resource.Array.ChangeLog_1_09d, "1.09d"),
BuildChangelogString(ctx, Resource.Array.ChangeLog_1_09c, "1.09c"),
@@ -121,21 +123,32 @@ namespace keepass2android
}
private static string BuildChangelogString(Context ctx, int changeLogResId, string version)
{
string result = "Version " + version + "\n";
{
return BuildChangelogString(ctx, new List<int>() { changeLogResId }, version);
}
private static string BuildChangelogString(Context ctx, List<int> changeLogResIds, string version)
{
string result = "Version " + version + "\n";
string previous = "";
foreach (var item in ctx.Resources.GetStringArray(changeLogResId))
foreach (var changeLogResId in changeLogResIds)
{
if (item == previous) //there was some trouble with crowdin translations, remove duplicates
continue;
result += " * " + item + "\n";
previous = item;
foreach (var item in ctx.Resources.GetStringArray(changeLogResId))
{
if (item == previous) //there was some trouble with crowdin translations, remove duplicates
continue;
result += " * " + item + "\n";
previous = item;
}
}
return result;
return result;
}
}
private const string HtmlStart = @"<html>
private const string HtmlStart = @"<html>
<head>
<style type='text/css'>
a { color:#000000 }

View File

@@ -32,6 +32,7 @@ using Android.Text.Method;
using System.Globalization;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using Android.Content.PM;
using Android.Webkit;
using Android.Graphics;
@@ -49,7 +50,9 @@ using PluginTOTP;
using File = Java.IO.File;
using Uri = Android.Net.Uri;
using keepass2android.fileselect;
using KeeTrayTOTP.Libraries;
using Boolean = Java.Lang.Boolean;
using Android.Util;
namespace keepass2android
{
@@ -286,6 +289,8 @@ namespace keepass2android
extraGroup.AddView(view.View);
}
SetPasswordStyle();
//update the Entry output in the App database and notify the CopyToClipboard service
if (App.Kp2a.LastOpenedEntry != null)
@@ -488,10 +493,11 @@ namespace keepass2android
_pluginFieldReceiver = new PluginFieldReceiver(this);
RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField));
new Thread(NotifyPluginsOnOpen).Start();
var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen);
notifyPluginsOnOpenThread.Start();
//the rest of the things to do depends on the current app task:
AppTask.CompleteOnCreateEntryActivity(this);
AppTask.CompleteOnCreateEntryActivity(this, notifyPluginsOnOpenThread);
}
private void RemoveFromHistory()
@@ -664,7 +670,7 @@ namespace keepass2android
EditModeBase editMode = new DefaultEdit();
if (KpEntryTemplatedEdit.IsTemplated(App.Kp2a.CurrentDb, this.Entry))
editMode = new KpEntryTemplatedEdit(App.Kp2a.CurrentDb, this.Entry);
foreach (var key in editMode.SortExtraFieldKeys(Entry.Strings.GetKeys().Where(key=> !PwDefs.IsStandardField(key))))
foreach (var key in editMode.SortExtraFieldKeys(Entry.Strings.GetKeys().Where(key=> !PwDefs.IsStandardField(key) && key != Kp2aTotp.TotpKey)))
{
if (editMode.IsVisible(key))
{
@@ -715,7 +721,7 @@ namespace keepass2android
var stringView = new ExtraStringView(layout, valueView, valueViewVisible, keyView);
_stringViews.Add(key, stringView);
RegisterTextPopup(valueViewContainer, valueViewContainer.FindViewById(Resource.Id.extra_vdots), key, isProtected);
RegisterTextPopup(valueViewContainer, valueViewContainer.FindViewById(Resource.Id.extra_vdots), key, isProtected, layout);
return stringView;
@@ -725,6 +731,7 @@ namespace keepass2android
private List<IPopupMenuItem> RegisterPopup(string popupKey, View clickView, View anchorView)
{
clickView.Click += (sender, args) =>
{
ShowPopup(anchorView, popupKey);
@@ -840,7 +847,7 @@ namespace keepass2android
{
if (!_showPassword.ContainsKey(protectedTextView))
{
_showPassword[protectedTextView] = fieldKey == UpdateTotpTimerTask.TotpKey ? _showTotpDefault : _showPasswordDefault;
_showPassword[protectedTextView] = fieldKey == Kp2aTotp.TotpKey ? _showTotpDefault : _showPasswordDefault;
}
var protectedTextviewGroup = new ProtectedTextviewGroup { ProtectedField = protectedTextView, VisibleProtectedField = visibleTextView};
_protectedTextViews.Add(protectedTextviewGroup);
@@ -937,34 +944,41 @@ namespace keepass2android
iv.SetImageDrawable(Resources.GetDrawable(Resource.Drawable.ic00));
}
SupportActionBar.Title = Entry.Strings.ReadSafe(PwDefs.TitleField);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.Title = SprEngine.Compile(SupportActionBar.Title, new SprContext(Entry, App.Kp2a.CurrentDb.KpDatabase, SprCompileFlags.All));
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetHomeButtonEnabled(true);
PopulateGroupText (Resource.Id.entry_group_name, Resource.Id.entryfield_group_container, KeyGroupFullPath);
PopulateStandardText(Resource.Id.entry_user_name, Resource.Id.entryfield_container_username, PwDefs.UserNameField);
PopulateStandardText(Resource.Id.entry_url, Resource.Id.entryfield_container_url, PwDefs.UrlField);
PopulateStandardText(new List<int> { Resource.Id.entry_password, Resource.Id.entry_password_visible}, Resource.Id.entryfield_container_password, PwDefs.PasswordField);
PopulateStandardText(new List<int> { Resource.Id.entry_totp, Resource.Id.entry_totp_visible }, Resource.Id.entryfield_container_totp, Kp2aTotp.TotpKey);
PopulateStandardText(new List<int> { Resource.Id.entry_password, Resource.Id.entry_password_visible}, Resource.Id.entryfield_container_password, PwDefs.PasswordField);
RegisterProtectedTextView(PwDefs.PasswordField, FindViewById<TextView>(Resource.Id.entry_password), FindViewById<TextView>(Resource.Id.entry_password_visible));
RegisterProtectedTextView(Kp2aTotp.TotpKey, FindViewById<TextView>(Resource.Id.entry_totp), FindViewById<TextView>(Resource.Id.entry_totp_visible));
RegisterTextPopup(FindViewById<RelativeLayout> (Resource.Id.groupname_container),
FindViewById (Resource.Id.entry_group_name), KeyGroupFullPath);
RegisterTextPopup(FindViewById<RelativeLayout> (Resource.Id.groupname_container),
FindViewById (Resource.Id.entry_group_name), KeyGroupFullPath,
FindViewById(Resource.Id.entryfield_group_container));
RegisterTextPopup(FindViewById<RelativeLayout>(Resource.Id.username_container),
FindViewById(Resource.Id.username_vdots), PwDefs.UserNameField);
FindViewById(Resource.Id.username_vdots), PwDefs.UserNameField,
FindViewById(Resource.Id.entryfield_container_username));
RegisterTextPopup(FindViewById<RelativeLayout>(Resource.Id.url_container),
FindViewById(Resource.Id.url_vdots), PwDefs.UrlField)
FindViewById(Resource.Id.url_vdots), PwDefs.UrlField,
FindViewById(Resource.Id.entryfield_container_url))
.Add(new GotoUrlMenuItem(this, PwDefs.UrlField));
RegisterTextPopup(FindViewById<RelativeLayout>(Resource.Id.password_container),
FindViewById(Resource.Id.password_vdots), PwDefs.PasswordField);
FindViewById(Resource.Id.password_vdots), PwDefs.PasswordField,
FindViewById(Resource.Id.entryfield_container_password));
RegisterTextPopup(FindViewById<RelativeLayout>(Resource.Id.totp_container),
FindViewById(Resource.Id.totp_vdots), Kp2aTotp.TotpKey, FindViewById(Resource.Id.entryfield_container_totp));
PopulateText(Resource.Id.entry_created, Resource.Id.entryfield_container_created, getDateTime(Entry.CreationTime));
PopulateText(Resource.Id.entry_created, Resource.Id.entryfield_container_created, getDateTime(Entry.CreationTime));
PopulateText(Resource.Id.entry_modified, Resource.Id.entryfield_container_modified, getDateTime(Entry.LastModificationTime));
if (Entry.Expires)
@@ -978,7 +992,8 @@ namespace keepass2android
}
PopulateStandardText(Resource.Id.entry_comment, Resource.Id.entryfield_container_comment, PwDefs.NotesField);
RegisterTextPopup(FindViewById<RelativeLayout>(Resource.Id.comment_container),
FindViewById(Resource.Id.comment_vdots), PwDefs.NotesField);
FindViewById(Resource.Id.comment_vdots), PwDefs.NotesField,
FindViewById(Resource.Id.entryfield_container_comment));
PopulateText(Resource.Id.entry_tags, Resource.Id.entryfield_container_tags, concatTags(Entry.Tags));
PopulateText(Resource.Id.entry_override_url, Resource.Id.entryfield_container_overrideurl, Entry.OverrideUrl);
@@ -991,6 +1006,40 @@ namespace keepass2android
SetPasswordStyle();
}
private async Task UpdateTotpCountdown()
{
if (App.Kp2a.LastOpenedEntry == null)
return;
var totpData = new Kp2aTotp().TryGetTotpData(App.Kp2a.LastOpenedEntry);
if (totpData == null || !totpData.IsTotpEntry)
return;
var totpProvider = new TOTPProvider(totpData);
var progressBar = FindViewById<ProgressBar>(Resource.Id.TotpCountdownProgressBar);
int lastSecondsLeft = -1;
while (!isPaused && progressBar != null)
{
int secondsLeft = totpProvider.Timer;
if (secondsLeft != lastSecondsLeft)
{
lastSecondsLeft = secondsLeft;
// Update the progress bar on the UI thread
RunOnUiThread(() =>
{
progressBar.Progress = secondsLeft;
progressBar.Max = totpProvider.Duration;
});
}
await Task.Delay(1000);
}
}
private void PopulatePreviousVersions()
{
@@ -1041,12 +1090,12 @@ namespace keepass2android
SendBroadcast(i);
}
}
private List<IPopupMenuItem> RegisterTextPopup(View container, View anchor, string fieldKey)
private List<IPopupMenuItem> RegisterTextPopup(View container, View anchor, string fieldKey, View outerContainer)
{
return RegisterTextPopup(container, anchor, fieldKey, Entry.Strings.GetSafe(fieldKey).IsProtected);
return RegisterTextPopup(container, anchor, fieldKey, Entry.Strings.GetSafe(fieldKey).IsProtected || fieldKey == Kp2aTotp.TotpKey, outerContainer);
}
private List<IPopupMenuItem> RegisterTextPopup(View container, View anchor, string fieldKey, bool isProtected)
private List<IPopupMenuItem> RegisterTextPopup(View container, View anchor, string fieldKey, bool isProtected, View outerContainer)
{
string popupKey = Strings.PrefixString + fieldKey;
var popupItems = RegisterPopup(
@@ -1056,10 +1105,20 @@ namespace keepass2android
popupItems.Add(new CopyToClipboardPopupMenuIcon(this, _stringViews[fieldKey], isProtected));
if (isProtected)
{
var valueView = container.FindViewById<TextView>(fieldKey == PwDefs.PasswordField ? Resource.Id.entry_password : Resource.Id.entry_extra);
var valueView = container.FindViewById<TextView>(fieldKey switch
{
PwDefs.PasswordField => Resource.Id.entry_password,
Kp2aTotp.TotpKey => Resource.Id.entry_totp,
_ => Resource.Id.entry_extra
});
popupItems.Add(new ToggleVisibilityPopupMenuItem(this, valueView));
}
//copy text to clipboard when the outer container (including the field icon on the left) or the inner container
// (containing the textview and the vertical dots for the popup menu) is long-clicked.
RegisterCopyOnLongClick(outerContainer, fieldKey, isProtected);
RegisterCopyOnLongClick(container, fieldKey, isProtected);
if (fieldKey != PwDefs.UrlField //url already has a go-to-url menu
&& (_stringViews[fieldKey].Text.StartsWith(KeePass.AndroidAppScheme)
|| _stringViews[fieldKey].Text.StartsWith("http://")
@@ -1070,6 +1129,11 @@ namespace keepass2android
return popupItems;
}
private void RegisterCopyOnLongClick(View container, string fieldKey, bool isProtected)
{
container.LongClick += (sender, args) =>
CopyToClipboardService.CopyValueToClipboardWithTimeout(this, _stringViews[fieldKey].Text, isProtected);
}
private void ShowPopup(View anchor, string popupKey)
@@ -1136,6 +1200,8 @@ namespace keepass2android
value = SprEngine.Compile(value, new SprContext(Entry, App.Kp2a.CurrentDb.KpDatabase, SprCompileFlags.All));
PopulateText(viewIds, containerViewId, value);
_stringViews.Add(key, new StandardStringView(viewIds, containerViewId, this));
}
private void PopulateGroupText(int viewId, int containerViewId, String key)
@@ -1283,11 +1349,16 @@ namespace keepass2android
return base.OnPrepareOptionsMenu(menu);
}
bool isPaused = false;
protected override void OnPause()
{
base.OnPause();
isPaused = true;
}
private void UpdateTogglePasswordMenu()
private void UpdateTogglePasswordMenu()
{
IMenuItem togglePassword = _menu.FindItem(Resource.Id.menu_toggle_pass);
if (_showPassword.Values.All(x => x))
@@ -1324,7 +1395,9 @@ namespace keepass2android
ClearCache();
base.OnResume();
_activityDesign.ReapplyTheme();
}
isPaused = false;
Task.Run(UpdateTotpCountdown);
}
public void ClearCache()
{

View File

@@ -39,6 +39,9 @@ using Android.Support.V4.View;
using Android.Views.Autofill;
using CursorAdapter = Android.Support.V4.Widget.CursorAdapter;
using Object = Java.Lang.Object;
using Android.Text;
using keepass2android.search;
using KeeTrayTOTP.Libraries;
namespace keepass2android
{
@@ -115,6 +118,8 @@ namespace keepass2android
FindViewById(Resource.Id.fabAddNewEntry).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabAddNew).Visibility = (showAddGroup || showAddEntry) ? ViewStates.Visible : ViewStates.Gone;
FindViewById(Resource.Id.fabSearch).Visibility = (showAddGroup || showAddEntry) ? ViewStates.Visible : ViewStates.Gone;
FindViewById(Resource.Id.fabTotpOverview).Visibility = CanShowTotpFab() ? ViewStates.Visible : ViewStates.Gone;
}
UpdateBottomBarElementVisibility(Resource.Id.insert_element, false);
@@ -262,6 +267,7 @@ namespace keepass2android
private bool hasCalledOtherActivity = false;
private IMenuItem searchItem;
private IMenuItem searchItemDummy;
private bool isPaused;
protected override void OnResume()
{
@@ -281,8 +287,39 @@ namespace keepass2android
RefreshIfDirty();
SetSearchItemVisibility();
}
isPaused = false;
System.Threading.Tasks.Task.Run(UpdateTotpCountdown);
}
private async System.Threading.Tasks.Task UpdateTotpCountdown()
{
while (!isPaused )
{
RunOnUiThread(() =>
{
var listView = FragmentManager.FindFragmentById<GroupListFragment>(Resource.Id.list_fragment)
.ListView;
if (listView != null)
{
int count = listView.Count;
for (int i = 0; i < count; i++)
{
var item = listView.GetChildAt(i);
if (item is PwEntryView)
{
var entryView = (PwEntryView)item;
entryView.UpdateTotp();
}
}
}
});
await System.Threading.Tasks.Task.Delay(1000);
}
}
private void UpdateInfotexts()
{
@@ -390,6 +427,13 @@ namespace keepass2android
}
protected override void OnPause()
{
base.OnPause();
isPaused = true;
}
private void UpdatePostNotificationsPermissionInfo(bool hideForever=false)
{
const string prefsKey = "DidShowNotificationPermissionInfo";
@@ -572,6 +616,25 @@ namespace keepass2android
};
}
if (FindViewById(Resource.Id.fabSearch) != null)
{
FindViewById(Resource.Id.fabSearch).Click += (sender, args) =>
{
if (searchView?.Iconified != false)
ActivateSearchView();
else
searchView.Iconified = true;
};
}
if (FindViewById(Resource.Id.fabTotpOverview) != null)
{
FindViewById(Resource.Id.fabTotpOverview).Click += (sender, args) =>
{
SearchTotpResults.Launch(this, this.AppTask);
};
}
if (FindViewById(Resource.Id.fabCancelAddNew) != null)
{
FindViewById(Resource.Id.fabAddNew).Click += (sender, args) =>
@@ -580,6 +643,8 @@ namespace keepass2android
FindViewById(Resource.Id.fabAddNewGroup).Visibility = AddGroupEnabled ? ViewStates.Visible : ViewStates.Gone;
FindViewById(Resource.Id.fabAddNewEntry).Visibility = AddEntryEnabled ? ViewStates.Visible : ViewStates.Gone;
FindViewById(Resource.Id.fabAddNew).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabSearch).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabTotpOverview).Visibility = ViewStates.Gone;
};
FindViewById(Resource.Id.fabCancelAddNew).Click += (sender, args) =>
@@ -588,6 +653,8 @@ namespace keepass2android
FindViewById(Resource.Id.fabAddNewGroup).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabAddNewEntry).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabAddNew).Visibility = ViewStates.Visible;
FindViewById(Resource.Id.fabSearch).Visibility = ViewStates.Visible;
FindViewById(Resource.Id.fabTotpOverview).Visibility = CanShowTotpFab() ? ViewStates.Visible : ViewStates.Gone;
};
@@ -667,7 +734,12 @@ namespace keepass2android
}
protected virtual bool CanShowTotpFab()
{
return App.Kp2a.CurrentDb.HasTotpEntries && Group == App.Kp2a.CurrentDb.Root;
}
private bool IsTimeForInfotext(out string lastInfoText)
{
DateTime lastDisplayTime = new DateTime(_prefs.GetLong("LastInfoTextTime", 0));
@@ -1028,6 +1100,7 @@ namespace keepass2android
searchView.Iconified = false;
AppTask.CanActivateSearchViewOnStart = false;
}
@@ -1067,6 +1140,15 @@ namespace keepass2android
public abstract ElementAndDatabaseId FullGroupId { get; }
public virtual bool MayPreviewTotp
{
get
{
return !PreferenceManager.GetDefaultSharedPreferences(this).GetBoolean(GetString(Resource.String.masktotp_key),
Resources.GetBoolean(Resource.Boolean.masktotp_default));
}
}
public override bool OnPrepareOptionsMenu(IMenu menu)
{
@@ -1267,6 +1349,7 @@ namespace keepass2android
FindViewById(Resource.Id.fabAddNewGroup).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabAddNewEntry).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabAddNew).Visibility = ViewStates.Gone;
FindViewById(Resource.Id.fabSearch).Visibility = ViewStates.Gone;
UpdateBottomBarElementVisibility(Resource.Id.insert_element, true);
UpdateBottomBarElementVisibility(Resource.Id.cancel_insert_element, true);
@@ -1330,6 +1413,7 @@ namespace keepass2android
}
ListView.ItemClick += (sender, args) => ((GroupListItemView)args.View).OnClick();
StyleListView();

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="197"
android:versionName="1.09e-r7"
android:versionCode="200"
android:versionName="1.11-r0"
package="keepass2android.keepass2android"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="197"
android:versionName="1.09e-r7"
android:versionCode="200"
android:versionName="1.11-r0"
package="keepass2android.keepass2android_nonet"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto">
@@ -40,7 +40,7 @@
</intent>
</queries>
<uses-sdk android:minSdkVersion="18" android:targetSdkVersion="33" />
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<permission android:description="@string/permission_desc2" android:icon="@drawable/ic_launcher_offline" android:label="KP2A entry search" android:name="keepass2android.keepass2android_nonet.permission.KP2aInternalSearch" android:protectionLevel="signature" />
<permission android:description="@string/permission_desc3" android:icon="@drawable/ic_launcher_offline" android:label="KP2A choose autofill dataset" android:name="keepass2android.keepass2android_nonet.permission.Kp2aChooseAutofill" android:protectionLevel="signature" />
<application

View File

@@ -140,7 +140,7 @@ namespace keepass2android
//will return the results later
Intent i = new Intent(this, typeof (SelectCurrentDbActivity));
//don't show user notifications when an entry is opened.
var task = new SearchUrlTask() {UrlToSearchFor = _requestedUrl, ShowUserNotifications = ShowUserNotificationsMode.WhenTotp};
var task = new SearchUrlTask() {UrlToSearchFor = _requestedUrl, ShowUserNotifications = ActivationCondition.WhenTotp, ActivateKeyboard = ActivationCondition.Never };
task.ToIntent(i);
StartActivityForResult(i, RequestCodeQuery);
_startedQuery = true;

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -61,6 +61,28 @@
android:layout_width="wrap_content"
android:text="group detail"
style="@style/GroupDetailInSearchResult" />
<LinearLayout
android:id="@+id/totp_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/totp_text"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:text=""/>
<ProgressBar
android:id="@+id/TotpCountdownProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="30dp" />
</LinearLayout>
</LinearLayout>
<ImageView android:id="@+id/right_arrow"

View File

@@ -184,6 +184,68 @@
</RelativeLayout>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/entryfield_container_totp"
style="@style/EntryEditSingleLine_container">
<ImageView
style="@style/EntryEditSingleLine_ImageView"
android:src="@drawable/ic_entry_totp" />
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<!-- TOTP -->
<TextView
android:id="@+id/entry_totp_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/TOTP"
style="@style/EntryFieldHeader" />
<RelativeLayout
android:id="@+id/totp_container"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal"
android:clickable="true"
android:background="?android:attr/selectableItemBackground">
<ImageView
android:id="@+id/totp_vdots"
android:layout_width="wrap_content"
android:layout_height="15dp"
android:src="@drawable/vdots"
android:gravity="right|bottom"
android:layout_alignParentRight="true" />
<TextView
android:id="@+id/entry_totp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:typeface="monospace"
android:layout_toLeftOf="@id/totp_vdots"
style="@style/EntryItem" />
<TextView
android:id="@+id/entry_totp_visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/totp_vdots"
style="@style/EntryItem" />
</RelativeLayout>
<ProgressBar
android:id="@+id/TotpCountdownProgressBar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="30dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/entryfield_container_comment"
style="@style/EntryEditSingleLine_container">

View File

@@ -400,5 +400,23 @@
android:layout_marginRight="16dp"
android:layout_marginBottom="160dp"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabSearch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom|right"
android:src="@drawable/ic_fab_search"
android:layout_marginRight="16dp"
android:layout_marginBottom="88dp"
android:visibility="gone"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabTotpOverview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|bottom|right"
android:src="@drawable/ic_fab_totp"
android:layout_marginRight="16dp"
android:layout_marginBottom="160dp"
android:visibility="gone"/>
</android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

View File

@@ -22,8 +22,8 @@
<string name="short_app_name_nonet">KP2A Offline</string>
<string name="app_timeout">مهلة التطبيق</string>
<string name="app_timeout_summary">المدة الزمنية قبل تأمين قاعدة البيانات في حال كان التطبيق غير نشط.</string>
<string name="kill_app_label">إنهاء عملية التطبيق</string>
<string name="show_kill_app">زر الإغلاق</string>
<string name="kill_app_label">إنهاء عملية التطبيق</string>
<string name="show_kill_app_summary">عرض زر في شاشة كلمة المرور للإقاف معالجة التطبيق (للمستخدمين المتخوفين)</string>
<string name="application">التطبيق</string>
<string name="application_settings">إعدادات التطبيق</string>
@@ -611,18 +611,6 @@
<string name="Continue">استمر</string>
<string name="NoFilenameWarning">الـ URI المدرجة لا تبدو اسم ملف. هل أنت متأكد من أن هذا ملف صحيح؟</string>
<string name="FirstInvalidCompositeKeyError">تركيبة مفتاح المرور غير صالحة! يرجى المحاولة مجدداً.</string>
<string name="RepeatedInvalidCompositeKeyHelp">تركيبة مفتاح المرور غير صالحة! حاول الخطوات التالية لفتح قاعدة بياناتك:\n
•تأكد من ادخالك لكلمة مرورك بصحة. ايقونة العين تكشف الكلمة.\n
•تأكد من تحديدك لنوع كلمة المرور الصحيح. هذا عليه ان يطابق النوع الذي أستخدم عند تأليف القاعدة لأول مرة.\n
•تأكد انك اخترت ملف قاعدة البيانات الصحيح.
</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
&#8226; تلميح: إذا كنت تعتقد أن ملف قاعدة البيانات الخاص بك قد يكون فاسدا أو أنك لا تتذكر المفتاح الرئيسي بعد تعديله، يمكنك محاولة آخر إصدار ملف فتح بنجاح عن طريق النقر فوق \"%1$s\" واختيار النسخة الاحتياطية المحلية.</string>
<string name="HintLocalBackupOtherError"> \n
&#8226; تلميح: قام Keepass2Android بتخزين آخر إصدار فتح للملف بنجاح على وحدة التخزين الداخلية. يمكنك فتحه بالنقر على \"%1$s\" واختيار النسخة الاحتياطية المحلية.
</string>
<string name="CorruptDatabaseHelp">الملف معطوب.\n
هنا هي بعض التلميحات التي قد تساعد على تشخيص المسألة: \n إن قمت بنسخ الملف عبر USB (وضع الخطة المتوسطة الأجل)، الرجاء المحاولة مرة أخرى باستخدام أدوات مثل MyPhoneExplorer. الخطة المتوسطة الأجل تقتطع الملفات في بعض الحالات. \n • إذا تعذر عليك فتح الملف من نفس الموقع على جهاز الكمبيوتر الخاص بك، فمن المحتمل جداً أن الملف معطوب فعلا. الرجاء استخدام نسخة احتياطية من قاعدة البيانات. إذا كنت تفترض أن Keepass2Android قد أتلف الملف، الرجاء الاتصال بالمساعدة. \n • إذا تمكنت من فتح الملف على جهاز الكمبيوتر الخاص بك، الرجاء الاتصال بالمساعدة. يمكنك محاولة حفظه باستخدام إعدادات مختلفة (مثلا، غير مضغوط) على جهاز الكمبيوتر وإعادة محاولة فتحه في Keepass2Android. </string>
<string name="open_other_db">فتح قاعدة بيانات أخرى…</string>
<string name="select_database">حدد قاعدة البيانات</string>
<string name="configure_child_dbs">تكوين قواعد بيانات الأطفال…</string>
@@ -679,272 +667,7 @@
<item>قم بالتبديل إلى API BometricPrompt لتحسين تجربة المستخدم مع فتح بصمة الإصبع والسماح باستخدام إلغاء قفل الوجه، على سبيل المثال على Pixel 4.</item>
<item>إصلاح الأخطاء</item>
</string-array>
<string name="ChangeLog_1_07b"> الإصدار 1. 7b\n
* تحسين أداء أرغون2 باستخدام التنفيذ المحلي (شكراً لشيه - هسوان!\n
* السماح بتعطيل بصمة الإصبع بالنقر على أيقونة بصمة الإصبع (تجنب مشكلة مع قراء بصمة الإصبع أسفل الشاشة، شكرا للماركودالاس!\n
* استعادة موضع المؤشر عند تبديل رؤية كلمة المرور (بفضل DDoSolitary!\n
* إدخال تحسينات على تطبيق pCloud (بفضل gilbsgilps مرة أخرى!\n
* إضافة دعم تلقائي للعديد من المتصفحات الأخرى \n
* تنفيذ جديد لـ OneDrive: يشمل دعم OneDrive للأعمال التجارية، الملفات المشتركة، نطاقات الوصول المحددة، العديد من الحسابات وإصلاح المشكلات مع الوصول دون اتصال\n
* إصلاحات الشوائب
</string>
<string name="ChangeLog_1_07"> الإصدار 1. 7\n
* إصلاحات لتعطل الأندرويد 9\nفي سامسونج
* السماح بفتح أكثر من قاعدة بيانات واحدة، متوافق مع KeeAutoExec\n
* SFTP: السماح بمصادقة المفتاح العمومي، تحقق مما إذا كان مفتاح المضيف قد تغير\n
* تقديم دعم pCloud - بفضل gilbsgilb!\n
* جعل دعم Nextcloud صريحا\n
* تحسين حفظ وتحديث مرفقات الدخول\n
* المزيد من الخيارات لتكييف السلوك مع التفضيلات الشخصية\n
* SSL: شهادات المستخدم الائتماني\n
* تحسين التعبئة التلقائية (يعمل الآن مع Firefox)، السماح بتقليل النوافذ المنبثقة)\n
* إصلاحات الشوائب\n
</string>
<string name="ChangeLog_1_06"> الإصدار 1. 6\n
* التبديل إلى ykDroid بدلاً من YubiChallenge كتطبيق لتحدي Yubikey - Response.\n
* تنفيذ الدعم للتحدي على نمط KeepassXC. ملاحظة: يجب أن يكون تنسيق قاعدة البيانات KDBX4!\n
* رفض تحميل الملفات المحذوفة من Google Drive\n
* تبديل تطبيق TLS لـ FTPS ، إضافة العمل إلى مشكلة JSch مع خوادم تدعم gssapi-مع mic\n
* إصلاحات الشوائب\n
</string>
<string name="ChangeLog_1_05"> الإصدار 1. 5\n
* استخدام قنوات الإشعار لنظام أندرويد 8، السماح بالتكوين من خلال إعدادات النظام\n
* إظهار رمز الإدخال في التنبيهات\n
* استخدام أيقونات التكيف للأندرويد 8، استخدام أيقونة مشغل الجولة للأندرويد 7\n
* السماح بتنشيط البحث عند فتح القفل (انظر الإعدادات)\n
* غيّر طريقة كتابة الملفات من خلال إطار الوصول إلى التخزين، إصلاح المشكلات مع تحديث الملفات على Google Drive التي تم فتحها من خلال منتقي ملفات النظام\n
* إضافة بعض نصوص المعلومات لتجنب بعض سوء الفهم الشائعة\n
* إنشاء نسخ احتياطية محلية لقواعد البيانات المفتوحة بنجاح للحد من خطر فقدان البيانات\n
* تم تحديث JSch لدعم المزيد من شفرات SSH الأحدث\n
* السماح بتعديل إعدادات الاتصال، e. . عند تغيير كلمة مرور WebDav\n
* تم إضافة دعم لوضع كلمة المرور الثابتة لـ Yubikey Neo\n
* السماح بتعطيل اقتراح التعبئة التلقائية\n
* تسرب البيانات الثابتة إلى logcat\n
* إصلاحات الشوائب\n
</string>
<string name="ChangeLog_1_04b"> الإصدار 1.04b\n
* تجنب الأعطال عندما يحاول المستخدم تمكين التعبئة التلقائية على أجهزة Huawei\n
</string>
<string name="ChangeLog_1_04"> الإصدار 1.04\n
* إضافة خدمة التعبئة التلقائية للأندرويد 8.0 وما بعد.\n
* تم ترقية المكتبات، بناء الأدوات والإصدار المستهدف SDK.\n
</string>
<string name="ChangeLog_1_03"> الإصدار 1.03\n
* إزالة خدمة الوصول إلى التعبئة التلقائية كما هو مطلوب من جوجل. الرجاء الاطلاع على إعدادات الوصول إلى كلمة المرور للعثور على إضافة تكرارية للوظيفة السابقة.\n
* أضيفت تطبيقات الطرف الثالث كخيار تخزين مرة أخرى\n
* مشاهدة الصور المتكاملة لعرض الصور المرفقة دون نقلها إلى تطبيقات أخرى\n
* تم ترقية OkHttp لإصلاح المشكلات مع بعض الاتصالات\n
* دعم إدخالات KeeTrayTOTP. يدعم الآن إدخالات Steam\n
</string>
<string name="ChangeLog_1_02"> الإصدار 1.02\n
* عدة تحسينات أمنية. شكرا جزيلا على التقرير الأمني الذي أعده jean-baptiste.cayrou@thalesgroup.com و vincent.fargues@thalesgroup. اوم و لتعاونهم!\n
* دعم تطبيق KeyboardSwapplugin (انظر خيارات الوصول إلى كلمة المرور): يسمح بتبديل طريقة الإدخال تلقائياً على الأجهزة غير المجذرة. شكراً لمشعل رحمان من مطوري XDA-developers لجعل هذا ممكناً.\n
* إصلاح خدمة إمكانية الوصول مع إصدارات كروم الأخيرة\n
* إصلاح لإزالة بيانات بصمات الأصابع بلا داع\n
* إصلاح الأعطال الثانوية\n
* تحديث Dropbox SDK لضمان التوافق في المستقبل\n
* إزالة الإبلاغ عن الأخطاء من خلال تصورات Xamarin\n
* تحديث أدوات البناء\n
</string>
<string name="ChangeLog_1_01g"> الإصدار 1. 1-g\n
* إصلاح الأعطال عند محاولة العمل دون اتصال\n
* إصلاح لترميز بيانات اعتماد FTP(S) بشكل غير صحيح\n
* إصلاح الأعطال عند استخدام OneDrive وعلى إصدارات الأندرويد الأقدم\n
* عرض الأوقات المحلية في شاشة الدخول\n
</string>
<string name="ChangeLog_1_01d"> الإصدار 1. 1-d\n
* إصلاح قائمة ملفات OneDrive\n
* السماح بتجاهل أخطاء الشهادة أيضًا عندما فشل التحقق من اسم المضيف (غير موصى به للاستخدام في الإنتاج)\n
* إصلاح لفتح القفل السريع في بعض الأحيان على الرغم من رمز الفتح الصحيح\n
</string>
<string name="ChangeLog_0_9_8c">الإصدار 0.9.8c
* إصلاح مشكلة ضعف طبقة المقابس الآمنة (SSL) في Microsoft Live SDK (تستخدم عند الوصول إلى الملفات عبر OneDrive)
* إصلاح بعض الأخطاء: الإصدار السابق يحتوي على طرقتين للإدخال (واحدة تحطمت) </string>
<string name="ChangeLog_1_01">الإصدار 1.01
* إضافة دعم لصيغة KDBX-4 الجديدة (متوافق مع Keepass 2.35) ومتضمن اشتقاق مفتاح Argon2 و تشفير ChaCha20.
* إعادة تنفيذ لتخزين ملفات WebDav, الآن يسمح بتصفح الملفات ويدعم التشفير الجديد.
* إعادة تنفيذ لتخزين ملفات FTP, يسمح الآن بتصفح الملفات ويدعم تشفير (FTPS).
* التحديث ل OneDrive SDK ( المستخدم سابقاً من SDK لم يعد محدث).
* التحديث ل Dropbox SDK الإصدار 2 ( تم إهمال المستخدم سابقاً من SDK الإصدار 1).
*إضافة دعم ل OwnCloud.
* طلب إذن للتخزين قبل فتح الملفات المحلية
</string>
<string name="ChangeLog_1_0_0e"> الإصدار 1.0. e\n
* إصلاح لفتح قفل البصمة على أجهزة سامسونج الأقدم مع أندرويد 6\n
* إضافة دعم أصلي لأجهزة x86\n
* السماح بإخفاء لوحة المفاتيح أثناء فحص بصمات الإصبع\n
* إنشاء تحديث النظام
</string>
<string name="ChangeLog_1_0_0"> الإصدار 1.0.0\n
* فتح بصمة الإصبع (يتطلب أندرويد 6. + أو جهاز سامسونج)\n
* تمت إضافة خدمة التعبئة التلقائية (يتطلب أندرويد 5. +)\n
* تم إضافة دعم لقوالب الإدخال\n
* تم إضافة وضع \"العمل دون اتصال\"\n
* السماح بنسخ المدخلات\n
* وضع الإكمال التلقائي للأسماء الحقول\n
* السماح بإزالة العناصر من قائمة الملفات الحديثة\n
* طلب أذونات في وقت التشغيل في Android 6.\n
* إصلاحات الشوائب (في لوحة المفاتيح المدمجة، عند تحديد الأيقونات\n
* يتضمن خيار إرسال تقارير الأخطاء\n
* تم إضافة رسائل مساعدة في عدة نقاط\n
</string>
<string name="ChangeLog_0_9_9">&lt;unk&gt; نسخة 0.9.9\n
&lt;unk&gt; * أكمل إعادة تصميم واجهة المستخدم. شكرا جزيلا لستيفانو بيغناتارو (http://www.spstudio). ) لدعمه!\n
* السماح بإضافة أيقونات مخصصة\n
* دعم وضع النافذة المتعددة على أجهزة سامسونج\n
* زيادة العدد الافتراضي لجولات التشفير لقواعد البيانات الجديدة\n
* التحقق من المفاتيح المكررة للحقول الإضافية لتجنب فقدان البيانات\n
</string>
<string name="ChangeLog_0_9_9c"> الإصدار 0.9. c\n
* موضوع الظلام عاد\n
* يمكنك تثبيت حزم أيقونات أخرى (أيقونات نمط ويندوز القديمة متوفرة على متجر Play)\n
* إضافة سؤال تأكيد عند حذف عناصر بدون سلة إعادة التدوير\n
* إصلاحات الشوائب (عرض خاطئ لترميز OTP السري، أيقونة التطبيق خاطئة في بعض الأماكن)\n
</string>
<string name="ChangeLog_0_9_8b">&lt;unk&gt; الإصدار 0.9. (ب)\n
&lt;unk&gt; * إصلاحات الشوائب (فشل الحفظ لبعض قواعد البيانات، التصدير إلى الجهاز المحلي لا يعمل، تحديد بعض خيارات التفضيلات تعطل التطبيق)\n</string>
<string name="ChangeLog_0_9_8">&lt;unk&gt; الإصدار 0.9.\n
&lt;unk&gt; * دعم لإطار الوصول إلى التخزين (يسمح بالكتابة إلى بطاقة SD و Google Drive في KP2A Offline)\n
&lt;unk&gt; * حاول الكشف عن إدخال المستخدم الخاطئ عند إدخال عناوين URL لـ WebDAV (الدليل بدلا من الملف)\n
&lt;unk&gt; * * تغيير خط كلمة المرور\n
&lt;unk&gt; * السماح بتغيير حساب Dropbox\n
&lt;unk&gt; * إصلاح خطأ: الآن تذكر كلمة مرور OTP</string>
<string name="ChangeLog_0_9_7b">&lt;unk&gt; الإصدار 0.9.7b\n
&lt;unk&gt; * الترجمات المحدثة\n
&lt;unk&gt; * إصلاحات الشوائب: خط كلمة المرور مفقود في 0. .7، الترتيب حسب الاسم لم يتم فرز المجموعات\n</string>
<string name="ChangeLog_0_9_7">&lt;unk&gt; الإصدار 0.9.\n
&lt;unk&gt; * دعم الكتابة لقاعدة بيانات Keepass 1 (kdb) (بيتا!\n
&lt;unk&gt; * التبديل الأفضل إلى لوحة المفاتيح السابقة (يعمل أيضًا على الأجهزة غير الجذرية)\n
&lt;unk&gt; &lt;unk&gt; * دعم تحدي KeeChallenge مع تحديات الطول المتغيرة\n
&lt;unk&gt; &lt;unk&gt; &lt;unk&gt; * منع التقاط لقطات الشاشة من QuickUnlock وشاشات كلمة المرور\n
&lt;unk&gt; * عكس ترتيب الترتيب للترتيب حسب تاريخ التعديل (التنازل)\n
&lt;unk&gt; * إصلاحات الشوائب: يتم تحديث الملاحظات الآن بشكل صحيح بعد التغييرات، عرض كلمة المرور الآن يخفي كلمة المرور بشكل صحيح على (آمل) جميع الأجهزة، وقم بإصلاح المشكلة التي سمحت بإضافة إدخال مرتين، إصلاح المشكلة مع عرض تحذير UUID المكرر حتى بعد إصلاح قاعدة البيانات\n</string>
<string name="ChangeLog_0_9_6">&lt;unk&gt; الإصدار 0.9.\n
&lt;unk&gt; * السماح باستيراد ملف المفتاح و/أو ملف قاعدة البيانات المحلية إلى الدليل الداخلي للتطبيق (انظر الإعدادات)\n
&lt;unk&gt; &lt;unk&gt; * السماح بخيارات فرز مختلفة\n
&lt;unk&gt; &lt;unk&gt; * تحسين تفضيلات التبديل التلقائي للوحة المفاتيح\n
&lt;unk&gt; &lt;unk&gt; * تحديث تصميم شعار التطبيق والإشعارات تصميم من ستيفانو بيغناتارو (http://www. الاستوديو. ر)\n
&lt;unk&gt; * يتذكر مولد كلمة المرور آخر إعدادات\n
&lt;unk&gt; &lt;unk&gt; * تعيين ظهور الإشعار لشاشة قفل أندرويد 5\n
&lt;unk&gt; * الآن مسح حقل كلمة المرور الرئيسية عند مغادرة التطبيق دون النقر على موافق\n
&lt;unk&gt; * ثابت مع غياب لغات الإدخال في إعداد لوحة المفاتيح على بعض الأجهزة\n
&lt;unk&gt; * ثابت مع تشغيل لوحة المفاتيح التلقائية على الأجهزة ذات الجذور\n
&lt;unk&gt; * إضافة فحص لقواعد البيانات الفاسدة (UIDs)\n
&lt;unk&gt; * إعادة تحميل قاعدة البيانات تلقائيا عند اكتشاف التغيير، حل المخاوف الأمنية حول الكشف عن كلمة المرور الرئيسية\n
&lt;unk&gt; * تحسين تصميم لوحة المفاتيح الصغيرة المهذبة، تثبيت إعدادات لوحة المفاتيح (بفضل ويكتور &lt;unk&gt; awski)\n</string>
<string name="ChangeLog_0_9_5">&lt;unk&gt; &lt;b&gt;الإصدار 0.9.5&lt;/b&gt;\n
&lt;unk&gt; * إصلاح المشاكل مع تصفح الملفات (خاصة على أندرويد 4. )\n
&lt;unk&gt; * مشكلة ثابتة مع التحميل. ملفات db (Keepass 1) على Nexus 5 مع Android Lollipop\n
&lt;unk&gt; &lt;unk&gt; * إضافة خيار لمنع التقاط لقطات الشاشة/عرض التطبيق في قائمة التطبيقات الحديثة\n
&lt;unk&gt; &lt;unk&gt; * إصلاح مشكلة مع تخزين ملفات Google Drive (الطبعة العادية)\n
&lt;unk&gt; * السماح للملفات الرئيسية على أنواع التخزين المتعمدة (الطبعة العادية)\n
&lt;unk&gt; * تحديث Dropbox SDK لتضمين تصحيح أمن رسمي (الطبعة العادية)\n
&lt;unk&gt; * أدوات البناء المحدثة --&gt; حجم apk زادع:-(\n
&lt;unk&gt; I وعدت ببعض التغييرات. سوف تأتي مع الإصدار التالي - آسف. أردت نشر هذه الإصلاحات الساخنة في أقرب وقت ممكن.</string>
<string name="ChangeLog_0_9_4">&lt;unk&gt; &lt;b&gt;الإصدار 0.9.&lt;/b&gt;\n
&lt;unk&gt; * إضافة دعم إضافي: راجع الإعدادات لكيفية الحصول على الإضافات!\n
&lt;unk&gt; * نشر ملحق QR (مسح كلمات المرور، عرض كلمات المرور كرمز QR ، نقل الإدخالات إلى أجهزة KP2A الأخرى)\n
&lt;unk&gt; * إضافة InputStick منشورة (نقل بيانات الاعتماد إلى جهاز الكمبيوتر الخاص بك عن طريق البلوتوث - يتطلب InputStick USB stick)\n
&lt;unk&gt; * يمكن لتطبيقات الطرف الثالث الآن ببساطة تنفيذ الاستعلام KP2A للحصول على بيانات الاعتماد. هل أنت مطور؟ الرجاء إضافة هذا إلى التطبيق الخاص بك إذا كان ذلك مناسباً!\n
&lt;unk&gt; * أضاف دعم TOTP (المتوافقة مع KeeOTP و TrayTotp)\n
&lt;unk&gt; * يجب ألا يتم قتل التطبيق بواسطة Android عندما تكون قاعدة البيانات مفتوحة\n
&lt;unk&gt; &lt;unk&gt; * لم تعد قاعدة البيانات مقفلة عند مغادرة التطبيق مع زر الرجوع (انظر الإعدادات)\n
&lt;unk&gt; &lt;unk&gt; * * عرض أسماء المجموعات في عرض نتائج البحث (*)\n
&lt;unk&gt; * إضافة قائمة السياق في عرض نتائج البحث بما في ذلك خيار \"الانتقال إلى الأصل\" (*)\n
&lt;unk&gt; * إضافة خيار لعرض اسم المجموعة في عرض المدخل (*)\n
&lt;unk&gt; * * * (*) بفضل ماثيو *) لتنفيذ هذه الميزاتيو !\n
&lt;unk&gt; * دعم KeeChallenge (مع الجسم القريب من يوبيكي). شكرا لبن روش لتشغيل الموصل!\n
&lt;unk&gt; * تحسين واجهة المستخدم\n
&lt;unk&gt; * أصلح خطأ في واجهة Google Drive\n
&lt;unk&gt; * إضافة خيار لتعطيل خيار \"التبرع\"\n
&lt;unk&gt; &lt;unk&gt; * رمز فتح القفل المخفي الآن على Android 4. + أجهزة افتراضية\n </string>
<string name="ChangeLog_0_9_3_r5">&lt;unk&gt; &lt;b&gt;الإصدار 0.9.3 r5&lt;/b&gt;\n
&lt;unk&gt; * إصلاحات مدمجة من Xamarin: Keepass2Android متوافقة الآن مع الـ ART على أندرويد 4. .2. أخيراً!\n
&lt;unk&gt; * إصلاحات الشوائب: الأخطاء في المزامنة (تحديث العرض، التحقق الصحيح من التغييرات على http)، الأخطاء على أندرويد 2. أجهزة، أخطاء في تطبيقات تخزين Google Drive و OneDrive ، مسح الحافظة على قاعدة البيانات المغلقة، خلل في فتح المرفقات، عرض المشاكل مع لوحة المفاتيح\n</string>
<string name="ChangeLog_0_9_3">&lt;unk&gt; &lt;b&gt;الإصدار 0.9.3&lt;/b&gt;\n
&lt;unk&gt; &lt;unk&gt; * لوحة مفاتيح جديدة مع العديد من التحسينات. راجع الإعدادات للتخصيص.\n
&lt;unk&gt; * دعم للكيدب للقراءة فقط (Keepass 1 files). تجريبي!\n
&lt;unk&gt; * إضافة دعم SFTP\n
&lt;unk&gt; * إضافة عمل للخلل في ART (أندرويد 4. .2)\n
&lt;unk&gt; * إصلاحات الشوائب\n</string>
<string name="ChangeLog_0_9_2">&lt;unk&gt; &lt;b&gt;الإصدار 0.9.&lt;/b&gt;\n
&lt;unk&gt; * أضيف دعم OTP (متوافق مع ملحق OtpKeyProv)\n
&lt;unk&gt; * دعم NFC المتكامل لبرمجيات OTP من الجسم القريب من YubiKey \n
&lt;unk&gt; &lt;unk&gt; * عدة تحسينات في واجهة المستخدم\n
&lt;unk&gt; &lt;unk&gt; * مدمج Keepass 2. 4 مكتبة\n
&lt;unk&gt; * إضافة خيار لقتل عملية التطبيق (انظر الإعدادات)\n
&lt;unk&gt; * تحسين التحقق من صحة شهادة SSL\n
&lt;unk&gt; &lt;unk&gt; * إصلاحات الشوائب\n</string>
<string name="ChangeLog_0_9_1">الإصدار 0.9.1
*دعم متكامل ل SkyDrive (النسخة النظامية فقط منKeepass2Android)
*حل مشاكل التكامل مع Google Drive.
*إضافة دعم لميزة NTLM</string>
<string name="ChangeLog_0_9">&lt;unk&gt; &lt;b&gt;الإصدار 0.&lt;/b&gt;\n
&lt;unk&gt; * دعم دروببوكس و Google Drive المتكامل (قواعد بيانات القراءة/الكتابة؛ Keepass2Android عدد منتظم فقط)\n
&lt;unk&gt; * متصفح الملفات المخصص المدمج (على أساس أندرويد-filechooser بواسطة HBA)\n
&lt;unk&gt; &lt;unk&gt; * تحسين واجهة المستخدم لإنشاء قواعد بيانات جديدة\n
&lt;unk&gt; * تضمين خط مخصص DjaVu Sans Mono لعرض كلمات المرور\n
&lt;unk&gt; * إصلاحات الشوائب</string>
<string name="ChangeLog_0_8_6">الإصدار 0.8.6
*دعم ميزة Twofish cipher.
*السماح بتعديل المجموعات.
*السماح بنقل القيود والمجموعات.
*يمكن جعل أيقونة(فتح القفل السريع) QuickUnlock شفافة (راجع الإعدادات).
*إصلاحات أخرى</string>
<string name="ChangeLog_0_8_5">&lt;unk&gt; &lt;b&gt;الإصدار 0.8.&lt;/b&gt;\n
&lt;unk&gt; * يتم تخزين الملفات البعيدة في ذاكرة التخزين المؤقت للتطبيق المحلي للسماح بالاستخدام دون اتصال (بما في ذلك التحرير والمزامنة لاحقا). عرض الإعدادات. \n
&lt;unk&gt; * رمز إشعار لتصور حالة قفل قاعدة البيانات (انظر الإعدادات)\n
&lt;unk&gt; * تحسين تحديد حالة القفل في بعض الحالات\n
&lt;unk&gt; * يتم تحميل ملفات قاعدة البيانات إلى الذاكرة أثناء كتابة كلمة المرور لزيادة سرعة التحميل (انظر الإعدادات)\n
&lt;unk&gt; * يمكن إضافة المدخلات إلى مجموعة الجذر\n
&lt;unk&gt; * إصلاحات الأخطاء (حل الحقول المرجعية) مشاكل مع لوحة المفاتيح على الأجهزة الإيطالية والصينية)</string>
<string name="ChangeLog_0_8_4"><b>الإصدار 0.8.4</b>\n
* يتم الكشف عن تغييرات قاعدة البيانات الخارجية ودمجها عند الحفظ\n
* تحسين أداء التحميل\n
* تحسين البحث في شريط الأدوات مع تقديم الاقتراحات\n
* شعار \"التطبيق الجديد\"!\n
* إضافة الدعم لملفات .kdbp لتحميل/حفظ أسرع\n
* تحسين تعديل النصوص الإضافية وإخفاء العرض عندما تكون محمية\n
شكرًا لـ Alex Vallat على مشاركته في البرمجة!\n
شكرًا لـ Niki Hüttner (www.close-cut.de) على تصميم الشعار الجديد!\n</string>
<string name="ChangeLog_0_8_3"><b>الإصدار 0.8.3</b>\n
* يتم عرض رقم التسلسل لاسم المستخدم/\"رقم العملية\" في قائمة القيود\n
* يمكن إنشاء القيود عندما لا يقوم البحث في المتصفح بعرض نتائج\n
* لوحة مفاتيح KP2A تقدم إمكانية البحث عن بيانات الدخول للتطبيق الحالي\n
* يتم إغلاق التطبيق تلقائيًا عند تحديد قيد للاستخدام في لوحة المفاتيح\n
* صندوق اختيار لوحة المفاتيح يظهر تلقائيًا بعد البحث عن رابط (راجع الإعدادات)\n
* يتم استبدال نصوص التلميح في حقول القيد قبل النسخ (يدعم معظم نصوص التلميح)\n
* إصلاحات لبعض الأخطاء البسيطة </string>
<string name="ChangeLog_0_8_2"><b>الإصدار 0.8.2</b>\n
* دعم \"مصادقة الملخص\" في WebDAV\n
* إصلاح أخطاء برمجية (مدير الملفات، فتح رابط)</string>
<string name="ChangeLog_0_8_1"><b>الإصدار 0.8.1</b>\n
* يمكن تثبيت KP2A Offline و Online معًا مرة أخرى\n
* تمت إضافة ترجمات جديدة (شكرًا لجميع المساهمين!)</string>
<string name="ChangeLog_0_8"><b>الإصدار 0.8</b>\n
* تحسين واجهة المستخدم خاصة على أجهزة Android 4.x\n
* السماح باستخدام مدير ملفات متعمّد لتحديد ملفات متواجدة حاليا\n
* إضافة طريقة أكثر أمانًا لفتح المرفقات (من خلال مجلد التخزين المؤقت)\n
* إصلاح أخطاء في نافذة \"تعديل\"\n
* ربما أوجدنا أخطاء أكثر :-)</string>
<string name="ChangeLog_keptDonate">تمديد إمكانية التبرع ببيرة أو أي شيء آخر</string>
<string name="ChangeLog_0_7"><b>الإصدار 0.7</b>\n
* زيادة سرعة التحميل: التحويلات الأساسية الآن ×10 مرات أسرع!\n
* إضافة لوحة مفاتيح Keepass2Android: بدّل إلى هذه اللوحة عند أدخال بيانات الدخول. يحميك هذا من برامج التقاط نقرات لوحة المفاتيح (عطّل إشعارات حافظة لوحة المفاتيح القديمة في الخيارات)\n
* إضافة زر للتبرع ببيرة أو أي شيء آخر (انظر للقائمة)</string>
<string name="ChangeLog"><b>الإصدار 0.6.2</b>\n
* التكامل مع Google Drive/Dropbox...: استخدم تطبيق Google Drive وDropbox الرسمي وقم بفتح ملفات (.kdbx). الآن هذا سيقوم بفتح KP2A.\n
*تحسين صندوق حوار البحث\n
* تحسين نتائج البحث لـ \"مشاركة رابط\" مع نطاقات فرعية\n
* إضافة خيارات لتقديم الآراء، التقييمات وترجمة التطبيق في القائمة\n
\n
<b>الإصدار 0.6.1</b>\n
* يتم الآن الكشف عن التغييرات الخارجية على قاعدة البيانات (مثال: بسبب المزامنة)\n
* تحسين البحث عن الروابط من المتصفح\n
* صندوق حوار للتأكيد على تجاهل التغييرات\n
\n
<b>الإصدار 0.6</b>\n
أول إصدار علني </string>
<string-array name="clipboard_timeout_options">
<item>30 ثانية</item>
<item>دقيقة</item>
@@ -993,7 +716,7 @@
</string-array>
<string-array name="sftp_auth_modes">
<item>كلمة السر</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">

View File

@@ -17,8 +17,8 @@
<string name="app_name_nonet">Keepass2Android Xətdən Kənar</string>
<string name="short_app_name_nonet">KP2A Xətdən Kənar</string>
<string name="app_timeout">Tətbiq istifadə vaxtı</string>
<string name="kill_app_label">Tətbiqi bağla</string>
<string name="show_kill_app">Bağla düyməsi</string>
<string name="kill_app_label">Tətbiqi bağla</string>
<string name="application">Tətbiq</string>
<string name="application_settings">Tətbiq tənzimləmələri</string>
<string name="ShowGroupnameInSearchResult_title">Qrup adını axtarış nəticələrində göstər</string>
@@ -74,7 +74,7 @@
<string name="DbQuicklockedChannel_name">Cəld Kilid Açma</string>
<string-array name="sftp_auth_modes">
<item>Şifrə</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string name="disable_secure_screen_check">Bu mesajı ləğv et</string>

View File

@@ -22,8 +22,8 @@
<string name="short_app_name_nonet">KP2A Offline</string>
<string name="app_timeout">Час чакання праграмы</string>
<string name="app_timeout_summary">Час да блакавання базы даных пры бяздзейнасці.</string>
<string name="kill_app_label">Прымусовае спыненне</string>
<string name="show_kill_app">Кнопка закрыцця</string>
<string name="kill_app_label">Прымусовае спыненне</string>
<string name="show_kill_app_summary">Паказваць на экране пароля кнопку закрыцця праграмы</string>
<string name="application">Праграма</string>
<string name="application_settings">Налады праграмы</string>
@@ -122,6 +122,7 @@
<string name="entry_user_name">Імя карыстальніка</string>
<string name="entry_extra_strings">Дадатковыя палі</string>
<string name="entry_binaries">Далучаныя файлы</string>
<string name="entry_history">Папярэднія версіі</string>
<string name="error_can_not_handle_uri">Keepass2Android не можа апрацаваць гэты URI-адрас.</string>
<string name="error_could_not_create_group">Не атрымалася стварыць групу.</string>
<string name="error_could_not_create_parent">Не атрымалася стварыць бацькоўскі каталог.</string>
@@ -151,6 +152,7 @@
<string name="hint_keyfile">Файл ключа</string>
<string name="hint_length">даўжыня</string>
<string name="hint_pass">пароль</string>
<string name="hint_keyfile_path">Шлях да прыватнага ключа SSH</string>
<string name="hint_login_pass">Пароль</string>
<string name="hint_title">назва</string>
<string name="hint_url">URL</string>
@@ -300,6 +302,8 @@
<string name="NoDalVerification_summary">Адключае праверку, калі дамен адпавядае праграме</string>
<string name="InlineSuggestions_title">Інтэграцыя з клавіятурай</string>
<string name="InlineSuggestions_summary">Паказваць прапановы для аўтазапаўнення як убудаваныя параметры клавіятуры (калі падтрымліваецца метадам уводу)</string>
<string name="LogAutofillView_title">Прагляд журнала аўтазапаўнення</string>
<string name="LogAutofillView_summary">Запісваць звесткі пра рэжым аўтазапаўненння ў адладачны журнал (калі ўключана вядзенне журнала адладжвання). Гэтыя звесткі можна адправіць распрацоўшчыку, калі аўтазапаўненне не будзе працаваць належным чынам.</string>
<string name="requires_android11">Патрэбны Android 11 ці навейшая версія</string>
<string name="kp2a_findUrl">Знайсці пароль</string>
<string name="excludeExpiredEntries">Выключыць пратэрмінаваныя запісы</string>
@@ -414,6 +418,7 @@
<string name="ShowUnlockedNotification_summary">Паказваць значок на панэлі аравяшчэнняў, калі база даных разблакаваная.</string>
<string name="IconVisibilityInfo_Android8_text">У Android 8 апавяшчэнні працуюць па-іншаму. Калі вы хочаце схаваць значок на панэлі апавяшчэнняў, трэба наладзіць яго ў сістэмных наладах. Абярыце для катэгорыі апавяшчэння важнасць \"Мінімум\".</string>
<string name="IconVisibilityInfo_Android8_btnSettings">Адкрыць налады</string>
<string name="PostNotificationsPermissionInfo_text">Keepass2Android можа паказваць сістэмныя апавяшчэнні, калі ваша база даных не заблакаваная. Каб гэтая функцыя працавала, дайце дазвол.</string>
<string name="DontCare">Мне няма розніцы</string>
<string name="DocumentAccessRevoked">Гэты файл цяпер неадаступны для Keepass2Android. Ён або быў выдалены, або доступ да яго быў адкліканы. Паспрабуйце адкрыць файл нанова.</string>
<string name="PreloadDatabaseEnabled_title">Папярэдняя загрузка файла базы даных</string>
@@ -498,9 +503,18 @@
<string name="hint_sftp_host">хост (напрыклад: 192.168.0.1)</string>
<string name="hint_sftp_port">порт</string>
<string name="initial_directory">Пачатковы каталог (неабавязкова):</string>
<string name="connect_timeout">Час чакання злучэння ў секундах (неабавязкова):\"</string>
<string name="enter_sftp_login_title">Увядзіце даныя для ўваходу на сервер SFTP:</string>
<string name="sftp_auth_mode">Рэжым аўтэнтыфікацыі</string>
<string name="send_public_key">Адправіць публічны ключ…</string>
<string name="select_private_keyfile">Абраць прыватны ключ...</string>
<string name="hint_sftp_key_name">Новая назва ключа</string>
<string name="hint_sftp_key_content">Новае змесціва ключа</string>
<string name="private_key_saved">Прыватны ключ захаваны</string>
<string name="private_key_save_failed">НЕ ЎДАЛОСЯ захаваць прыватны ключ: %1$s</string>
<string name="private_key_info">Каб захаваць, увядзіце назву ключа і змесціва</string>
<string name="private_key_delete">Выдаліць прыватны ключ: %1$s</string>
<string name="private_key_delete_failed">НЕ ЎДАЛОСЯ выдаліць прыватны ключ: %1$s</string>
<string name="enter_ftp_login_title">Увядзіце даныя для ўваходу на сервер FTP:</string>
<string name="select_storage_type">Абярыце тып сховішча:</string>
<string name="filestoragename_file">Лакальны файл</string>
@@ -633,25 +647,6 @@
<string name="Continue">Працягнуць</string>
<string name="NoFilenameWarning">Не падобна, каб URI-адрас сканчаўся назвай файла. Вы ўвялі правільны адрас?</string>
<string name="FirstInvalidCompositeKeyError">Хібны складаны ключ! Паспрабуйце яшчэ раз.</string>
<string name="RepeatedInvalidCompositeKeyHelp">Хібны складаны ключ! Каб разблакаваць базу даных, паспрабуйце выканаць наступныя дзеянні:\n
&#8226; Пераканайцеся, што ўводзіце правільны пароль. Націсніце значок вока, каб праверыць пароль.\n
&#8226; Пераканайцеся, што абралі правільны тып пароля. Пераканайцеся, што абралі гэты тып падчас стварэння базы даных.\n
&#8226; Пераканайцеся, што абралі правільны файл базы даных.
</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
&#8226; Падказка: калі вы думаеце, што ваша база даных пашкоджаная або забыліся на галоўны пароль пасля яго змены, вы можаце паспрабаваць адкрыць апошнюю паспяхова адкрытую версію файла, націснуўшы \"%1$s\" і абраўшы лакальную рэзервовую копію.</string>
<string name="HintLocalBackupOtherError"> \n
&#8226; Падказка: Keepass2Android захоўвае ва ўнутраным сховішчы апошнюю паспяхова адкрытую версію файла. Яе можна адкрыць, націснуўшы \"%1$s\" і абраўшы лакальную рэзервовую копію.
</string>
<string name="CorruptDatabaseHelp"> Файл пашкоджаны. \n
Тут пададзена некалькі падказак, якія могуць дапамагчы вырашыць гэтую праблему:\n
&#8226; Калі вы скапіявалі файл праз USB (Рэжым MTP), паспрабуйце яшчэ раз з дапамогай інструмента кшталту MyPhoneExplorer. MTP можа абразаць файлы.\n
&#8226; Калі вы не можаце адкрыць файл нават з камп\'ютара, то хутчэй за ўсё файл пашкоджаны. Паспрабуйце адкрыць рэзервовую копію. Калі ёсць нагода вінаваціць у гэтым Keepass2Android, звяжыцеся з намі.\n
&#8226; Калі файл адкрываецца з камп\'ютара, звяжыцеся з намі. Вы можаце захаваць файл з рознымі параметрамі і паспрабаваць адкрыць яго ў Keepass2Android.
</string>
<string name="open_other_db">Адкрыць іншую базу даных…</string>
<string name="select_database">Абраць базу даных</string>
<string name="configure_child_dbs">Наладжванне даччыных базаў даных…</string>
@@ -731,274 +726,7 @@
<item>Пераключэнне на BiometricPrompt API для паляпшэння ўзаемадзеяння з дапамогай разблакавання адбіткам пальца і тварам, напрыклад на Pixel 4.</item>
<item>Выпраўленні хібаў</item>
</string-array>
<string name="ChangeLog_1_07b"> Version 1.07b\n
* Improve Argon2 performance by using native implementation (Thanks to Chih-Hsuan Yen!)\n
* Allow to disable fingerprint by clicking on the fingerprint icon (avoids issue with underscreen fingerprint readers, thanks to marcoDallas!)\n
* Restore cursor position when toggling visibility of password (thanks to DDoSolitary!)\n
* Improvements to pCloud implementation (thanks to gilbsgilbs again!)\n
* Add AutoFill support for several more browsers \n
* New implementation for OneDrive: Includes support for OneDrive for Business, shared files, selectable access scopes, multiple accounts and fixes issues with offline access\n
* Bug fixes
</string>
<string name="ChangeLog_1_07"> Version 1.07\n
* Fixes for crashes on Samsung\'s Android 9\n
* Allow to open more than one database, compatible with KeeAutoExec\n
* SFTP: Allow public key authentication, check if host key changed\n
* Introduce pCloud support - thanks to gilbsgilbs!\n
* Make Nextcloud support explicit\n
* Improve saving and updating of entry attachments\n
* More options for adapting behavior to personal preferences\n
* SSL: Trust user certificates\n
* Improve autofill (now works with Firefox, allow to reduce popups)\n
* bug fixes\n
</string>
<string name="ChangeLog_1_06"> Version 1.06\n
* Switch to ykDroid instead of YubiChallenge as app for Yubikey Challenge-Response.\n
* Implement support for KeepassXC-style Challenge-Response. Note: Database format must be KDBX4!\n
* Refuse to load trashed files from Google Drive\n
* Switch TLS implementation for FTPS, add workaround to JSch bug with servers supporting gssapi-with-mic\n
* bug fixes\n
</string>
<string name="ChangeLog_1_05"> Version 1.05\n
* Use notification channels for Android 8, allowing configuration through system settings\n
* Show entry icon in notication\n
* Use Adaptive Icons for Android 8, use round launcher icon for Android 7\n
* Allow to activate search upon unlock (see settings)\n
* Changed the way files are written through Storage Access Framework, fixes issues with updating files on Google Drive opened through System file picker\n
* Added some info texts to avoid some common misunderstandings\n
* Create local backups of successfully opened databases to reduce risk of data loss\n
* Updated JSch to support more recent SSH ciphers\n
* Allow to edit connection settings, e.g. when WebDav password changed\n
* Added support for Yubikey Neo\'s static password mode\n
* Allow to disable Autofill suggestion\n
* Fixed data leakage to logcat\n
* bug fixes\n
</string>
<string name="ChangeLog_1_04b"> Version 1.04b\n
* Avoid crash when user tries to enable Autofill on Huawei devices.\n
</string>
<string name="ChangeLog_1_04"> Version 1.04\n
* Added Autofill service for Android 8.0 and later.\n
* Upgraded libraries, build tools and Target SDK version.\n
</string>
<string name="ChangeLog_1_03"> Version 1.03\n
* Removed accessibility service for AutoFill as requested by Google. Please see password access settings to find a plugin replicating the previous functionality.\n
* Added third party apps as storage option again\n
* Integrated image viewer for viewing attached images without transferring them to other apps\n
* Upgraded OkHttp to fix issues with some connections\n
* Support for KeeTrayTOTP entries, now supporting Steam entries\n
</string>
<string name="ChangeLog_1_02"> Version 1.02\n
* Several security improvements. Thanks a lot for the security report by jean-baptiste.cayrou@thalesgroup.com and vincent.fargues@thalesgroup.com and for their collaboration!\n
* Support for KeyboardSwapPlugin (see password access options): allows to switch input method automatically on non-rooted devices. Thanks to Mishaal Rahman from XDA-Developers to make this possible.\n
* Fix for Accessibility Service with recent Chrome versions\n
* Fix for unnecessary clearing of fingerprint data\n
* Fix minor crashes\n
* Updated Dropbox SDK to ensure future compatibility\n
* Removed error reporting through Xamarin Insights\n
* Updated build tools\n
</string>
<string name="ChangeLog_1_01g"> Version 1.01-g\n
* Fix for crash when trying to work offline\n
* Fix for incorrect encoding of FTP(S) credentials\n
* Fix for crashes when using OneDrive and on older Android versions\n
* Display times as local time in entry screen\n
</string>
<string name="ChangeLog_1_01d"> Version 1.01-d\n
* Fix for OneDrive file listing\n
* Allow to ignore certificate errors also when host name verification fails (not recommended for production use)\n
* Fix for QuickUnlock sometimes failing despite correct unlock code\n
</string>
<string name="ChangeLog_0_9_8c"> Version 0.9.8c\n
* Fix for SSL vulnerability in Microsoft Live SDK (used when accessing files via OneDrive)\n
* Bug fix: Previous release contained two input methods (one crashing)\n
</string>
<string name="ChangeLog_1_01"> Version 1.01\n
* added support for the new KDBX-4-format (compatible with Keepass 2.35) including Argon2 key derivation and ChaCha20 encryption.\n
* Reimplemented WebDav file storage, now allows file browsing and supports modern encryption.\n
* Reimpleented FTP file storage, now allows file browsing and supports encryption (FTPS).\n
* Updated to OneDrive SDK (previously used Live SDK is no longer updated)\n
* Updated to Dropbox SDK version 2 (previously used version 1 SDK is deprecated).\n
* Added support for OwnCloud.\n
* Prompt for storage permission before opening local files
</string>
<string name="ChangeLog_1_0_0e"> Version 1.0.0e\n
* fix for Fingerprint Unlock on older Samsung devices with Android 6\n
* add native support for x86 devices\n
* allow to hide softkeyboard during fingerprint scan\n
* build system update
</string>
<string name="ChangeLog_1_0_0"> Version 1.0.0\n
* Fingerprint Unlock (requires Android 6.0+ or a Samsung device)\n
* Added Auto-Fill service (requires Android 5.0+)\n
* Added support for entry templates\n
* Added \"work offline\" mode\n
* Allow to copy entries\n
* Auto-complete mode for field names\n
* Allow to remove items from recent files list\n
* Request permissions at runtime in Android 6.0\n
* Bug fixes (in built-in keyboard, when selecting icons)\n
* Included option to send error reports\n
* Added help messages at several points\n
</string>
<string name="ChangeLog_0_9_9">Version 0.9.9\n
* Complete UI redesign. Thanks a lot to Stefano Pignataro (http://www.spstudio.at) for his support!\n
* Allow to add custom icons\n
* Support for Multi Window mode on Samsung devices\n
* Increased default number of encryption rounds for new databases\n
* Check for duplicate keys of additional fields to avoid losing data\n
</string>
<string name="ChangeLog_0_9_9c"> Version 0.9.9c\n
* Dark theme is back\n
* You can install other icon packs (ancient Windows-style icons are available on Play store)\n
* Added confirmation question when deleting elements without recycle bin\n
* Bug fixes (wrong display of OTP secret encoding, wrong app icon in some places)\n
</string>
<string name="ChangeLog_0_9_8b">Version 0.9.8b\n
* Bug fixes (Saving failed for some databases, exporting to local device not working, selecting some preference options crashed the app)\n</string>
<string name="ChangeLog_0_9_8">Version 0.9.8\n
* Support for Storage Access Framework (allows write to SD card and Google Drive in KP2A Offline)\n
* Try to detect erroneous user input when entering WebDAV URLs (directory instead of file)\n
* Changed password font\n
* Allow to change Dropbox account\n
* Fixed bug: Now remembering OTP password</string>
<string name="ChangeLog_0_9_7b">Version 0.9.7b\n
* updated translations\n
* bug fixes: Password font was missing in 0.9.7, sort by name didn not sort groups\n</string>
<string name="ChangeLog_0_9_7">Version 0.9.7\n
* write support for Keepass 1 (kdb) databases (beta!)\n
* better switching back to previous keyboard (also works on non-rooted devices)\n
* support for KeeChallenge with variable length challenges\n
* prevent taking screenshots from QuickUnlock and password screens\n
* reverse sort order for Sort by Modification Date (now descending)\n
* bug fixes: Notes view now updated correctly after changes, Password views now hiding password correctly on (hopefully) all devices, fixed issue that allowed to add an entry twice, fixed issue with showing Duplicate UUID warning even after fixing the database\n</string>
<string name="ChangeLog_0_9_6">Version 0.9.6\n
* allow to import key file and/or local database file to app internal directory (see settings)\n
* allow different sorting options\n
* improved preferences for automatic keyboard switching\n
* updated app logo and notification design, design by Stefano Pignataro (http://www.spstudio.at)\n
* password generator remembers last settings\n
* set notification visibility for Android 5 lock screen\n
* now clearing master password field when leaving the app without tapping OK\n
* fixed issue with missing input languages in keyboard setting on some devices\n
* fixed issue with automatic keyboard switching on rooted devices\n
* added check for corrupt databases (duplicate UUIDs)\n
* automatically reload database when change detected, solves security concern about revealing master password\n
* improved polish small keyboard layout, fixed keyboard settings theme (thanks to Wiktor Ławski)\n</string>
<string name="ChangeLog_0_9_5"><b>Version 0.9.5</b>\n
* Fixed issues with file browsing (especially on Android 4.4)\n
* Fixed issue with loading .kdb files (Keepass 1) on Nexus 5 with Android Lollipop\n
* Added option to prevent taking screenshots/displaying app in recent apps list\n
* Fixed issue with Google Drive file storage (regular edition)\n
* Allow key files on deliberate storage types (regular edition)\n
* Updated Dropbox SDK to include an official security patch (regular edition)\n
* Updated build tools --&gt; apk size increased :-(\n
I have promised some more changes. They will come with the next release - sorry. I wanted to publish these hot fixes as soon as possible.</string>
<string name="ChangeLog_0_9_4"><b>Version 0.9.4</b>\n
* added plug-in support: See settings for how to get plug-ins!\n
* published QR plug-in (scan passwords, display passwords as QR code, transfer entries to other KP2A devices)\n
* published InputStick plugin (transfer credentials to your PC via bluetooth - requires InputStick USB stick)\n
* Third party apps can now simply implement querying KP2A for credentials. Are you a developer? Please add this to your app if suitable!\n
* added TOTP support (compatible with KeeOTP and TrayTotp)\n
* app should no longer be killed by Android when database is open\n
* database is no longer locked when leaving the app with the back button (see settings)\n
* display group names in search results view (*)\n
* added context menu in search results view including \"Navigate to parent\" option (*)\n
* added option to display group name in entry view (*)\n
* (*) thanks to Matthieu for implementing these features!\n
* support KeeChallenge (with Yubikey NEO). Thanks to Ben Rush for implementing the connector!\n
* improved user interface\n
* fixed a bug in Google Drive interface\n
* added option to disable the \"donate\" option\n
* QuickUnlock icon now hidden on Android 4.2+ devices by default\n </string>
<string name="ChangeLog_0_9_3_r5"><b>Version 0.9.3 r5</b>\n
* Incorporated fixes from Xamarin: Keepass2Android now compatible with ART on Android 4.4.2. Finally!\n
* Bug fixes: bugs in synchronization (refresh display, correct check for changes on http), bugs on Android 2.x devices, bugs in Google Drive and OneDrive storage implementations, clear clipboard on close database, bug opening attachments, display problems with keyboard\n</string>
<string name="ChangeLog_0_9_3"><b>Version 0.9.3</b>\n
* New keyboard with many improvements. See settings to customize.\n
* Read-only support for kdb (Keepass 1 files). Experimental!\n
* Added SFTP support\n
* Added workaround for bug in ART (Android 4.4.2)\n
* Bug fixes\n</string>
<string name="ChangeLog_0_9_2"><b>Version 0.9.2</b>\n
* Added OTP support (compatible with OtpKeyProv plugin)\n
* Integrated NFC support for OTPs from YubiKey NEO \n
* Several UI improvements\n
* Integrated Keepass 2.24 library\n
* Added option to kill the app process (see settings)\n
* Improved SSL certificate validation\n
* Bug fixes\n</string>
<string name="ChangeLog_0_9_1"><b>Version 0.9.1</b>\n
* Integrated SkyDrive support (Keepass2Android regular edition only)\n
* Fixed problems with Google Drive integration\n
* Added NTLM support</string>
<string name="ChangeLog_0_9"><b>Version 0.9</b>\n
* Integrated Dropbox and Google Drive support (read/write databases; Keepass2Android regular edition only)\n
* Integrated custom file browser (based on android-filechooser by HBA)\n
* Improved user interface for creating new databases\n
* Included custom font DejaVu Sans Mono for displaying passwords\n
* Bug fixes</string>
<string name="ChangeLog_0_8_6"><b>Version 0.8.6</b>\n
* Support for Twofish cipher\n
* Allow editing of groups\n
* Allow moving of entries and groups\n
* QuickUnlock icon can be made transparent (see settings)\n
* Bug fixes</string>
<string name="ChangeLog_0_8_5"><b>Version 0.8.6</b>\n
* Support for Twofish cipher\n
* Allow editing of groups\n
* Allow moving of entries and groups\n
* QuickUnlock icon can be made transparent (see settings)\n
* Bug fixes</string>
<string name="ChangeLog_0_8_4"><b>Version 0.8.4</b>\n
* External database changes are detected and merged when saving\n
* Improved loading performance\n
* Improved search toolbar with suggestions\n
* New App logo!\n
* Added support for .kdbp format for faster loading/saving\n
* Improved editing of extra strings and hidden display when protected\n
Thanks to Alex Vallat for his code contributions!\n
Thanks to Niki Hüttner (www.close-cut.de) for the new logo!\n</string>
<string name="ChangeLog_0_8_3"><b>Version 0.8.3</b>\n
* Username/TAN index displayed in entry list (see settings)\n
* Entries can be created if search from browser doesn\'t return results\n
* KP2A keyboard provides possibility to search for credentials for current app\n
* App automatically closes after selecting an entry for use in keyboard\n
* Keyboard selection dialog automatically opens after search for URL (see settings)\n
* Placeholders in entry fields are replaced before copying (most placeholders supported)\n
* minor bug fixes
</string>
<string name="ChangeLog_0_8_2"><b>Version 0.8.2</b>\n
* Support for Digest Authentication in WebDAV\n
* Bugfixes (OI File manager, Open URL)</string>
<string name="ChangeLog_0_8_1"><b>Version 0.8.1</b>\n
* KP2A Offline and \"Online\" can be installed both again\n
* Added new translations (thanks to all contributors!)</string>
<string name="ChangeLog_0_8"><b>Version 0.8</b>\n
* Improved user interface especially for Android 4.x devices\n
* Allow using deliberate file managers for selecting existing files\n
* Added safer way for opening attachments (through cache directory)\n
* fixed bugs in Edit activity\n
* probably introduced new bugs :-)</string>
<string name="ChangeLog_keptDonate">Дадатковыя спосабы ахвяравання</string>
<string name="ChangeLog_0_7"><b>Version 0.7</b>\n
* Increased loading speed: key transformations now 10x faster!\n
* Added Keepass2Android soft-keyboard: Switch to this keyboard for entering credentials. Shields you from clipboard-based password sniffers (disable old clipboard notifications in the options)\n
* Added option to donate a beer or something else (see menu)</string>
<string name="ChangeLog"><b>Version 0.6.2</b>\n
* Google Drive/Dropbox/... integration: Use the official Google Drive or Dropbox App and open any .kdbx-file. This will now bring up KP2A.\n
* Improved Search Dialog \n
* Improved search results for Share URL with subdomains\n
* Added options to give feedback, and rate and translate the app in the menu\n
\n
<b>Version 0.6.1</b>\n
* Detect when database changes in the background (i.e. due to activity of a sync app)\n
* Improved searching for URLs from the browser\n
* Confirm dialog when discarding changes\n
\n
<b>Version 0.6</b>\n
Initial public release
</string>
<string-array name="clipboard_timeout_options">
<item>30 секунд</item>
<item>1 хвіліна</item>
@@ -1047,7 +775,7 @@ Initial public release
</string-array>
<string-array name="sftp_auth_modes">
<item>Пароль</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">

View File

@@ -461,7 +461,7 @@
</string-array>
<string-array name="sftp_auth_modes">
<item>Парола</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
</resources>

View File

@@ -22,8 +22,8 @@
<string name="short_app_name_nonet">KP2A fora de línia</string>
<string name="app_timeout">Temps límit de resposta de l\'aplicació</string>
<string name="app_timeout_summary">Temps abans de bloquejar la base de dades quan l\'aplicació està inactiva.</string>
<string name="kill_app_label">Matar el procés de l\'aplicació</string>
<string name="show_kill_app">Botó de tancament</string>
<string name="kill_app_label">Matar el procés de l\'aplicació</string>
<string name="show_kill_app_summary">Mostra un botó a la pantalla de contrasenya per matar el procés de l\'aplicació (per a usuaris paranoics)</string>
<string name="application">Aplicació</string>
<string name="application_settings">Configuració de l\'aplicació</string>
@@ -599,22 +599,6 @@
<string name="Continue">Continuar</string>
<string name="NoFilenameWarning">L\'URI que heu introduït no sembla un nom de fitxer. Esteu segurs que és un fitxer vàlid?</string>
<string name="FirstInvalidCompositeKeyError">Token invàlid! Intenta-ho de nou.</string>
<string name="RepeatedInvalidCompositeKeyHelp">Token invàlid! Si us plau, proveu els passos següents per obrir la base de dades: \n
• Assegureu-vos que ha introduït la contrasenya correcta. Utilitzar la icona d\'ull per mostrar la contrasenya introduïda.\n
• Assegureu-vos que ha seleccionat el tipus de contrasenya correcta. Assegureu-vos que correspongui el tipus utilitzada en la creació de la base de dades.\n
• Assegureu-vos que ha seleccionat l\'arxiu de base de dades correcte.</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
&#8226; Suggeriment: si pensa que el seu arxiu de base de dades podria estar corrupte o no recordes la clau mestra després de modificar-lo, pot provar amb l\'última versió d\'arxiu oberta satisfactòriament fent clic \"%1$s\" i seleccionant la còpia de seguretat local.</string>
<string name="HintLocalBackupOtherError"> \n
&#8226; Suggeriment: Keepass2Android ha emmagatzemat l\'última versió d\'arxiu oberta satisfactòriament a la memòria interna. Podeu obrir-lo fent clic \"%1$s\" i seleccionant la còpia de seguretat local.
</string>
<string name="CorruptDatabaseHelp">Arxiu està corrupte. \n
aquí hi ha alguns consells que poden ajudar a diagnosticar el problema: \n
• si vostè va copiar l\'arxiu mitjançant USB (MTP Mode), intenteu-ho novament amb eines com MyPhoneExplorer. MTP trunca arxius en certs casos. \n
• si no es pot obrir el fitxer des del mateix emplaçament en el seu PC, és molt probable que l\'arxiu estigui corrupte. Si us plau utilitzi una còpia de seguretat de la base de dades. Si vostè creu que Keepass2Android ha malmès el fitxer, si us plau contacte amb suport. \n
• si encara pots obrir l\'arxiu en el seu PC, contacteu amb suport. Podria intentar guardar-lo amb diferents configuracions (p. ex. descomprimit) en el PC i provar a obrir-lo de nou en Keepass2Android. </string>
<string name="open_other_db">Obrir una altra base de dades…</string>
<string name="select_database">Seleccioneu la base de dades</string>
<string name="configure_child_dbs">Configura bases de dades fills…</string>
@@ -655,250 +639,7 @@
<item>Correcció d\'errors</item>
<item>Correcció d\'errors</item>
</string-array>
<string name="ChangeLog_1_07b">Versió 1.07b \n
* Millora el rendiment Argon2 mitjançant la implementació nativa (Gràcies al Chih-Hsuan Yen!) \n
* Permet desactivar lempremta digital fent clic a la icona dempremtes dactilars (evita la incidència en lectors dempremtes sota la pantalla, gràcies a marcoDallas!) \n
* Restaura la posició del cursor quan commuteu la visibilitat de la contrasenya (gràcies a DDoSolitary!) \n
* Millores en la implementació de pCloud (gràcies a gilbsgilbs de nou!) \n
* Afegit suport per omplir automàticament per diversos navegadors \n
* Nova implementació per a OneDrive: inclou suport per a OneDrive per a empreses, fitxers compartits, àmbits d\'accés seleccionables, diversos comptes i soluciona problemes en l\'accés fora de línia \n
* Reparació d\'errors </string>
<string name="ChangeLog_1_07"> Versió 1.07-pre2\n
* Arreglaments de fallades a Android 9 de Samsung\n
* Permet obrir més d\'una base de dades, compatible amb KeeAutoExec\n
* SFTP: permet autenticació de clau pública, comprova si la clau del servidor ha canviat\n
* Suport a pCloud - gràcies a gilbsgilbs!\n
* Suport a Nextcloud explícit\n
* Millora la guarda i actualització d\'adjunts a les entrades\n
* Més opcions d\'adaptació del comportament a les preferències personals\n
* SSL: confiar en certificat de l\'usuari\n
* Millorar autoemplenat (ara funciona amb Firefox, permet disminuir missatges emergents)\n
* Reparació d\'errors\n
</string>
<string name="ChangeLog_1_06">Versió 1.06\n
* Canvieu a ykDroid en comptes de YubiChallenge com a aplicació de Desafiament-Resposta de Yubikey.\n
* Implementat suport per a KeepassXC Desafiament-Resposta. Nota: El format de la base de dades ha de ser KDBX4!\n
* Es nega a carregar fitxers esborrats de Google Drive\n
* Canvieu la implementació de TLS per FTPS, afegiu la solució a l\'error JSch amb servidors que suportin gssapi-amb-mic\n
* correccions d\'errors\n </string>
<string name="ChangeLog_1_05">Versió 1.05\n
* Utilitzeu canals de notificació per a Android 8, que permeten la configuració a través de la configuració del sistema\n
* Mostra la icona d\'entrada a la notificació\n
* Utilitzeu icones adaptables per a Android 8, utilitzeu la icona de llançador rodó per a Android 7\n
* Permet activar la cerca desbloquejada (veure configuració)\n
* S\'ha canviat la manera en què els fitxers s\'escriuen a través d\'Access Storage Framework, es solucionen problemes amb l\'actualització de fitxers a Google Drive oberts a través del selector de fitxers del sistema\n
* S\'han afegit alguns textos d\'informació per evitar alguns malentesos comuns\n
* Crea còpies de seguretat locals de bases de dades obertes amb èxit per reduir el risc de pèrdua de dades\n
* Actualitzat JSch per donar suport als xifrats SSH més recents\n
* Permet editar la configuració de la connexió, p. Ex. quan la contrasenya del WebDav ha canviat\n
* S\'ha afegit suport per al mode de contrasenya estàtica de Yubikey Neo\n
* Permet desactivar el suggeriment d\'emplenament automàtic\n
* S\'ha solucionat la fuga de dades al logcat\n
* correccions d\'errors\n
</string>
<string name="ChangeLog_1_04b">Versió 1.04b\n
* Evita errada quan l\'usuari intenta activar l\'emplenament automàtic als dispositius Huawei.\n </string>
<string name="ChangeLog_1_04"> Versió 1.04\n
* Afegit servei d\'emplenament automàtic per Android 8.0 i posteriors.\n
* Actualitzades les biblioteques, utilitats de compilació i versió de SDK.\n
</string>
<string name="ChangeLog_1_03">Versió 1.03\n
* Eliminat servei d\'accessibilitat d\'emplenament automàtic a petició de Google. Si us plau, vegeu la configuració d\'accés de contrasenya per trobar un connector que repliqui l\'anterior funcionalitat. \n
* Afegides de nou apps de tercers com opció emmagatzematge\n
* Visualitzador d\'imatges integrat per veure imatges adjuntes sense transferir-les a altres apps\n
* Actualitzat OkHttp que soluciona problemes amb algunes connexions\n
* Suport per a entrades de KeeTrayTOTP, ara suporta entrades Steam\n </string>
<string name="ChangeLog_1_02">Versió 1.02\n
* Diverses millores de seguretat. Moltes gràcies per a l\'informe de seguretat de jean-baptiste.cayrou@thalesgroup.com i vincent.fargues@thalesgroup.com i per la seva col·laboració! \n
* Suport per al connector KeyboardSwap (mireu les opcions d\'accés de contrasenya): permet canviar automàticament el mètode d\'entrada en dispositius no \"rotejats\". Gràcies a Mishaal Rahman de XDA-Developers per fer això possible. \n
* Arreglat servei d\'accessibilitat en versions recents de Chrome\n
* Arreglat neteja innecessària de les dades d\'empremta digital\n
* Arreglat fallades menors\n
* Actualitzat Dropbox SDK per assegurar la compatibilitat futura\n
* Eliminat la informació d\'errors a través de Xamarin Insights\n
* Actualitzada les eines de compilació\n
</string>
<string name="ChangeLog_1_01g">Versió 1.01-g\n
* Arreglat incident quan s\'intenta treballar fora de línea\n
* Arreglat codificació incorrecta de credencials d\'FTP(S)\n
* Arreglat incident quan s\'utilitza OneDrive en una versió antiga d\'Android\n
* Mostrar hora local en pantalla d\'entrada\n </string>
<string name="ChangeLog_1_01d"> Versió 1.01-d\n
* Arreglat fallo en llistat a OneDrive\n
* Permetre ignorar errors de certificat també quan la verificació del nom del domini falla (no recomanat per a ús en producció)\n
* Arreglat el desblocatge ràpid que fallava malgrat el codi era correcte\n
</string>
<string name="ChangeLog_0_9_8c"> Versió 0.9.8c\n
* Arreglat vulnerabilitat SSL en el Microsoft Live SDK (utilitzat en accedir a arxius mitjançant OneDrive) \n
* Arreglat error: versió anterior contenia dos mètodes d\'entrada (un petaba) \n
</string>
<string name="ChangeLog_1_01">Versió 1.01\n
* afegit suport per al nou format KDBX-4 (compatible amb Keepass 2.35) incloent derivació clau Argó 2 i encriptació ChaCha20.\n
* Re implementat emmagatzematge d\'arxiu WebDav, ara permet navegació d\'arxiu i dóna suport a encriptació moderna.\n
* Re implementat emmagatzematge d\'arxiu FTP, ara permet navegació d\'arxiu i dóna suport a encriptació (FTPS).\n
* Actualitzat a SDK OneDrive (l\'utilitzat prèviament Live SDK ja no es actualitzat)\n
* Actualitzat a SDK Dropbox SDK versió 2 (la versió 1 prèviament utilitzada del SDK es obsoleta).\n
* Afegit suport per a OwnCloud.\n
* Sol·licitud de permís d\'emmagatzematge abans d\'obrir fitxers locals
</string>
<string name="ChangeLog_1_0_0e">Versió 1.0.0e\n
* arreglat desblocatge amb empremta en dispositus antics Samsung amb Android 6\n
* afegit suport natiu per a dispostius x86 devices\n
* permeten amagar teclat durant l\'escan de l\'empremta digital\n
* actualització de sistema </string>
<string name="ChangeLog_1_0_0"> Versió 1.0.0\n
* Fingerprint, desbloqueig per empremta dactilar (necessita Android 6.0+ o un dispositiu Samsung)\n
* Afegit servei de completar automàticament (necessita Android 5.0+)\n
* Afegit suport a entrada mitjançant plantilles\n
* Afegit mode de funcionament offline\n
* Opció de còpia de registres\n
* Mode d\'auto-completar per a noms de camps\n
* Opció de esborrar elements de la llista de fitxers recents\n
* Petició d\'autorització en el runtime d\'Android 6.0\n
* Errors corregits (teclat intern, selecció d\'icones)\n
* Inclosa opció per enviar informe d\'errors\n
* Afegits missatges d\'ajuda en diferents punts\n
</string>
<string name="ChangeLog_0_9_9">Version 0.9.9\n
* Nou diseny de la interfície d\'usuari. Moltes gràcies a Stefano Pignataro (http://www.spstudio.at) for his support!\n
* Possibilitat d\'afegir icones pròpies\n
* Suport per al mode multi pantalla per a dispositius Samsung\n
* Ampliat el nombre de rondes d\'encriptació per defecte per a noves bases de dades \n
* Comprovació de claus duplicades en cams addicionals per evitar pèrdues de dades\n
</string>
<string name="ChangeLog_0_9_9c"> Versió 0.9.9c\n
* Ha tornat el tema fosc\n
* Es poden instal·lar altres paquets d\'icona (icones d\'estil de Windows estan disponibles a la botiga)\n
* Afegida la pregunta de confirmació quan s\'esborrin elements sense paperera de reciclatge\n
* Errors arreglats (mostra incorrectament la codificació secreta de OTP, icona de la app incorrecte en alguns llocs) \n
</string>
<string name="ChangeLog_0_9_8b">Version 0.9.8b\n
* Errors corregits (Errors al guardar algunes bases de dades, mal funcionament de l\'exportació a dispositiu local, crash de l\'app al seleccionar algunes opcions de preferències)\n</string>
<string name="ChangeLog_0_9_8">Version 0.9.8\n
* Suport per a accés entorns d\'enmagatzematge (permet escriure a la tarjeta SD i a Google Drive amb el teclat KP2A Offline)\n
* Prova per detectar una entrada errònia d\'usuari quan s\'introdueix WebDAV URLs (directori en lloc de fitxer)\n
* Font de les contrasenyes canviada\n
* Permet canviar el compte de Dropbox\n
* Error corregit: Ara es recorda la contrasenya d\'OTP</string>
<string name="ChangeLog_0_9_7b">Version 0.9.7b\n
* Traduccions actualitzades\n
* Errors corregits: Pèrdua de la font de les contrasenyes a la versió 0.9.7, ordenament per noms no funcionava a l\'ordenar grups\n</string>
<string name="ChangeLog_0_9_7"> Versió 0.9.7\n
* suport per escriure a bases de dades Keepass 1 (kdb) (beta!) \n
* millor canviar a teclat anterior (també treballa en dispositius que no disposin d\'accés de superusuari - rootejats)\n
* suport per a KeeChallenge amb challenges\n de longitud variable\n
* evitar prendre captures de pantalla des de les pantalles de DesbloqueigRàpid i contrasenya\n
* ordenació inversa per Ordena per data de modificació (ara descendent) \n
* errors arreglats: vista de notes ara actualitzada correctament després de canvis, vistes de contrasenyes ara amaga contrasenya correctament en (esperançadament) tots els dispositius, arreglat problema que li permetia afegir una entrada doble , solucionat el problema que mostrava avís de duplicat UUID fins i tot després d\'arreglar la base de dades\n </string>
<string name="ChangeLog_0_9_6">Version 0.9.6\n * allow to import key file and/or local database file to app internal directory (see settings)\n * allow different sorting options\n * improved preferences for automatic keyboard switching\n * updated application logo and notification design, design by Stefano Pignataro (http://www.spstudio.at)\n * password generator remembers last settings\n * set notification visibility for Android 5 lock screen\n * now clearing master password field when leaving the app without clicking OK\n * fixed issue with missing input languages in keyboard setting on some devices\n * fixed issue with automatic keyboard switching on rooted devices\n * added check for corrupt databases (duplicate UUIDs)\n * automatically reload database when change detected, solves security concern about revealing master password\n * improved polish small keyboard layout, fixed keyboard settings theme (thanks to Wiktor Ławski)\n </string>
<string name="ChangeLog_0_9_5"><b>Versió 0.9.5</b> \n * Arreglat problemes amb arxiu de navegació (especialment en Android 4.4) \n * Solucionat el problema amb la càrrega d\'arxius .kdb (Keepass 1) amb el Nexus 5 amb Android Lollipop\n * afegit l\'opció per evitar prendre screenshots/mostrant app a la llista d\'aplicacions recents\n * Solucionat el problema amb Google Drive arxiu d\'emmagatzematge (edició regular) \n * Permeten arxius clau en emmagatzematge deliberada tipus (edició regular) \n * SDK de Dropbox actualitzat per incloure un pedaç de seguretat oficial (edició regular) \n * Actualitzades eines de construcció--&gt; mida dels apk augmentada:-(\ n He promès alguns canvis més. Vindran amb el pròxim llançament- Ho sentim. Volia publicar aquests destrets calents tan aviat com sigui possible.</string>
<string name="ChangeLog_0_9_4"><b>Version 0.9.4</b>\n
* added plug-in support: See settings for how to get plug-ins!\n
* published QR plug-in (scan passwords, display passwords as QR code, transfer entries to other KP2A devices)\n
* published InputStick plugin (transfer credentials to your PC via bluetooth - requires InputStick USB stick)\n
* Third party apps can now simply implement querying KP2A for credentials. Are you a developer? Please add this to your app if suitable!\n
* added TOTP support (compatible with KeeOTP and TrayTotp)\n
* app should no longer be killed by Android when database is open\n
* database is no longer locked when leaving the app with the back button (see settings)\n
* display group names in search results view (*)\n
* added context menu in search results view including \"Navigate to parent\" option (*)\n
* added option to display group name in entry view (*)\n
* (*) thanks to Matthieu for implementing these features!\n
* support KeeChallenge (with Yubikey NEO). Thanks to Ben Rush for implementing the connector!\n
* improved user interface\n
* fixed a bug in Google Drive interface\n
* added option to disable the \"donate\" option\n
* QuickUnlock icon now hidden on Android 4.2+ devices by default\n </string>
<string name="ChangeLog_0_9_3_r5"><b>Version 0.9.3 r5</b>\n
* Incorporated fixes from Xamarin: Keepass2Android now compatible with ART on Android 4.4.2. Finally!\n
* Bug fixes: bugs in synchronization (refresh display, correct check for changes on http), bugs on Android 2.x devices, bugs in Google Drive and OneDrive storage implementations, clear clipboard on close database, bug opening attachments, display problems with keyboard\n</string>
<string name="ChangeLog_0_9_3"><b>Version 0.9.3</b>\n
* New keyboard with many improvements. See settings to customize.\n
* Read-only support for kdb (Keepass 1 files). Experimental!\n
* Added SFTP support\n
* Added workaround for bug in ART (Android 4.4.2)\n
* Bug fixes\n</string>
<string name="ChangeLog_0_9_2"><b>Version 0.9.2</b>\n
* Added OTP support (compatible with OtpKeyProv plugin)\n
* Integrated NFC support for OTPs from YubiKey NEO \n
* Several UI improvements\n
* Integrated Keepass 2.24 library\n
* Added option to kill the app process (see settings)\n
* Improved SSL certificate validation\n
* Bug fixes\n</string>
<string name="ChangeLog_0_9_1"><b>Version 0.9.1</b>\n
* Integrated SkyDrive support (Keepass2Android regular edition only)\n
* Fixed problems with Google Drive integration\n
* Added NTLM support</string>
<string name="ChangeLog_0_9"><b>Version 0.9</b>\n
* Integrated Dropbox and Google Drive support (read/write databases; Keepass2Android regular edition only)\n
* Integrated custom file browser (based on android-filechooser by HBA)\n
* Improved user interface for creating new databases\n
* Included custom font DejaVu Sans Mono for displaying passwords\n
* Bug fixes</string>
<string name="ChangeLog_0_8_6"><b>Version 0.8.6</b>\n
* Support for Twofish cipher\n
* Allow editing of groups\n
* Allow moving of entries and groups\n
* QuickUnlock icon can be made transparent (see settings)\n
* Bug fixes</string>
<string name="ChangeLog_0_8_5"><b>Version 0.8.5</b>\n
* Remote files are stored in the local application cache to allow offline usage (including editing and later synchronization). See settings. \n
* Notification icon to visualize the lock-state of the database (see settings)\n
* Improved determination of lock-state in some situations\n
* Database files are loaded to memory while you are typing your password for increased loading speed (see settings)\n
* Entries can be added to root group\n
* Bug fixes (resolving reference fields, problems with keyboard on Italian an Chinese devices)</string>
<string name="ChangeLog_0_8_4"><b>Version 0.8.4</b>\n
* External database changes are detected and merged when saving\n
* Improved loading performance\n
* Improved search toolbar with suggestions\n
* New App logo!\n
* Added support for .kdbp format for faster loading/saving\n
* Improved editing of extra strings and hidden display when protected\n
Thanks to Alex Vallat for his code contributions!\n
Thanks to Niki Hüttner (www.close-cut.de) for the new logo!\n</string>
<string name="ChangeLog_0_8_3"><b>Version 0.8.3</b>\n
* Username/TAN index displayed in entry list (see settings)\n
* Entries can be created if search from browser doesn\'t return results\n
* KP2A keyboard provides possibility to search for credentials for current app\n
* App automatically closes after selecting an entry for use in keyboard\n
* Keyboard selection dialog automatically opens after search for URL (see settings)\n
* Placeholders in entry fields are replaced before copying (most placeholders supported)\n
* minor bug fixes
</string>
<string name="ChangeLog_0_8_2"><b>Version 0.8.2</b>\n
* Support for Digest Authentication in WebDAV\n
* Bugfixes (OI File manager, Open URL)</string>
<string name="ChangeLog_0_8_1"><b>Version 0.8.1</b>\n
* KP2A Offline and \"Online\" can be installed both again\n
* Added new translations (thanks to all contributors!)</string>
<string name="ChangeLog_0_8"><b>Version 0.8</b>\n
* Improved user interface especially for Android 4.x devices\n
* Allow using deliberate file managers for selecting existing files\n
* Added safer way for opening attachments (through cache directory)\n
* fixed bugs in Edit activity\n
* probably introduced new bugs :-)</string>
<string name="ChangeLog_keptDonate">Estesa possibilitat de donar una cervesa o una altra cosa</string>
<string name="ChangeLog_0_7"><b>Version 0.7</b>\n
* Increased loading speed: key transformations now 10x faster!\n
* Added Keepass2Android soft-keyboard: Switch to this keyboard for entering credentials. Shields you from clipboard-based password sniffers (disable old clipboard notifications in the options)\n
* Added option to donate a beer or something else (see menu)</string>
<string name="ChangeLog"><b>Version 0.6.2</b>\n
* Integració amb Google Drive/Dropbox/... : Compatible amb l\'APP oficial Google Drive o Dropbox i permet obrir el fitxer .kdbx que necessitis. Suport el teclat KP2A.\n
* Dialeg de cerca millorat \n
* Resultats de cerca millorats per a poder compartir URLs amb subdominis\n
* Opcions de feedback afegides per reportar problemes, i valoració i traducció de l\'aplicació al mateix menú\n
\n
<b>Version 0.6.1</b>\n
* Detecta quan la base de dades canvia en segon pla (per exemple degut a l\'activitat de sincronització de l\'aplicació)\n
* Cerca millorada per a URLs des de l\'explorador d\'internet\n
* Dialeg de confirmació quan descartes canvis\n
\n
<b>Version 0.6</b>\n
Revisió inicial per al públic
</string>
<string-array name="clipboard_timeout_options">
<item>30 segons</item>
<item>1 minut</item>
@@ -947,7 +688,7 @@ Revisió inicial per al públic
</string-array>
<string-array name="sftp_auth_modes">
<item>Contrasenya</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">

View File

@@ -22,8 +22,8 @@
<string name="short_app_name_nonet">KP2A Offline</string>
<string name="app_timeout">Vypršel časový limit aplikace</string>
<string name="app_timeout_summary">Čas, po který, při neaktivitě aplikace, databáze zůstane odemčená.</string>
<string name="kill_app_label">Ukončit proces aplikace</string>
<string name="show_kill_app">Tlačítko Zavřít</string>
<string name="kill_app_label">Ukončit proces aplikace</string>
<string name="show_kill_app_summary">Zobrazit tlačítko pro ukončení aplikace na obrazovce s heslem (pro paranoidní uživatele)</string>
<string name="application">Aplikace</string>
<string name="application_settings">Nastavení aplikace</string>
@@ -402,6 +402,14 @@
<string name="ShowSeparateNotifications_summary">Zobrazit oddělená upozornění pro kopírování uživatelského jména a hesla do schránky a pro aktivování klávesnice.</string>
<string name="AccServiceAutoFill_prefs">Služba automatického doplňování</string>
<string name="AutoFill_prefs">Služba automatického vyplňování</string>
<string name="AutoFillTotp_prefs_ShowNotification_summary">Při automatickém vyplňování položky pomocí TOTP zobrazit oznámení položky s tlačítkem Kopírovat TOTP.</string>
<string name="AutoFillTotp_prefs_ShowNotification_title">Zobrazit oznámení položky</string>
<string name="AutoFillTotp_prefs_title">Automatické vyplňování položek TOTP</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_title">Zkopírovat TOTP do schránky</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_summary">Při automatickém vyplňování položky pomocí TOTP zkopírujte TOTP do schránky</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_summary">Při automatickém vyplňování položky pomocí TOTP aktivujte vestavěnou klávesnici. Klávesnice má tlačítko TOTP.</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_title">Aktivace vestavěné klávesnice</string>
<string name="TotpCopiedToClipboard">Zkopírováno TOTP do schránky</string>
<string name="ShowKp2aKeyboardNotification_title">Notifikace klávesnice KP2A</string>
<string name="ShowKp2aKeyboardNotification_summary">Zpřístupnit celý záznam pomocí klávesnice KP2A (doporučeno).</string>
<string name="OpenKp2aKeyboardAutomatically_title">Přepnout klávesnici</string>
@@ -541,7 +549,9 @@
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragename_gdriveKP2A">Google Drive (KP2A soubory)</string>
<string name="filestoragehelp_gdriveKP2A">Nechcete-li dát aplikaci KeePass2Android přístup k celému vašemu Google Drive, použijte tuto možnost. Upozorňujeme, že nejprve musíte vytvořit soubor s databází položek, existující soubory nejsou viditelné pro aplikaci. Toto můžete udělat z obrazovky Vytvořit databázi, nebo exportem právě otevřené databáze, volbou této možnosti</string>
<string name="filestoragename_pcloud">PCloud (složka KP2A)</string>
<string name="filestoragehelp_pcloud">Tento typ úložiště si vyžaduje přístup pouze do pCloudové složky \"Applications/Keepass2Android\". Chcete-li použít existující databázi ze svého pCloud účtu, ujistěte se, že je soubor umístěn v této složce.</string>
<string name="filestoragename_pcloudall">PCloud (plný přístup)</string>
<string name="filestoragename_onedrive">OneDrive</string>
<string name="filestoragename_onedrive2">OneDrive</string>
<string name="filestoragename_onedrive2_full">Všechny soubory a sdílené soubory</string>
@@ -587,13 +597,14 @@
<string name="CouldntLoadChalAuxFile_Hint">Použijte zásuvný modul KeeChallenge v KeePass 2.x (PC) pro konfiguraci databáze k používání s odpověďmi na výzvy!</string>
<string name="ErrorUpdatingChalAuxFile">Chyba při aktualizaci pomocného souboru OTP!</string>
<string name="TrayTotp_SeedField_title">Název \"seed\" položky TOTP</string>
<string name="TOTP">TOTP</string>
<string name="TrayTotp_SeedField_summary">Pokud používáte Keepass 2 modul \"TrayTotp\" v ne-výchozím nastavení, zadejte název položky \"seed\" podle nastavení na PC.</string>
<string name="TrayTotp_SettingsField_title">Nastavení jména TOTP položky</string>
<string name="TrayTotp_SettingsField_summary">Zde zadejte název položky \"nastavení\" pro TrayTotp.</string>
<string name="TrayTotp_prefs">TrayTotp</string>
<string name="DebugLog_prefs_prefs">Logovací soubor pro ladění chyb</string>
<string name="DebugLog_title">Použít protokolovací soubor</string>
<string name="JSchDebug_title">Protokolování ladění SFTP</string>
<string name="FtpDebug_title">Protokolování ladění FTP/SFTP</string>
<string name="DebugLog_summary">Ulož výstup aplikace do lokálního souboru</string>
<string name="DebugLog_send">Pošli soubor s ladícími informacemi...</string>
<string name="loading">Nahrávám…</string>
@@ -666,11 +677,11 @@
• Ujistěte se, že jste zadali správné heslo. Použitím ikonky s okem odkryjete vložené heslo.\n
• Ujistěte se, že jste použili správný typ hesla. Ujistěte se, že tento typ odpovídá typu použitému při vytváření databáze.\n
• Ujistěte se, že jste použili správný databázový soubor.</string>
• Ujistěte se, že jste použili správný soubor databáze.</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
&#8226; Nápověda: Pokud si myslíte že by databáze mohla být porušena, nebo si nepamatujete hlavní klíč, můžete zkusit poslední úspěšně otevřenou verzi kliknutím \"%1$s\" a zvolením místní zálohy.</string>
&#8226; Nápověda: Pokud si myslíte že by soubor databáze mohl být poškozený, nebo si nepamatujete hlavní klíč, můžete zkusit poslední úspěšně otevřenou verzi souboru kliknutím \"%1$s\" a zvolením místní zálohy.</string>
<string name="HintLocalBackupOtherError"> \n
&#8226; Nápověda: Keepass2Android uložil poslední úspěšně otevřenou verzi souboru v místní paměti. Můžete jí otevřít zmáčknutím \"%1$s\" a výběrem místní zálohy.
&#8226; Nápověda: Keepass2Android uložil poslední úspěšně otevřenou verzi souboru do interního úložiště. Můžete ji otevřít klepnutím na \"%1$s\" a výběrem místní zálohy.
</string>
<string name="CorruptDatabaseHelp"> Soubor je poškozený. \n
Zde je několik rad, které vám mohou pomoci zjistit příčinu problému:\n
@@ -707,6 +718,26 @@
<string name="EntryChannel_desc">Upozornění pro usnadnění přístupu k momentálně zvolené položce.</string>
<string name="CloseDbAfterFailedAttempts">Zavřít databázi po třech neúspěšných pokusech o odemknutí.</string>
<string name="WarnFingerprintInvalidated">Varování! Biometrické ověření může být zneplatněno Androidem, např. po přidání nového otisku prstu do nastavení zařízení. Ujistěte se, že vždy víte, jak odemknout pomocí hlavního hesla!</string>
<string-array name="ChangeLog_1_11">
<item>Přidána plovoucí akční tlačítka pro vyhledávání a přehled TOTP (pokud jsou přítomny položky TOTP).</item>
<item>Vylepšeno zobrazení polí TOTP přidáním indikátoru časového limitu a jeho výraznějším zobrazením.</item>
<item>TOTP lze nyní zobrazit v zobrazení skupiny.</item>
<item>Kopírování textové hodnoty do schránky při dlouhém stisknutí v zobrazení položky.</item>
<item>Usnadnění přístupu k TOTP na vestavěné klávesnici.</item>
<item>Zobrazení upozornění na položku při automatickém vyplňování položky TOTP. To umožňuje zkopírovat TOTP do schránky. Konfiguraci chování naleznete v předvolbách.</item>
<item>Aktualizovaná implementace TOTP řeší problémy s kompatibilitou s KeePass2 a TrayTOTP</item>
<item>Drobná vylepšení</item>
</string-array>
<string-array name="ChangeLog_1_11_net">
<item>Aktualizace pCloud SDK pro zajištění přístupu ke sdíleným složkám</item>
</string-array>
<string-array name="ChangeLog_1_10">
<item>Přidání podpory oprávnění pro oznámení v systému Android 13+</item>
<item>Zlepšení implementace FTP a SFTP</item>
<item>Přidání přístupu k plnému pCloudu</item>
<item>Povolení výběru jazyka systému v dialogovém okně jazyka</item>
<item>Oprava problému se zapamatováním typu souboru klíče + Challenge</item>
</string-array>
<string-array name="ChangeLog_1_09e">
<item>Opravy pádů a nečekaného odhlašování</item>
<item>Přepnutí na novou implementaci SFTP, podporující moderní algoritmy pro veřejné klíče jako rsa-sha2-256</item>

View File

@@ -22,8 +22,8 @@
<string name="short_app_name_nonet">KP2A Offline</string>
<string name="app_timeout">App-timeuot</string>
<string name="app_timeout_summary">Tidsforløb inden databasen låses, når app\'en er inaktiv.</string>
<string name="kill_app_label">Stands app-proces</string>
<string name="show_kill_app">Luk-knap</string>
<string name="kill_app_label">Stands app-proces</string>
<string name="show_kill_app_summary">Vis en knap på adgangskodeskærmen til standsning af app-processen (til paranoide brugere)</string>
<string name="application">App</string>
<string name="application_settings">App-indstillinger</string>
@@ -641,24 +641,6 @@
<string name="Continue">Fortsæt</string>
<string name="NoFilenameWarning">Den angivne URI ligner ikke et filnavn. Sikker på, at dette er en gyldig fil?</string>
<string name="FirstInvalidCompositeKeyError">Ugyldig kombinøgle! Forsøg igen.</string>
<string name="RepeatedInvalidCompositeKeyHelp">Ugyldig kombinøgle! Prøv flg. trin for at oplåse din database:\n
&#8226; Tjek, at du har angivet den korrekte adgangskode. Benyt øjenikonet til at vise den angivne adgangskode.\n
&#8226; Tjek, at du har valgt den korrekte adgangskodetype. Tjek, at denne modsvarer typen, der blev benyttet ved databaseoprettelsen.\n
&#8226; Tjek, at du har valgt den rigtige databasefil.</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
&#8226; Tip: Mener du, at din databasefil kan være beskadiget, eller kan du ikke huske hovedadgangskoden efter at have skifteet den, kan du prøve den senest åbnede filversion ved at trykke på \"%1$s\" og vælge den lokale sikkerhedskopi.</string>
<string name="HintLocalBackupOtherError"> \n
&#8226; Tip: Keepass2Android har gemt den senest åbnede filversion på den interne lagerplads. Du kan åbne den ved at trykke på \"%1$s\" og vælge den lokale sikkerhedskopi.
</string>
<string name="CorruptDatabaseHelp">Filen er beskadiget.\n
Her er nogle tip til hjælp for diagnosticeringen af problemet:\n
&#8226; Kopierede du filen via USB (MTP-tilstand), så prøv igen med et værktøjer såsom MyPhoneExplorer. MTP trunkerer i visse tilfælde filer.\n
&#8226; Kan du ikke åbne filen fra samme placering på din PC, er det meget sandsynligt, at filen faktisk er beskadiget. Benyt da en databasesikkerhedskopi. Mener du, at Keepass2Android har ødelagt filen, så kontakt venligst supporten.\n
&#8226; Kan du stadig åbne filen på din PC, så kontakt venligst supporten. Du kan evt. forsøge at gemme den med andre indstillinger (f.eks. ikke-zippet) på PC\'en og igen forsøge at åbne den i Keepass2Android.
</string>
<string name="open_other_db">Åbn en anden database…</string>
<string name="select_database">Vælg database</string>
<string name="configure_child_dbs">Opsæt underordnet databases…</string>
@@ -751,154 +733,6 @@
<item>Fejlrettelser</item>
<item>Fejlrettelser</item>
</string-array>
<string name="ChangeLog_1_07"> Version 1.07\n
* Løser nedbrud på Samsungs Android 9\n
* Tillader åbning af flere end én database, kompatibel med KeeAutoExec\n
* SFTP: Tillader offentlig nøglegodkendelse, tjekker om værtsnøgle er ændret\n
* Introducerer pCloud-understøttelse - tak til gilbsgilbs!\n
* Gør Nextcloud-support eksplicit\n
* Forbedrer lagring og opdaterng af delpostvedhæftninger\n
* Flere muligheder for at tilpasse adfærd til personlige præferencer\n
* SSL: Stol på brugercertifikater\n
* Forbedring af Autoudfylding (fungerer nu med Firefox, reducerer mængden af pop-opper)\n
* Fejlretninger\n
</string>
<string name="ChangeLog_1_06"> Version 1.06\n
* Skift til ykDroid i stedet for YubiChallenge som app til Yubikey Udfordring-Svar.\n
* Implementér understøttelse for KeepassXC-agtig Udfordring-Svar. Bemærk: Databaseformatet skal være KDBX4!\n
* Nægt at indlæse/åbne kasserede filer fra Google Drev\n
* Skift TLS-implementering for FTPS, tilføj workaround til JSch-fejl med servere, som understøtter gssapi-with-mic\n
* fejlretninger\n
</string>
<string name="ChangeLog_1_05">Version 1.05\n
     * Bruger notifikationsskanaler til Android 8, som tillader opsætning via systemindstillinger\n
     * Viser indtastningsikon i notifikation\n
     * Bruger Adaptive Ikoner til Android 8, bruger rundt startikon til Android 7\n
     * Tillader søgningsaktivering ved oplåsning (se indstillinger)\n
     * Ændret måden, hvorpå filer arkiveres via Storage Access Framework, løser problemer med opdatering af filer på Google Drev åbnet via Systemfilvælger\n
     * Tilføjet nogle infotekster for at undgå visse almindelige misforståelser\n
     * Opretter lokale sikkerhedskopier af vellykkede åbnede databaser for at reducere risiko for datatab\n
     * Opdateret JSch for at understøtte nyere SSH-kodninge\n
     * Tillader redigering af forbindelsesindstillinger, f.eks. når WebDav-kodeord skiftes\n
     * Tilføjet support for Yubikey Neos statiske adgangskodetilstand\n
     * Tillader deaktivering af Autoudfyld-forslag\n
     * Rettet datalækage til logcat\n
     * fejlrettelser\n </string>
<string name="ChangeLog_1_04b"> Version 1.04b\n
* Forhindrer nedbrud, når bruger forsøger at aktivere Autoudfyld på Huawei-enheder.\n
</string>
<string name="ChangeLog_1_04"> Version 1.04\n
* Added Autoudfyld-tjeneste til Android 8.0 og senere.\n
* Opgradede biblioteker, implementeringsværktøjer og Target SDK-version.\n
</string>
<string name="ChangeLog_1_03"> Version 1.03\n
* Fjernet tilgængelighedstjeneste til Autoudfyld som anmodet af Google. Se adgangskodetilgangsindstillinger for at finde et plugin, der replikerer ttidligere funktionalitet.\n
* Tilføjet tredjeparts-apps som lagringsmulighed igen\n
* Integreret billedfremviser til visning af vedhæftede billeder uden at overføre dem til andre apps\n
* Opgradet OkHttp for at løse problemer med visse tilslutninger\n
* Understøttelse af KeeTrayTOTP-angivelser, understøtter nu Steam-angivelser\n
</string>
<string name="ChangeLog_1_02"> Version 1.02\n
* Several security improvements. Thanks a lot for the security report by jean-baptiste.cayrou@thalesgroup.com and vincent.fargues@thalesgroup.com and for their collaboration!\n
* Support for KeyboardSwapPlugin (see password access options): allows to switch input method automatically on non-rooted devices. Thanks to Mishaal Rahman from XDA-Developers to make this possible.\n
* Fix for Accessibility Service with recent Chrome versions\n
* Fix for unnecessary clearing of fingerprint data\n
* Fix minor crashes\n
* Updated Dropbox SDK to ensure future compatibility\n
* Removed error reporting through Xamarin Insights\n
* Updated build tools\n
</string>
<string name="ChangeLog_1_01g"> Version 1.01-g\n
* Rettelse til nedbrud under forsøg på at arbejde offline\n
* Rettelse af ukorrekt encoding af FTP(S)-akkreditivers\n
* Rettelse til nedbrud under brug af OneDrive og på ældre Android-versioner\n
* Visning af klokkeslæt som lokalt ditto på indtastningsskærmen\n
</string>
<string name="ChangeLog_1_01d"> Version 1.01-d\n
* Rettelse af OneDrive-filoversigt\n
* Tillader også at ignorere certifikatfejl, når værtsnavnsgodkendelse fejler (ikke anbefalet til produktionsbrug)\n
* Rettelse af Hurtigoplåsnings periodiske afvisning trods korrekt oplåsningskode\n
</string>
<string name="ChangeLog_0_9_8c"> Version 0.9.8c\n
* Rettelse af SSL-sårbarhed i Microsoft Live-SDK (bruges under filtilgang via OneDrive)\n
* Fejlrettelse: Foregående udgivelse indeholdt to inputmetoder (én oplevede nedbrud)\n
</string>
<string name="ChangeLog_1_01"> Version 1.01\n
* Tilføjet understøttelse af det nye KDBX-4 format (kompatibelt med Keepass 2.35) inkl. Argon2- nøgleafledninger og ChaCha20-kryptering.\n
* Genimplementeret WebDav-fillagring, tillader nu filgennemsyn samt understøtter moderne kryptering.\n
* Genimpleenterede FTP-fillagring, tillader nu filgennemsyn samt understøtter kryptering (FTPS).\n
* Opdateret til OneDrive-SDK (tidligere benyttede Live-SDK opdateres ikke længere)\n
* Opdaterede til Dropbox-SDK version 2 (tidligere benyttede version 1-SDK er forældet).\n
* Tilføjet understøttelse af OwnCloud.\n
* Prompt om lagerpladsrettigheder inden lokale filer åbnes
</string>
<string name="ChangeLog_1_0_0e"> Version 1.0.0e\n
* Rettelse til Fingeraftryksoplåsning på ældre Samsung-enheder med Android 6\n
* Tilføjet indbygget understøttelse af x86-enheder\n
* Tillader skjulning af softtastatur under fingeaftryksaflæsning\n
* Build-systemopdatering
</string>
<string name="ChangeLog_1_0_0"> Version 1.0.0\n
* Fingeraftryksoplåsning (kræver Android 6.0+ eller a Samsung-enheder)\n
* Tilføjet Autoudfyldningstjeneste (kræver Android 5.0+)\n
* Tilføjet understøttelse af postskabeloner\n
* Tilføjet \"arbejd offline\" tilstand\n
* Tillader kopiering af poster\n
* Autofuldførelsestilstand til feltnavne\n
* Tillader at fjerne emner fra listen seneste filer\n
* Tilladelsesforespørgsel på eksekveringstidspunktet i Android 6.0\n
* Fejlrettelse (i indbygget tastatur under valg af ikoner)\n
* Medtaget mulighed for indsendelse af fejlrapporter\n
* Tilføjet hjælpemeddelelser på flere steder\n
</string>
<string name="ChangeLog_0_9_9">Version 0.9.9\n
* Komplet UI-redesign. Tak til Stefano Pignataro (http://www.spstudio.at) for hans støtte!\n
* Tillader at tilføjelse af tilpassede ikoner\n
* Understøttelse for Multivinduetilstand på Samsung-enheder\n
* Forøget standardantallet af krypteringegennemløb på nye databaser\n
* Tjek af dubletnøgler i ekstrafelter for at undgå datatab\n
</string>
<string name="ChangeLog_0_9_9c"> Version 0.9.9c\n
* Mørkt tema er tilbage\n
* Du kan installere andre ikonpakker (gammeldags Windows-stil ikoner er tilgængelige fra Play Butik)\n
* Tilføjet bekræftelsesspørgsmål, når elementer slettes udenom Papirkurv\n
* Fejlrettelser (forkert visning af OTP-hemmelighedskoding, forkert appikon på visse steder)\n
</string>
<string name="ChangeLog_0_9_8b">Version 0.9.8b\n
* Fejlrettelser (Gem fejlede for visse databaser, eksport til lokal enhed fejlede, valg af visse præferenceindstillinger fik app\'en til at gå ned)\n</string>
<string name="ChangeLog_0_9_8">Version 0.9.8\n
* Undrstøttelse af Storage Access Framework (tillader skribning til SD-kort og Google Drev i KP2A-offline)\n
* Forsøger at detektere forket brugerinput, når WebDAV URL\'er angives (mappe i stedet for fil)\n
* Ændret adgangskodeskrifttype\n
* Tilladerændring af Dropbox-konto\n
* Rettet fejl: Husker nu OTP-adgangskode</string>
<string name="ChangeLog_0_9_7b">Version 0.9.7b\n
* Opdaterede oversættelser\n
* Fejlrettelser: Adgangskodeskrifttype manglede i 0.9.7, sortering efter navn sorterede ikke grupper\n</string>
<string name="ChangeLog_0_9_7">Version 0.9.7\n
* skriveunderstøttelse til Keepass 1-databaser (kdb) (beta!)\n
* bedre skift tilbage til foregående tastatur (fungerer også på ikke-root enheder)\n
* understøttelse af KeeChallenge med med variabel udfordringslængde\n
* forhindrer optagelse af skærmfotos på Hurtig Oplåsnings- og Adgangskodeskærme\n
* omvendt sorteringsrækkefølge for Sortér efter ændringsdato (nu faldende)\n
* fejlrettelser: Notatvisninger opdateres nu korrekt efter ændringer, Adgangskodevisninger skjuler nu adgangskode korrekt på (forhåbentlig) alle enheder, rettet problem, der gjorde det muligt at tilføje en post to gange, rettet problem med visning af Dublet UUID-advarsel, selv efter at databasen var rettet\n</string>
<string name="ChangeLog_0_9_4"><b>Version 0.9.4</b>\n
* Tilføjet plugin-support: Se indstillinger for, hvordan du henter plugins!\n
* Offentliggjort QR-plugin (scan adgangskoder, vis adgangskoder som QR-kode, overfør poster til andre KP2A-enheder)\n
* Publiceret InputStick-plugin (overfør legitimationsoplysninger til din pc via bluetooth - kræver InputStick-USB-stick)\n
* Apps fra tredjepart kan nu blot implementere forespørgsel til KP2A for legitimationsoplysninger. Er du udvikler? Føj dette til din app, hvis det er passende!\n
* Tilføjet TOTP-understøttelse (kompatibel med KeeOTP og TrayTotp)\n
* App bør ikke længere blive slået ihjel af Android, når databasen er åben\n
* Databasen er ikke længere låst, når du forlader appen med tilbage-knappen (se indstillinger)\n
* Vis gruppenavne i søgeresultatvisningen (*)\n
* Tilføjet kontekstmenu i søgeresultatvisningen, inklusive \"Navigér til overordnet\"-mulighed (*)\n
* Tilføjet mulighed for at vise gruppenavn i postvisning (*)\n
* (*) Tak til Matthieu for implementeringen af disse funktioner!\n
* Understøtter KeeChallenge (med Yubikey NEO). Tak til Ben Rush for implementering af forbindelsesleddet!\n
* Forbedret brugergrænseflade\n
* Rettet en fejl i Google Drev-grænseflade\n
* Tilføjet mulighed for at deaktivere \"Donér\"-funktionen\n
* QuickUnlock-ikonet er nu skjult på enheder med Android 4.2+ som standard\n</string>
<string name="ChangeLog_keptDonate">Udvidet mulighed for donation af en øl eller noget andet</string>
<string-array name="clipboard_timeout_options">
<item>30 sekunder</item>
@@ -948,7 +782,7 @@
</string-array>
<string-array name="sftp_auth_modes">
<item>Adgangskode</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">

View File

@@ -23,8 +23,8 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="short_app_name_nonet">KP2A Offline</string>
<string name="app_timeout">Zeitsperre für Anwendung</string>
<string name="app_timeout_summary">Bei inaktiver Anwendung wird die Datenbank nach Ablauf der eingestellten Zeit automatisch gesperrt.</string>
<string name="kill_app_label">App-Prozess beenden</string>
<string name="show_kill_app">Schließen-Button</string>
<string name="kill_app_label">App-Prozess beenden</string>
<string name="show_kill_app_summary">Eine Schaltfläche auf dem Passwortbildschirm anzeigen, um den App-Prozess zu beenden (für paranoide Benutzer)</string>
<string name="application">Anwendung</string>
<string name="application_settings">Anwendungseinstellungen</string>
@@ -69,7 +69,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="clipboard_timeout">Zeitsperre für Zwischenablage</string>
<string name="clipboard_timeout_summary">Zeit bis zum Löschen der Zwischenablage nach dem Kopieren von Benutzername oder Passwort</string>
<string name="copy_username">Benutzername in die Zwischenablage kopieren</string>
<string name="copy_password">Kennwort in die Zwischenablage kopieren</string>
<string name="copy_password">Passwort in die Zwischenablage kopieren</string>
<string name="copy_totp">TOTP in die Zwischenablage zu kopieren</string>
<string name="available_through_keyboard">Eintrag ist über die KP2A-Tastatur verfügbar</string>
<string name="app_language_pref_title">App Sprache</string>
@@ -96,13 +96,13 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="enable_fingerprint_unlock">Komplettes biometrisches Entsperren aktivieren</string>
<string name="enable_fingerprint_quickunlock">Biometrisches Entsperren für QuickUnlock</string>
<string name="fingerprint_unlock_failed">Biometrisches Entsperren fehlgeschlagen. Entschlüsselungsschlüssel wurde vom Android-System für ungültig erklärt. Das kommt üblicherweise vor, wenn die Biometrische Authentifizierung oder die Sicherheitseinstellungen geändert wurden. </string>
<string name="fingerprint_disabled_wrong_masterkey">Entsperren der Datenbank fehlgeschlagen: Ungültiger zusammengesetzter Schlüssel. Biometrisches Entsperren wurde deaktiviert, da das gespeicherte Masterpasswort nicht länger gültig ist.</string>
<string name="fingerprint_disabled_wrong_masterkey">Entsperren der Datenbank fehlgeschlagen: Ungültiger zusammengesetzter Schlüssel. Biometrisches Entsperren wurde deaktiviert, da das gespeicherte Hauptpasswort nicht länger gültig ist.</string>
<string name="fingerprint_reenable">Bitte Biometrisches Entsperren für das neue Hauptpasswort erneut aktivieren.</string>
<string name="fingerprint_reenable2">Bitte mit Passwort entsperren und anschließend in den Datenbankeinstellungen das Biometrische Entsperren erneut aktivieren.</string>
<string name="FingerprintInitFailed">Initialisierung der biometrischen Authentifizierung fehlgeschlagen. </string>
<string name="FingerprintSetupFailed">Daten konnten nicht verschlüsselt werden. Dies kann passieren, wenn Fingerabdrücke in den Systemeinstellungen hinzugefügt oder gelöscht wurden, während Keepass2Android auf deinen Fingerabdruck wartet.</string>
<string name="enable_fingerprint_unlock_Info">Mit dieser Option wird das Hauptpasswort verschlüsselt im Android-Keystore auf dem Gerät gespeichert, geschützt durch einen Fingerabdruck. Dadurch kann die Datenbank per biometrischer Authentifizierung entsperrt werden.</string>
<string name="enable_fingerprint_quickunlock_Info">Erlaubt es, den biometrische Authentifizierung anstelle des QuickUnlock-Codes zu nutzen. Speichert keine Informationen bezüglich des Masterpassworts.</string>
<string name="enable_fingerprint_quickunlock_Info">Erlaubt es, die biometrische Authentifizierung anstelle des QuickUnlock-Codes zu nutzen. Speichert keine Informationen bezüglich des Hauptpassworts.</string>
<string name="enter_filename">Dateinamen der Datenbank eingeben</string>
<string name="entry_accessed">Letzter Zugriff</string>
<string name="entry_cancel">Abbrechen</string>
@@ -135,7 +135,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="error_invalid_db">Ungültige Datenbank.</string>
<string name="error_invalid_path">Ungültiger Pfad.</string>
<string name="error_no_name">Ein Name ist erforderlich.</string>
<string name="error_nopass">Ein Kennwort oder eine Schlüsseldatei wird benötigt.</string>
<string name="error_nopass">Ein Passwort oder eine Schlüsseldatei ist erforderlich.</string>
<string name="error_pass_gen_type">Mindestens eine Form der Passwort-Generierung muss ausgewählt werden</string>
<string name="error_pass_match">Die Passwörter stimmen nicht überein.</string>
<string name="error_rounds_not_number">Anzahl der Wiederholungen muss eine Zahl sein.</string>
@@ -148,11 +148,12 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="group">Gruppe</string>
<string name="hint_comment">Notizen</string>
<string name="hint_conf_pass">Passwort bestätigen</string>
<string name="hint_generated_password">Erzeugtes Kennwort</string>
<string name="hint_generated_password">Erzeugtes Passwort</string>
<string name="hint_group_name">Name der Gruppe</string>
<string name="hint_keyfile">Schlüsseldatei</string>
<string name="hint_length">Länge</string>
<string name="hint_pass">Passwort</string>
<string name="hint_keyfile_path">Pfad des privaten SSH-Schlüssels</string>
<string name="hint_login_pass">Passwort</string>
<string name="hint_title">Name</string>
<string name="hint_url">URL</string>
@@ -192,7 +193,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="menu_navigate">Zur übergeordneten Gruppe navigieren</string>
<string name="menu_donate">Spendiere ein Bier...</string>
<string name="menu_edit">Bearbeiten</string>
<string name="menu_hide_password">Kennwort verstecken</string>
<string name="menu_hide_password">Passwort verbergen</string>
<string name="menu_lock">Datenbank sperren</string>
<string name="menu_open">Öffnen</string>
<string name="menu_close">Schließen</string>
@@ -368,12 +369,12 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="UseFileTransactions_summary">Dateitransaktionen beim Schreiben von Datenbank-Dateien verwenden</string>
<string name="LockWhenScreenOff_title">Sperren, wenn Bildschirm ausgeschaltet</string>
<string name="LockWhenScreenOff_summary">Sperre die Datenbank wenn der Bildschirm ausgeschaltet wird.</string>
<string name="ClearPasswordOnLeave_title">Eingegebenes Master-Passwort-Feld leeren</string>
<string name="ClearPasswordOnLeave_summary">Leere das Eingabefeld für das Master-Passwort, wenn der Passwort-Eingabebildschirm verlassen wird, ohne dass die Datenbank entsperrt wurde.</string>
<string name="ClearPasswordOnLeave_title">Eingegebenes Hauptpasswort-Feld leeren</string>
<string name="ClearPasswordOnLeave_summary">Leere das Eingabefeld für das Hauptpasswort, wenn der Passwort-Eingabebildschirm verlassen wird, ohne dass die Datenbank entsperrt wurde.</string>
<string name="LockWhenNavigateBack_title">Beim Verlassen der App sperren</string>
<string name="LockWhenNavigateBack_summary">Datenbank sperren, wenn die App mit dem Zurück-Knopf verlassen wird.</string>
<string name="UseKp2aKeyboardInKp2a_title">Integrierte Tastatur in Keepass2Android verwenden</string>
<string name="UseKp2aKeyboardInKp2a_summary">Wenn Sie ihrer Standardtastatur nicht vertrauen, setzen Sie diese Option, um die Built-In-Tastatur beim Eingeben des Masterkennworts oder beim Bearbeiten von Einträgen zu benutzen.</string>
<string name="UseKp2aKeyboardInKp2a_summary">Wenn du deiner Standardtastatur nicht vertraust, aktiviere diese Option, um die integrierte Tastatur beim Eingeben des Hauptpassworts oder beim Bearbeiten von Einträgen zu benutzen.</string>
<string name="ActivateSearchViewOnStart_title">Suchfeld beim Start aktivieren</string>
<string name="ActivateSearchViewOnStart_summary">Aktiviert das Suchfeld in der Gruppenansicht nach dem Entsperren oder wenn ein Eintrag gesucht wird.</string>
<string name="NoDonateOption_title">Spenden-Option ausblenden</string>
@@ -402,6 +403,14 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="ShowSeparateNotifications_summary">Getrennte Benachrichtigungen zum Kopieren von Benutzername und Passwort in die Zwischenablage und zur Aktivierung der Eingabemethode anzeigen.</string>
<string name="AccServiceAutoFill_prefs">AutoFill Accessibility-Service</string>
<string name="AutoFill_prefs">AutoFill-Dienst</string>
<string name="AutoFillTotp_prefs_ShowNotification_summary">Eintragsbenachrichtigung mit einem Kopieren-Button anzeigen, wenn Autofill für einen Eintrag mit TOTP durchgeführt wird.</string>
<string name="AutoFillTotp_prefs_ShowNotification_title">Eintragsbenachrichtigung anzeigen</string>
<string name="AutoFillTotp_prefs_title">Autofill für TOTP-Einträge</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_title">TOTP in Zwischenablage kopieren</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_summary">TOTP in die Zwischenablage kopieren bei Autofill eines Eintrags mit TOTP</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_summary">Integrierte Tastatur aktivieren bei Autofill eines Eintrags mit TOTP. Die Tastatur hat einen TOTP-Button.</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_title">Integrierte Tastatur aktivieren</string>
<string name="TotpCopiedToClipboard">TOTP in Zwischenablage kopiert</string>
<string name="ShowKp2aKeyboardNotification_title">KP2A-Tastatur-Benachrichtigung</string>
<string name="ShowKp2aKeyboardNotification_summary">Kompletten Eintrag über die KP2A-Tastatur bereitstellen (empfohlen).</string>
<string name="OpenKp2aKeyboardAutomatically_title">Tastatur umschalten</string>
@@ -418,6 +427,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="ShowUnlockedNotification_summary">Symbol in der Benachrichtigungsleiste anzeigen, solange die Datenbank entsperrt ist.</string>
<string name="IconVisibilityInfo_Android8_text">Mit Android 8 wurde ein neues Verhalten für Benachrichtigungen eingeführt. Wenn das Symbol für die Benachrichtigungen von Keepass2Android ausgeblendet werden soll, dies bitte in den Systemeinstellungen konfigurieren. Dazu die Wichtigkeit der Benachrichtigungskategorie auf Minimum setzen.</string>
<string name="IconVisibilityInfo_Android8_btnSettings">Einstellungen öffnen</string>
<string name="PostNotificationsPermissionInfo_text">Keepass2Android kann eine Systembenachrichtigung anzeigen, wenn deine Datenbank nicht gesperrt ist. Damit dies funktioniert, erteilebitte die Berechtigung.</string>
<string name="DontCare">Ist mir egal</string>
<string name="DocumentAccessRevoked">Keepass2Android kann nicht mehr auf die Datei zugreifen. Entweder wurde sie entfernt oder die Zugriffsrechte wurden entzogen. Bitte die Datei erneut öffnen, z. B. über „Datenbank wechseln“.</string>
<string name="PreloadDatabaseEnabled_title">Datenbankdatei vorladen</string>
@@ -502,9 +512,27 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="hint_sftp_host">Host (z.B. 192.168.0.1)</string>
<string name="hint_sftp_port">Port</string>
<string name="initial_directory">Startverzeichnis (optional):</string>
<string name="connect_timeout">Verbindungs-Timeout in Sekunden (optional)</string>
<string name="enter_sftp_login_title">SFTP-Zugangsdaten eingeben:</string>
<string name="sftp_auth_mode">Authentifizierungsmodus</string>
<string name="send_public_key">Öffentlichen Schlüssel senden …</string>
<string name="select_private_keyfile">Privaten Schlüssel wählen...</string>
<string name="hint_sftp_key_name">Neuer Schlüsselname</string>
<string name="hint_sftp_key_content">Neuer Schlüsselinhalt</string>
<string name="private_key_saved">Privater Schlüssel gespeichert</string>
<string name="private_key_save_failed">Speichern des privaten Schlüssels fehlgeschlagen: %1$s</string>
<string name="private_key_info">Gib den Namen und Inhalt des Schlüssels ein, um ihn zu speichern</string>
<string name="private_key_delete">Privaten Schlüssel gelöscht: %1$s</string>
<string name="private_key_delete_failed">Löschen des privaten Schlüssels fehlgeschlagen: %1$s</string>
<string name="save_key">Privaten Schlüssel speichern</string>
<string name="delete_key">Privaten Schlüssel löschen</string>
<string name="private_key_select">Privaten Schlüssel auswählen</string>
<string name="private_key_create_new">[Neuen hinzufügen...]</string>
<string name="hint_sftp_key_passphrase">Passphrase des Schlüssels (optional)</string>
<string name="sftp_kex_title">Schlüsselaustausch(KEX)-Algorithmen (optional)</string>
<string name="hint_sftp_kex">Kommaseparierte Namen/Spec</string>
<string name="sftp_shk_title">Server-Host-Schlüsselalgorithmen (optional)</string>
<string name="hint_sftp_shk">Kommaseparierte Namen/Spec</string>
<string name="enter_ftp_login_title">FTP-Zugangsdaten eingeben:</string>
<string name="enter_mega_login_title">MEGA-Zugangsdaten eingeben:</string>
<string name="select_storage_type">Speichertyp wählen:</string>
@@ -522,7 +550,9 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragename_gdriveKP2A">Google Drive (KP2A-Dateien)</string>
<string name="filestoragehelp_gdriveKP2A">Wenn KP2A keinen Zugriff auf das komplette eigenen Google Drive erhalten soll, kann diese Option gewählte werden. Bitte beachten, dass zuerst eine Datenbankdatei erstellt werden muss; vorhandene Dateien sind für die App nicht sichtbar. Diese Option entweder auf dem Bildschirm „Datenbank erstellen“ auswählen oder, wenn bereits eine Datenbank geöffnet wurde, indem die Datenbank mit dieser Option exportiert wird.</string>
<string name="filestoragename_pcloud">PCloud (KP2A-Ordner)</string>
<string name="filestoragehelp_pcloud">Dieser Speichertyp verlangt nur Zugriff auf den pCloud-Ordner „Applications/Keepass2Android“. Wenn eine vorhandene Datenbank aus dem eigenen pCloud-Konto verwendet werden soll, bitte sicherstellen, dass die Datei in diesem pCloud-Ordner gespeichert ist.</string>
<string name="filestoragename_pcloudall">PCloud (Vollzugriff)</string>
<string name="filestoragename_onedrive">OneDrive</string>
<string name="filestoragename_onedrive2">OneDrive</string>
<string name="filestoragename_onedrive2_full">Alle Dateien und freigegebene Dateien</string>
@@ -542,7 +572,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="help_master_password">Die eigene Datenbank wird mit dem hier eingegebenen Passwort verschlüsselt. Dazu ein starkes Passwort verwenden, um die Datenbank abzusichern! Tipp: Sich ein oder zwei Sätze ausdenken und die Anfangsbuchstaben als Passwort nutzen. Auch die Satzzeichen mit einschließen.</string>
<string name="hint_master_password">Wähle ein Master-Passwort, mit dem deine Datenbank geschützt wird:</string>
<string name="key_file">Schlüsseldatei</string>
<string name="help_key_file">Eine Schlüsseldatei ist im Grunde ein Kennwort, das in einer Datei gespeichert ist. Schlüsseldateien sind üblicherweise stärker als Kennwörter, weil sie deutlich komplexer sein können; allerdings ist es schwerer, sie geheim zu halten. Wird die Datenbank in der Cloud gespeichert, sollte die Schlüsseldatei keinesfalls ebenfalls dort abgelegt werden! Das würde sie völlig nutzlos machen! Wichtig: Den Inhalt der Schlüsseldatei nicht mehr ändern, nachdem die Datenbank angelegt wurde!</string>
<string name="help_key_file">Eine Schlüsseldatei ist im Grunde ein Passwort, das in einer Datei gespeichert ist. Schlüsseldateien sind üblicherweise stärker als Passwörter, weil sie deutlich komplexer sein können; allerdings ist es schwerer, sie geheim zu halten. Wird die Datenbank in der Cloud gespeichert, sollte die Schlüsseldatei keinesfalls ebenfalls dort abgelegt werden! Das würde sie völlig nutzlos machen! Wichtig: Den Inhalt der Schlüsseldatei nicht mehr ändern, nachdem die Datenbank angelegt wurde!</string>
<string name="hint_key_file">Wählen, ob eine Schlüsseldatei zusätzlich zum Hauptpasswort verwendet werden soll:</string>
<string name="use_key_file">Schlüsseldatei verwenden</string>
<string name="error_adding_keyfile">Fehler beim Hinzufügen der Schlüsseldatei!</string>
@@ -568,12 +598,14 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="CouldntLoadChalAuxFile_Hint">Bitte das KeeChallenge-Plugin in KeePass 2.x (PC) verwenden, um die Datenbank für die Verwendung von Challenge-Response zu konfigurieren!</string>
<string name="ErrorUpdatingChalAuxFile">Fehler beim Aktualisieren der OTP-Hilfsdatei!</string>
<string name="TrayTotp_SeedField_title">TOTP-Seed-Feldname</string>
<string name="TOTP">TOTP</string>
<string name="TrayTotp_SeedField_summary">Wenn das Keepass2-Plugin „TrayTotp“ nicht mit Standardeinstellungen verwendet wird, den Feldnamen für das Seed-Feld entsprechend der Einstellungen am PC angeben.</string>
<string name="TrayTotp_SettingsField_title">Feldname für TOTP-Einstellungen</string>
<string name="TrayTotp_SettingsField_summary">Feldnamen für TOTP-Einstellungen entsprechend den TrayTotp-Einstellungen eingeben.</string>
<string name="TrayTotp_prefs">TrayTotp</string>
<string name="DebugLog_prefs_prefs">Logdatei (für Debugging)</string>
<string name="DebugLog_title">Logdatei verwenden</string>
<string name="FtpDebug_title">FTP/SFTP Debug-Logging</string>
<string name="DebugLog_summary">Ausgabe der Anwendung in eine lokale Logdatei schreiben</string>
<string name="DebugLog_send">Debug-Log senden …</string>
<string name="loading">Lade…</string>
@@ -685,6 +717,26 @@ Anbei einige Tipps, die bei der Diagnose des Problems helfen können:\n
<string name="EntryChannel_desc">Benachrichtigung zum schnellen Zugriff auf den aktuell gewählten Eintrag.</string>
<string name="CloseDbAfterFailedAttempts">Datenbank nach drei fehlgeschlagenen biometrischen Entsperrversuchen schließen.</string>
<string name="WarnFingerprintInvalidated">Achtung! Die biometrische Authentifizierung kann von Android ungültig gemacht werden, z. B. nach dem Hinzufügen eines neuen Fingerabdrucks in den Geräteeinstellungen. Bitte sicherstellen, dass jederzeit klar ist, wie mit dem eigenen Hauptpasswort entsperrt werden kann!</string>
<string-array name="ChangeLog_1_11">
<item>Buttons für die Suche und eine TOTP-Übersicht hinzugefügt (falls TOTP-Einträge vorhanden sind)</item>
<item>Darstellung von TOTP-Feldern verbessert: Timeout-Anzeige hinzugefügt und besser sichtbar gemacht.</item>
<item>TOTPs sind nun aus der Gruppenansicht zu sehen.</item>
<item>Werte in der Eintrags-Ansicht können mittels langem Antippen in die Zwischenablage kopiert werden.</item>
<item>TOTPs einfacher aus der integrierten Tastatur heraus zugänglich gemacht.</item>
<item>Eintrags-Benachrichtigung wird angezeigt beim Autofill von TOTP-Einträgen. Dies erlaubt es, die TOTP in die Zwischenablage zu kopieren. Konfiguration des Verhaltens ist in den Einstellungen möglich.</item>
<item>TOTP-Implementierung aktualisiert, um Kompatibilitätsprobleme mit KeePass2 und TrayTOTP zu beheben.</item>
<item>Kleinere Verbesserungen</item>
</string-array>
<string-array name="ChangeLog_1_11_net">
<item>pCloud-SDK aktualisiert um den Zugriff auf geteilte Ordner zu ermöglichen.</item>
</string-array>
<string-array name="ChangeLog_1_10">
<item>Unterstützung für Benachrichtigungsrechte für Android 13+ implementiert</item>
<item>Verbesserung der FTP- und SFTP-Implementierung</item>
<item>Zugriff zur vollständigen pCloud hinzugefügt</item>
<item>Auswahl der Systemsprache im Sprachdialog erlaubt</item>
<item>Problem beim Speichern der Schlüsseldatei + Challenge-Passwort-Typ behoben</item>
</string-array>
<string-array name="ChangeLog_1_09e">
<item>Fehlerbehebung, um Abstürze und unerwartetes Abmelden zu vermeiden</item>
<item>Wechsel auf eine neue SFTP-Implementierung, jetzt mit Unterstützung von modernen Public-Key-Algorithmen wie rsa-sha2-256</item>
@@ -777,18 +829,18 @@ Anbei einige Tipps, die bei der Diagnose des Problems helfen können:\n
* TLS-Implementierung für FTPS gewechselt, Workaround wegen eines JSch-Bugs integriert (betrifft Server, die gssapi-with-mic unterstützen)\n
* Fehler behoben\n </string>
<string name="ChangeLog_1_05">Version 1.05\n
Verwenden von Benachrichtigungskanälen in Android 8. So können Benachrichtigungen über die Systemeinstellungen konfiguriert werden.\n
Eintragsymbol wird in Benachrichtigungen angezeigt\n
Adaptive App-Launcher-Symbol für Android 8 und rundes App-Launcher-Symbol für Android 7\n
Suche kann nach dem Entsperren aktiviert werden (s. Einstellungen)\n
Fehler beim Schreiben von Dateien über das Storage-Access-Framework behoben. Dadurch wird ein Problem behoben, wenn Dateien über den Android-Dateibrowser aus Google Drive geöffnet werden.\n
Einige Infotexte ergänzt, um häufig auftretende Missverständnisse zu vermeiden.\n
Nach erfolgreichem Öffnen wird eine lokale Sicherungskopie der Datenbank angelegt, um das Risiko von Datenverlust zu reduzieren.\n
JSch aktualisiert, um aktuelle SSH-Verschlüsselungsalgorithmen zu unterstützen\n
Unterstützung für den statischen Passwortmodus des Yubikey Neo integriert.\n
Die Autofill-Empfehlung kann leichter deaktiviert werden\n
Fix für gegebenenfalls nach Logcat geschriebene private Daten.\n
• Fehlerkorrekturen\n </string>
* Verwendung von Benachrichtigungskanälen in Android 8. So können Benachrichtigungen über die Systemeinstellungen konfiguriert werden.\n
* Eintrags-Icon wird in Benachrichtigungen angezeigt\n
* Adaptive App-Launcher-Icons für Android 8 und rundes App-Launcher-Icon für Android 7\n
* Suche kann nach dem Entsperren aktiviert werden (s. Einstellungen)\n
* Fehler beim Schreiben von Dateien über das Storage-Access-Framework behoben. Dadurch wird ein Problem behoben, wenn Dateien über den Android-Dateibrowser aus Google Drive geöffnet werden.\n
* Einige Infotexte ergänzt, um häufig auftretende Missverständnisse zu vermeiden.\n
* Nach erfolgreichem Öffnen wird eine lokale Sicherungskopie der Datenbank angelegt, um das Risiko von Datenverlust zu reduzieren.\n
* JSch aktualisiert um aktuelle SSH-Verschlüsselungsalgorithmen zu unterstützen\n
* Unterstützung für den statischen Passwortmodus des Yubikey Neo integriert.\n
* Die Autofill-Empfehlung kann leichter deaktiviert werden\n
* Fix für u.U. nach Logcat geschriebene private Daten.\n
* Bugfixes\n </string>
<string name="ChangeLog_1_04b">Version 1.04b\n
• Korrektur für App-Crash beim Aktivieren von Autofill auf Huawei-Geräten.\n </string>
<string name="ChangeLog_1_04"> Version 1.04\n
@@ -817,7 +869,7 @@ Anbei einige Tipps, die bei der Diagnose des Problems helfen können:\n
* Zeiten werden als lokale Zeiten dargestellt\n </string>
<string name="ChangeLog_1_01d">Version 1.01-d\n
* Fix beim Auflisten von Dateien mit OneDrive\n
* Erlaube das Ignorieren von Zertifikatsfehlern auch wenn Host-Name-Verification fehlschlägt (nicht für produktiven Einsatz empfohlen)\n
* Erlaube das Ignorieren von Zertifikatsfehlern, auch wenn Host-Name-Verification fehlschlägt (nicht für produktiven Einsatz empfohlen)\n
* Fix: QuickUnlock schlug manchmal fehl trotz korrektem Entsperr-Code\n </string>
<string name="ChangeLog_0_9_8c"> Version 0.9.8c\n
* Fix für SSL-Schwachstelle im Microsoft Live-SDK (wird benutzt beim Zugriff auf Dateien mit OneDrive)\n
@@ -1047,12 +1099,12 @@ Erstes öffentliches Release</string>
<item>Passwort und Challenge-Response</item>
<item>Passwort und Challenge-Response-Secret (Recovery-Modus)</item>
<item>Passwort und Challenge-Response für Keepass XC</item>
<item>Kennwort und Schlüsseldatei und Challenge-Response für Keepass XC</item>
<item>Passwort und Schlüsseldatei und Challenge-Response für Keepass XC</item>
</string-array>
<string-array name="sftp_auth_modes">
<item>Passwort</item>
<item>K2A Private/Public key</item>
<item>Custom Private key</item>
<item>KP2A privater/öffentlicher Schlüssel</item>
<item>Eigener privater Schlüssel</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
<item>Fehler bei Zertifikatsüberprüfung ignorieren</item>
@@ -1070,6 +1122,11 @@ Erstes öffentliches Release</string>
<string name="autofill_enable_for">AutoFill für %1$s aktivieren</string>
<string name="invalid_link_association">Webdomain %1$s konnte nicht mit App %2$s verknüpft werden</string>
<string name="enable_fingerprint_hint">Keepass2Android hat biometrische Hardware erkannt. Soll Biometrisches Entsperren für diese Datenbank aktiviert werden?</string>
<string name="post_notifications_dialog_title">Benachrichtigungen zulassen</string>
<string name="post_notifications_dialog_message">Keepass2Android kann Benachrichtigungen mit Buttons anzeigen, um Werte wie Passwörter und TOTPs in die Zwischenablage zu kopieren oder um die integrierte Tastatur zu öffnen. Dies ist nützlich, um Werte in andere Apps zu übertragen, ohne wiederholt zu Keepass2Android zu wechseln. Möchtest du solche Benachrichtigungen aktivieren?</string>
<string name="post_notifications_dialog_allow">Benachrichtigungen zulassen</string>
<string name="post_notifications_dialog_disable">Feature deaktivieren</string>
<string name="post_notifications_dialog_notnow">Jetzt nicht</string>
<string name="understand">Okay, verstanden</string>
<string name="dont_show_again">Nicht erneut anzeigen</string>
<string name="masterkey_infotext_head">Kennst du dein Master-Passwort?</string>

View File

@@ -22,8 +22,8 @@
<string name="short_app_name_nonet">KP2A χωρίς σύνδεση</string>
<string name="app_timeout">Λήξη χρονικού ορίου εφαρμογής</string>
<string name="app_timeout_summary">Χρόνος πριν το κλείδωμα της βάσης δεδομένων όταν η εφαρμογή είναι ανενεργή.</string>
<string name="kill_app_label">Τερματισμός διεργασίας</string>
<string name="show_kill_app">Κουμπί τερματισμού</string>
<string name="kill_app_label">Τερματισμός διεργασίας</string>
<string name="show_kill_app_summary">Προβάλει κουμπί στην οθόνη συνθηματικού που τερματίζει τη διεργασία της εφαρμογής (για παρανοϊκούς χρήστες)</string>
<string name="application">Εφαρμογή</string>
<string name="application_settings">Ρυθμίσεις εφαρμογής</string>
@@ -152,6 +152,7 @@
<string name="hint_keyfile">αρχείο κλειδιού</string>
<string name="hint_length">μήκος</string>
<string name="hint_pass">συνθηματικό</string>
<string name="hint_keyfile_path">Διαδρομή ιδιωτικού κλειδιού SSH</string>
<string name="hint_login_pass">Συνθηματικό</string>
<string name="hint_title">όνομα</string>
<string name="hint_url">URL</string>
@@ -417,6 +418,7 @@
<string name="ShowUnlockedNotification_summary">Προβολή εικονιδίου ειδοποίησης, ενόσω η βάση δεδομένων είναι ξεκλείδωτη.</string>
<string name="IconVisibilityInfo_Android8_text">Το Android 8 εισήγαγε νέα συμπεριφορά για τις ειδοποιήσεις. Απόκρυψη του εικονιδίου των ειδοποιήσεων του Keepass2Android γίνεται από τις ρυθμίσεις συστήματος. Ορίστε τη σημαντικότητα της κατηγορίας ειδοποιήσεων στο Ελάχιστο.</string>
<string name="IconVisibilityInfo_Android8_btnSettings">Άνοιγμα ρυθμίσεων</string>
<string name="PostNotificationsPermissionInfo_text">Το Keepass2Android μπορεί να εμφανίζει μια ειδοποίηση συστήματος ενόσω η βάση δεδομένων σας παραμένει ξεκλείδωτη. Για να λειτουργήσει αυτό, χορηγήστε την άδεια.</string>
<string name="DontCare">Δεν με νοιάζει</string>
<string name="DocumentAccessRevoked">Το αρχείο δεν είναι πλέον προσπελάσιμο στο Keepass2Android. Είτε διαγράφτηκε ή ανακηθηκαν τα δικαιώματα πρόσβασης. Δοκιμάστε να ξανα-ανοίξετε το αρχείο, πχ με Αλλαγή βάσης δεδομένων.</string>
<string name="PreloadDatabaseEnabled_title">Προ-φόρτωση αρχείου βάσης δεδομένων</string>
@@ -501,9 +503,27 @@
<string name="hint_sftp_host">κόμβος (πχ 192.168.0.1)</string>
<string name="hint_sftp_port">θύρα</string>
<string name="initial_directory">Αρχικός κατάλογος (προαιρετικό):</string>
<string name="connect_timeout">Χρονικό όριο σύνδεσης σε δευτερόλεπτα (προαιρετικό)</string>
<string name="enter_sftp_login_title">Εισάγετε στοιχεία σύνδεσης SFTP:</string>
<string name="sftp_auth_mode">Τρόπος αυθεντικοποίησης</string>
<string name="send_public_key">Αποστολή δημόσιου κλειδιού...</string>
<string name="select_private_keyfile">Επιλέξτε ιδιωτικό κλειδί...</string>
<string name="hint_sftp_key_name">Νέο όνομα κλειδιού</string>
<string name="hint_sftp_key_content">Νέο περιεχόμενο κλειδιού</string>
<string name="private_key_saved">Το ιδιωτικό κλειδί αποθηκεύτηκε</string>
<string name="private_key_save_failed">ΑΠΟΤΥΧΙΑ αποθήκευσης του ιδιωτικού κλειδιού: %1$s</string>
<string name="private_key_info">Εισάγετε όνομα και περιεχόμενο του κλειδιού για αποθήκευση</string>
<string name="private_key_delete">Διαγράφηκε το ιδιωτικό κλειδί: %1$s</string>
<string name="private_key_delete_failed">ΑΠΟΤΥΧΙΑ διαγραφής του ιδιωτικού κλειδιού: %1$s</string>
<string name="save_key">Αποθήκευση ιδιωτικού κλειδιού</string>
<string name="delete_key">Διαγραφή ιδιωτικού κλειδιού </string>
<string name="private_key_select">Επιλέξτε ιδιωτικό κλειδί</string>
<string name="private_key_create_new">[Προσθήκη νέου...]</string>
<string name="hint_sftp_key_passphrase">Συνθηματικό κλειδιού (προαιρετικό)</string>
<string name="sftp_kex_title">Αλγόριθμος ανταλλαγής κλειδιών (προαιρετικά)</string>
<string name="hint_sftp_kex">Όνομα / προσδιορισμός διαχωρισμένα με κόμμα</string>
<string name="sftp_shk_title">Αλγόριθμος για το κλειδί του διακομιστή (προαιρετικά)</string>
<string name="hint_sftp_shk">Όνομα / προσδιορισμός διαχωρισμένα με κόμμα</string>
<string name="enter_ftp_login_title">Εισαγωγή δεδομένων εισόδου FTP:</string>
<string name="enter_mega_login_title">Εισάγετε τα δεδομένα εισόδου για το λογαριασμό MEGA:</string>
<string name="select_storage_type">Επιλέξτε τύπο αποθήκευσης:</string>
@@ -521,7 +541,9 @@
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragename_gdriveKP2A">Google Drive (αρχεία KP2A)</string>
<string name="filestoragehelp_gdriveKP2A">Αν δεν θέλετε να δώσετε πρόσβαση KP2A πρόσβαση σε όλο το Google Drive σας, μπορείτε να επιλέξετε αυτή την επιλογή. Σημειώστε ότι πρέπει να δημιουργήσετε ένα αρχείο βάσης δεδομένων πρώτα - τα υπάρχοντα αρχεία δεν είναι ορατά στην εφαρμογή. Επιλέξτε αυτή την επιλογή από την οθόνη Δημιουργία βάσης δεδομένων ή, αν έχετε ήδη ανοίξει μια βάση δεδομένων, με την εξαγωγή της βάσης δεδομένων επιλέγοντας αυτή την επιλογή.</string>
<string name="filestoragename_pcloud">PCloud (φάκελος KP2A)</string>
<string name="filestoragehelp_pcloud">Αυτός ο τύπος αποθήκευσης θα ζητήσει πρόσβαση μόνο στον pCloud φάκελο \"Applications/Keepass2Android\". Αν θέλετε να χρησιμοποιήσετε μια υπάρχουσα βάση δεδομένων από τον pCloud λογαριασμό σας, βεβαιωθείτε ότι το αρχείο έχει τοποθετηθεί σε αυτόν τον φάκελο.</string>
<string name="filestoragename_pcloudall">PCloud (πλήρης πρόσβαση)</string>
<string name="filestoragename_onedrive">OneDrive</string>
<string name="filestoragename_onedrive2">OneDrive</string>
<string name="filestoragename_onedrive2_full">Όλα τα αρχεία και τα κοινά αρχεία</string>
@@ -573,6 +595,7 @@
<string name="TrayTotp_prefs">TrayTotp</string>
<string name="DebugLog_prefs_prefs">Αρχείο καταγραφών για αποσφαλμάτωση</string>
<string name="DebugLog_title">Χρήση αρχείου καταγραφών</string>
<string name="FtpDebug_title">Καταγραφή σφαλμάτων FTP/SFTP</string>
<string name="DebugLog_summary">Καταγραφή στοιχείων της εφαρμογής σε τοπικό αρχείο καταγραφών</string>
<string name="DebugLog_send">Αποστολή αρχείων καταγραφής εκσφαλμάτωσης...</string>
<string name="loading">Φόρτωση…</string>
@@ -641,7 +664,7 @@
<string name="Continue">Συνέχεια</string>
<string name="NoFilenameWarning">Το URI που έχετε εισάγατε δεν μοιάζει με όνομα αρχείου. Είστε βέβαιοι ότι είναι έγκυρο αρχείο;</string>
<string name="FirstInvalidCompositeKeyError">Μη έγκυρο σύνθετο κλειδί! Παρακαλώ δοκιμάστε ξανά.</string>
<string name="RepeatedInvalidCompositeKeyHelp">Μη έγκυρο σύνθετο κλειδί! Παρακαλούμε δοκιμάστε τα ακόλουθα βήματα για να ξεκλειδώσετε τη βάση δεδομένων: \n
<string name="RepeatedInvalidCompositeKeyHelp">Μη έγκυρο σύνθετο κλειδί! Δοκιμάστε τα ακόλουθα βήματα για να ξεκλειδώσετε τη βάση δεδομένων: \n
* Βεβαιωθείτε ότι έχετε πληκτρολογήσει το σωστό συνθηματικό. Χρησιμοποιήστε το εικονίδιο \'μάτι\' για να αποκαλυφθεί το συνθηματικό που εισάγατε. \n
* Βεβαιωθείτε ότι έχετε επιλέξει σωστό τύπο συνθηματικού. Βεβαιωθείτε ότι ταιριάζει με τον τύπο που χρησιμοποιήθηκε κατά τη δημιουργία της βάσης δεδομένων. \n
@@ -651,11 +674,11 @@
<string name="HintLocalBackupOtherError"> \n
&#8226; Υπόδειξη: Το Keepass2Android έχει αποθηκεύσει την τελευταία έκδοση του αρχείου που ανοίχτηκε στην εσωτερική μνήμη. Μπορείς να την ανοίξεις πατώντας \"%1$s\" και επιλέγοντας το τοπικό αντίγραφο. </string>
<string name="CorruptDatabaseHelp">Το αρχείο είναι κατεστραμμένο. \n
Ακολουθούν υποδείξεις για να διαγνώσετε το πρόβλημα: \n
Ακολουθούν υποδείξεις για τη διάγνωση του προβλήματος: \n
Αν αντιγράψατε το αρχείο μέσω USB (MTP-Mode), παρακαλώ προσπαθήστε ξανά με εργαλεία όπως το MyPhoneExplorer. Το MTP περικόπτει τα αρχεία σε ορισμένες περιπτώσεις. \n
Αν δεν μπορείτε να ανοίξετε το αρχείο από την ίδια θέση στον υπολογιστή σας, είναι πολύ πιθανό ότι το αρχείο είναι πράγματι κατεστραμμένο. Χρησιμοποιήστε αντίγραφο ασφαλείας της βάσης δεδομένων. Αν ΄πιστεύετε ότι το Keepass2Android καταστρέφει το αρχείο, επικοινωνήστε με την υποστήριξη. \n
Αν μπορείτε να ανοίξετε το αρχείο στον υπολογιστή σας, επικοινωνήστε με την υποστήριξη. Μπορείτε να δοκιμάσετε να το αποθηκεύσετε με διαφορετικές ρυθμίσεις (π.χ. unzipped) στο PC και προσπαθήστε ξανά να ανοίξετε στο Keepass2Android. </string>
Αν αντιγράψατε το αρχείο μέσω USB (MTP-Mode), προσπαθήστε ξανά με εργαλεία όπως το MyPhoneExplorer. Το MTP περικόπτει τα αρχεία σε ορισμένες περιπτώσεις. \n
Αν δεν μπορείτε να ανοίξετε το αρχείο από την ίδια θέση στον υπολογιστή σας, είναι πολύ πιθανό ότι το αρχείο είναι πράγματι κατεστραμμένο. Χρησιμοποιήστε αντίγραφο ασφαλείας της βάσης δεδομένων. Αν πιστεύετε ότι το Keepass2Android καταστρέφει το αρχείο, επικοινωνήστε με την ομάδα υποστήριξης. \n
Αν μπορείτε να ανοίξετε το αρχείο στον υπολογιστή σας, επικοινωνήστε με την ομάδα υποστήριξης. Μπορείτε να δοκιμάσετε να το αποθηκεύσετε με διαφορετικές ρυθμίσεις (π.χ. unzipped) στο PC και προσπαθήστε ξανά να ανοίξετε στο Keepass2Android. </string>
<string name="open_other_db">Ανοίξτε μια άλλη βάση δεδομένων…</string>
<string name="select_database">Επιλέξτε τη βάση δεδομένων</string>
<string name="configure_child_dbs">Προσαρμογή παράγωγων βάσεων δεδομένων…</string>
@@ -683,6 +706,13 @@
<string name="EntryChannel_desc">Ειδοποίηση για απλοποιημένη πρόσβαση στην τρέχουσα καταχώριση.</string>
<string name="CloseDbAfterFailedAttempts">Κλείσιμο της βάσης δεδομένων μετά από 3 ανεπιτυχείς προσπάθειες βιομετρικού ξεκλειδώματος.</string>
<string name="WarnFingerprintInvalidated">Προσοχή! Ο βιομετρικός έλεγχος ταυτότητας μπορεί να ακυρωθεί από το Android, π.χ. μετά την προσθήκη ενός νέου δακτυλικού αποτυπώματος στις ρυθμίσεις της συσκευής σας. Βεβαιωθείτε ότι ξέρετε πάντα πώς να ξεκλειδώσετε με τον κύριο κωδικό πρόσβασης!</string>
<string-array name="ChangeLog_1_10">
<item>Προσθήκη υποστήριξης για δικαιώματα ειδοποίησης στο Android 13+</item>
<item>Βελτίωση της υλοποίησης FTP και SFTP</item>
<item>Προσθήκη πρόσβασης σε πλήρες pCloud</item>
<item>Επιτρέπει την επιλογή γλώσσας συστήματος στο μενού της γλώσσας</item>
<item>Διόρθωση προβλήματος με την απομνημόνευση Keyfile + ερώτηση για τον τύπο του κωδικού πρόσβασης</item>
</string-array>
<string-array name="ChangeLog_1_09e">
<item>Διόρθωση σφάλματος για απότομα κλεισίματα εφαρμογής και μη αναμενόμενες αποσυνδέσεις</item>
<item>Μετάβαση σε νέα υλοποίηση SFTP, υποστηρίζοντας σύγχρονους αλγόριθμους δημόσιου κλειδιού όπως rsa-sha2-256</item>
@@ -748,259 +778,7 @@
<item>Διορθώσεις σφαλμάτων</item>
<item>Διορθώσεις σφαλμάτων</item>
</string-array>
<string name="ChangeLog_1_07b">Έκδοση 1.07b\n
* Βελτίωση επιδόσεων Argon2 με χρήση εγγενούς υλοποίησης (ευχαριστώ Chih-Hsuan Yen!)\n
* Επιτρέπει απενεργοποίηση δακτυλικού αποτυπώματος με κλικ στο εικονίδιο (λύνει το ζήτημα με τους αναγνώστες δακτυλικού αποτυπώματος κάτω από την οθόνη, ευχαριστώ marcoDallas!)\n
* Επαναφέρει τη θέση του δρομέα όταν αλλάζει η ορατότητα του συνθηματικού (ευχαριστώ DDoSolitary!)\n
* Βελτιώσεις στην υλοποίηση PCloud (ευχαριστώ gilbsgilbs πάλι!)\n
* Υποστήριξη AutoFill για πολλούς browsers \n
* Νέα υλοποίηση για OneDrive: περιλαμβάνει υποστήριξη OneDrive for Business, κοινόχρηστα αρχεία, επιλεγόμενα επίπεδα πρόσβασης, πολλαπλούς λογαριασμούς και διορθώνει ζητήματαμε offline πρόσβαση\n
* Διόρθωση σφαλμάτων </string>
<string name="ChangeLog_1_07">Εκδοση 1.07\n
* Διορθώνει κρασαρίσματα στο Samsung\'s Android 9\n
* Επιτρέπει άνοιγμα περισσότερων από μιας βάσεων δεδομένων, συμβατό με KeeAutoExec\n
* SFTP: Επιτρέπει αυθεντικοποίηση δημόσιου κλειδιού, ελέγχει για αλλαγή host key\n
* Εισάγει υποστήριξη pCloud - ευχαριστώ gilbsgilbs!\n
* Προβάλει την υποστήριξη Nextcloud\n
* Βελτιώνει την αποθήκευση και ενημέρωση συνημμένων\n
* Περισσότερες επιλογές διαμόρφωσης συμπεριφοράς στις προσωπικές προτιμήσεις\n
* SSL: Πιστοποιητικά έμπιστου χρήστη\n
* Βελτίωση autofill (λειτουργεί με Firefox, επιτρέπει μείωση αναδυόμενων)\n
* Διόρθωση σφαλμάτων\n </string>
<string name="ChangeLog_1_06">Έκδοση 1.06\n
* Χρήση του ykDroid αντί του YubiChallenge ως εφαρμογή για Yubikey Πρόκληση-Απόκριση.\n
* Υλοποίηση υποστήριξης για KeepassXC-style Challenge-Response. Σημείωση: Το φορμάτ της βάσης δεδομένων πρέπει να είναι KDBX4!\n * Άρνηση φόρτωσης πεταμένων αρχείων από το Google Drive\n
* Αλλαγή της υλοποίησης TLS για το FTPS, προσθήκη λύσης του σφάλματος JSch για εξυπηρετητές που υποστηρίζουν gssapi-with-mic\n
* Διορθώσεις σφαλμάτων\n</string>
<string name="ChangeLog_1_05"> Έκδοση 1.05\n
* Χρήση ειδοποιήσεων του Android 8, που επιτρέπει προσαρμογή μέσω των ρυθμίσεων συστήματος\n
* Προβολή εικονιδίου εισόδου στις ειδοποιήσεις\n
* Χρήση Adaptive Icons για το Android 8, χρήση στρογγυλού εικονιδίου για το Android 7\n
* Επιτρέπει ενεργοποίηση αναζήτησης κατά το ξεκλείδωμα\n
* Αλλαγή στον τρόπο εγγραφής των αρχείων μέσω Storage Access Framework, διορθώνει ζητήματα ενημέρωσης αρχείων στο Google Drive όταν ανοίγονται μέσω του System file picker\n
* Προσθήκη πληροφοριακών κειμένων προς αποφυγή κοινών παρεξηγήσεων\n
* Δημιουργία τοπικών αντιγράφων των βάσεων δεδομένων που ανοίχθηκαν επιτυχώς προς αποφυγή απώλειας δεδομένων\n
* Ενημερωμένο JSch για υποστήριξη πρόσφατων SSH ciphers\n
* Επιτρέπει διόρθωση ρυθμίσεων σύνδεσης, πχ όταν αλλάζει το συνθηματικό WebDav\n
* Added support for Yubikey Neo\'s static password mode\n
* Allow to disable Autofill suggestion\n
* Fixed data leakage to logcat\n
* bug fixes\n
</string>
<string name="ChangeLog_1_04b"> Έκδοση 1.04b\n
* Αποφυγή κρασαρίσματος κατά την ενεργοποίηση Autofill σε συσκευές Huawei.\n
</string>
<string name="ChangeLog_1_04"> Έκδοση 1.04\n
* Προσθήκη υπηρεσίας Autofill για Android 8.0 και επόμενα.\n
* Αναβαθμισμένες βιβλιοθήκες, εργαλεία ανάπτυξης και έκδοση Target SDK.\n
</string>
<string name="ChangeLog_1_03">Έκδοση 1.03\n
* Αφαιρέθηκε η υπηρεσία προσβασιμότητας έπειτα από απαίτηση της Google. Δείτε τις ρυθμίσεις κωδικών προσβασιμότητας για να βρείτε ένα πρόσθετο που να αντικαθιστά την λειτουργικότητα.\n
* Προστέθηκαν ξανά εφαρμογές τρίτων σαν επιλογές αποθήκευσης\n
* Ενσωματωμένο πρόγραμμα προβολής εικόνων για την προβολή συνημμένων εικόνων χωρίς να χρειάζεται η μεταφορά τους σε άλλη εφαρμογή\n
* Αναβάθμιση του OkHttp για διόρθωση λαθών σε κάποιες συνδέσεις\n
* Υποστήριξη για καταχωρήσεις KeeTrayTOTP, με υποστήριξη καταχωρήσεων Steam\n
</string>
<string name="ChangeLog_1_02">Έκδοση 1.02\n
* Αρκετές βελτιώσεις ασφαλείας. Ευχαριστώ πολύ για την έκθεση ασφάλειας των jean-baptiste.cayrou@thalesgroup.com και vincent.fargues@thalesgroup.com και για τη συνεργασία τους! \n
* Υποστήριξη του πρόσθετου KeyboardSwap (δείτε επιλογές κωδικού πρόσβασης): επιτρέπει την αυτόματη αλλαγή μεθόδου εισαγωγής για συσκευές που δεν είναι root. Ευχαριστώ τον Mishaal Rahman από τους XDA-Developers. \n
* Διόρθωση στην υπηρεσία προσβασιμότητας με πρόσφατες εκδόσεις του Chrome\n
* Διόρθωση για περιττές εκκαθαρίσεις δεδομένων των δακτυλικών αποτυπωμάτων\n
* Διόρθωση ήσσονος σημασίας καταρρεύσεων\n
* Ενημέρωση του Dropbox SDK για να εξασφαλιστεί μελλοντική συμβατότητα \n
* Αφαίρεση αναφοράς σφαλμάτων μέσω Xamarin Insights\n
* Ενημερωμένα εργαλεία ανάπτυξης\n </string>
<string name="ChangeLog_1_01g">Έκδοση 1.01-g\n
* Διόρθωση για αιφνίδια διακοπή λειτουργίας κατά την λειτουργία offline\n
* Διόρθωση για εσφαλμένη κωδικοποίηση των πιστοποιητικών FTP (S)\n
* Διόρθωση για καταρρεύσεις κατά τη χτήση του OneDrive και σε παλιότερες εκδόσεις Android\n
* Προβολή της τοπικής ώρας στην οθόνη εισόδου\n </string>
<string name="ChangeLog_1_01d">Έκδοση 1.01-d\n
* Διόρθωση για λίστα αρχείων στο OneDrive\n
* Επιτρέπεται η αγνόηση σφαλμάτων πιστοποιητικών όταν αποτυγχάνει η επαλήθευση του host name (δεν συνιστάται για κανονική χρήση)\n
* Διόρθωση για QuickUnlock που μερικές φορές αποτυγχάνει παρά το σωστό κωδικό ξεκλειδώματος\n </string>
<string name="ChangeLog_0_9_8c">Έκδοση 0.9.8c\n * ΕΝΗΜΕΡΩΣΗ για ευπάθεια SSL στο Microsoft Live SDK (που χρησιμοποιείται κατά την πρόσβαση σε αρχεία μέσω OneDrive) \n * Bug fix: η προηγούμενη έκδοση περιείχε δύο μεθόδους εισόδου (ή μια κρεμά) \n </string>
<string name="ChangeLog_1_01">Έκδοση 1.01\n
* Προστέθηκε υποστήριξη για τη νέα μορφή KDBX-4 (συμβατή με Keepass 2.35) που συμπεριλαμβάνει παραγωγή κλειδιού Argon2 και κρυπτογράφηση ChaCha20. \n
* Νέα υλοποίηση αποθήκευσης αρχείων WebDav, που επιτρέπει περιήγηση αρχείων και υποστηρίζει σύγχρονη κρυπτογράφηση. \n
* Νέα υλοποίηση αποθήκευσης αρχείων FTP, που επιτρέπει περιήγηση αρχείων και υποστηρίζει κρυπτογράφηση (FTPS). \n
* Ενημέρωση στο OneDrive SDK (προηγουμένως χρησιμοποιούσε το Live SDK που δεν ενημερώνεται πλέον) \n
* Ενημέρωση στο Dropbox SDK έκδοση 2 (προηγουμένως χρησιμοποιούσε την έκδοση 1 του SDK που έχει καταργηθεί). \n
* Προστέθηκε υποστήριξη για OwnCloud.\n
* Ερωτά για άδεια αποθήκευσης πριν από το άνοιγμα τοπικών αρχείων.</string>
<string name="ChangeLog_1_0_0e">Έκδοση 1.0.0e\n
* διόρθωση ξεκλειδώματος με δακτυλικό αποτύπωμα σε παλιότερες συσκευές Samsung με Android 6\n
* εγγενής υποστήριξη για συσκευές x86\n
* επιτρέπει απόκρυψη οθόνης πληκτρολογίου κατά τη σάρωση δακτυλικού αποτυπώματος\n
* build system update</string>
<string name="ChangeLog_1_0_0">Έκδοση 1.0.0\n
* Ξεκλείδωμα με δακτυλικό αποτύπωμα (απαιτεί Android 6.0+ ή συσκευή Samsung)\n
* Υπηρεσία αυτόματης συμπλήρωσης (απαιτεί Android 5.0+)\n
* Υποστήριξη προτύπων για καταχωρίσεις\n
* Προσθήκη λειτουργίας \"Εκτός σύνδεσης\"\n
* Επιτρέπει αντιγραφή καταχωρίσεων\n
* Αυτόματη συμπλήρωση για τα ονόματα πεδίων\n
* Επιτρέπει διαγραφές από τη λίστα πρόσφατων αρχείων\n
* Ζητά άδειες κατά την εκτέλεσης στο Android 6.0\n
* Διορθώνει σφάλματα (στο ενσωματωμένο πληκτρολόγιο, κατά την επιλογή εικονιδίων)\n
* Προσθέτει επιλογή για αποστολή αναφοράς σφαλμάτων\n
* Προσθέτει μηνύματα βοήθειας σε πολλά σημεία\n</string>
<string name="ChangeLog_0_9_9">Έκδοση 0.9.9\n
* Πλήρης επανασχεδίαση του παρουσιαστικού. Ευχαριστώ Stefano Pignataro (http://www.spstudio.at) για την υποστήριξη!\n
* Επιτρέπει προσθήκη προσαρμοσμένων εικονιδίων\n
* Επιτρέπει πολλαπλά παράθυρα σε συσκευές Samsung\n
* Αυξημένο εξ ορισμού πλήθος κύκλων κρυπτογράφησης για νέες βάσεις δεδομένων\n
* Έλεγχος για διπλότυπα κλειδιά στα πρόσθετα πεδία ώστε να αποφεύγεται απώλεια δεδομένων\n</string>
<string name="ChangeLog_0_9_9c">Έκδοση 0.9.9c\n
* Το σκοτεινό θέμα είναι πίσω\n
* Μπορείς να εγκαταστήσεις άλλα πακέτα εικονιδίων (τα αρχαία εικονίδια είνια διαθέσιμα στο Play store)\n
* Πρόσθετη επιβεβαίωση κατά τη διαγραφή καταχωρίσεων χωρίς κάδο ανακύκλωσης\n
* Διορθώσεις σφαλμάτων (wrong display of OTP secret encoding, wrong app icon in some places)\n </string>
<string name="ChangeLog_0_9_8b">Έκδοση 0.9.8b\n
* Διορθώσεις σφαλμάτων (Saving failed for some databases, exporting to local device not working, selecting some preference options crashed the app)\n</string>
<string name="ChangeLog_0_9_8">Έκδοση0.9.8\n
* Υποστήριξη Storage Access Framework (επιτρέπει εγγραφή στην κάρτα SD και στο Google Drive στην KP2A Offline)\n
* Προσπαθεί να ανιχνεύσει σφάλματα όταν ο χρήστης εισάγει WebDAV URLs (φάκελο αντί αρχείου)\n
* Αλλαγή γραμματοσειράς συνθηματικού\n
* Επιτρέπει αλλαγή λογαριασμού Dropbox\n
* Διόρθωση σφαλμάτων: τώρα απομνημονεύει το συνθηματικό OTP</string>
<string name="ChangeLog_0_9_7b">Έκδοση 0.9.7b\n
* updated translations\n
* bug fixes: Password font was missing in 0.9.7, sort by name didn not sort groups\n</string>
<string name="ChangeLog_0_9_7">Έκδοση 0.9.7\n
* Υποστήριξη εγγραφής για βάσεις δεδομένων Keepass 1 (kdb) (σε beta!)\n
* Καλύτερη εναλλαγή πληκτρολογίου (λειτουργεί σε μη root συσκευές)\n
* υποστήριξη του KeeChallenge με αποκρίσεις μεταβλητού μήκους\n
* απαγορεύει τη λήψη screenshots των οθονών QuickUnlock και συνθηματικού\n
* ανάστροφη ταξινόμηση κατά ημερομηνία τροποποίησης (τώρα φθίνουσα)\n
* διορθώσεις σφαλμάτων: προβολή σημειώσεων ενημερώνεται σωστά μετά από αλλαγές, προβολή συνθηματικού αποκρύπτει το συνθηματικό σε όλες τις συσκευές, απαγορεύει τη διπλή εισαγωγή καταχώρισης, διόρθωση στην προειδοποίηση διπλότυπων αναγνωριστικών ακόμα και μετά την επιδιόρθωση της βάσης δεδομένων\n </string>
<string name="ChangeLog_0_9_6">Έκδοση 0.9.6\n
* Επιτρέπει την εισαγωγή αρχείου κλειδιού και/ή τοπικού αρχείου βάσης δεδομένων στο φάκελο εσωτερικής μνήμης της εφαρμογής (δες Ρυθμίσεις)\n
* Επιτρέπει διάφορες επιλογές ταξινόμησης\n
* Βελτιωμένες επιλογές για αυτόματη εναλλαγή πληκτρολογίου\n
* Ενημερωμένο λογότυπο εφαρμογής και σχεδίαση ειδοποιήσεων, από τον Stefano Pignataro (http://www.spstudio.at)\n
* ο δημιουργός συνθηματικών θυμάται τις τελευταίες ρυθμίσεις\n
* Ορίζει ορατότητα ειδοποιήσεων για την οθόνη κλειδώματος του Android 5 lock screen\n
* Τώρα το κύριο συνθηματικό καθαρίζεται κατά την εγκατάλειψη της εφαρμογής δίχως πάτημα ΟΚ\n
* Διόρθωση ζητήματος με γλώσσες εισόδου που έλειπαν στο πληκτρολόγιο μερικών συσκευών\n
* Επισκευή ζητήματος στην εναλλαγή πληκτρολογίου σε ρουταρισμένες συσκευές\n
* Προσθήκη ελέγχου για κατεστραμμένες βάσεις δεδομένων (διπλότυπα αναγνωριστικά)\n
* Αυτόματα ξαναφορτώνει τη βάση δεδομένων όταν ανιχνεύει αλλαγή, λύνει θέμα ασφαλείας περί αποκάλυψης του κύριου συνθηματικού\n
* Βελτιωμένη σχεδίαση του πολωνικού μικρού πληκτρολογίου, διόρθωση του θέματοςρυθμίσεων πληκτρολογίου (ευχαριστώ Wiktor Ławski)\n</string>
<string name="ChangeLog_0_9_5">Έκδοση 0.9.5\n
* Fixed issues with file browsing (especially on Android 4.4)\n
* Fixed issue with loading .kdb files (Keepass 1) on Nexus 5 with Android Lollipop\n
* Added option to prevent taking screenshots/displaying app in recent apps list\n
* Fixed issue with Google Drive file storage (regular edition)\n
* Allow key files on deliberate storage types (regular edition)\n
* Updated Dropbox SDK to include an official security patch (regular edition)\n
* Updated build tools --&gt; apk size increased :-(\n I have promised some more changes. They will come with the next release - sorry. I wanted to publish these hot fixes as soon as possible.</string>
<string name="ChangeLog_0_9_4">Έκδοση 0.9.4\n
* added plug-in support: See settings for how to get plug-ins!\n
* published QR plug-in (scan passwords, display passwords as QR code, transfer entries to other KP2A devices)\n
* published InputStick plugin (transfer credentials to your PC via bluetooth - requires InputStick USB stick)\n
* Third party apps can now simply implement querying KP2A for credentials. Are you a developer? Please add this to your app if suitable!\n
* added TOTP support (compatible with KeeOTP and TrayTotp)\n
* app should no longer be killed by Android when database is open\n
* database is no longer locked when leaving the app with the back button (see settings)\n
* display group names in search results view (*)\n
* added context menu in search results view including \"Navigate to parent\" option (*)\n
* added option to display group name in entry view (*)\n
* (*) thanks to Matthieu for implementing these features!\n
* support KeeChallenge (with Yubikey NEO). Thanks to Ben Rush for implementing the connector!\n
* improved user interface\n
* fixed a bug in Google Drive interface\n
* added option to disable the \"donate\" option\n
* QuickUnlock icon now hidden on Android 4.2+ devices by default\n</string>
<string name="ChangeLog_0_9_3_r5">Έκδοσδ 0.9.3 r5\n
* Incorporated fixes from Xamarin: Keepass2Android now compatible with ART on Android 4.4.2. Finally!\n
* Bug fixes: bugs in synchronization (refresh display, correct check for changes on http), bugs on Android 2.x devices, bugs in Google Drive and OneDrive storage implementations, clear clipboard on close database, bug opening attachments, display problems with keyboard\n</string>
<string name="ChangeLog_0_9_3">Έκδοση 0.9.3\n
* New keyboard with many improvements. See settings to customize.\n
* Read-only support for kdb (Keepass 1 files). Experimental!\n
* Added SFTP support\n
* Added workaround for bug in ART (Android 4.4.2)\n
* Bug fixes\n</string>
<string name="ChangeLog_0_9_2">Έκδοση 0.9.2\n
* Added OTP support (compatible with OtpKeyProv plugin)\n
* Integrated NFC support for OTPs from YubiKey NEO \n
* Several UI improvements\n
* Integrated Keepass 2.24 library\n
* Added option to kill the app process (see settings)\n
* Improved SSL certificate validation\n
* Bug fixes\n</string>
<string name="ChangeLog_0_9_1">Έκδοση 0.9.1\n
* Integrated SkyDrive support (Keepass2Android regular edition only)\n
* Fixed problems with Google Drive integration\n
* Added NTLM support</string>
<string name="ChangeLog_0_9">Έκδοση 0.9\n
* Integrated Dropbox and Google Drive support (read/write databases; Keepass2Android regular edition only)\n
* Integrated custom file browser (based on android-filechooser by HBA)\n
* Improved user interface for creating new databases\n
* Included custom font DejaVu Sans Mono for displaying passwords\n
* Bug fixes</string>
<string name="ChangeLog_0_8_6">Έκδοση 0.8.6\n
* Support for Twofish cipher\n
* Allow editing of groups\n
* Allow moving of entries and groups\n
* QuickUnlock icon can be made transparent (see settings)\n
* Bug fixes</string>
<string name="ChangeLog_0_8_5"><b>Έκδοση 0.8.5</b>\n
* Απομακρυσμένα αρχεία αποθηκεύονται στην τοπική μνήμη των εφαρμογής επιτρέποντας αποσυνδεδεμένω χρήση (περιλαμβάνει διόρθωση και έπειτα συγχρονισμό). Δες Ρυθμίσεις. \n
* Εικονίδιο ειδοποιήσεων που οπτικοποιεί την κατάσταση κλειδώματος της βάσης δεδομένων (δες Ρυθμίσεις)\n
* Βελτιωμένος καθορισμός της κατάστασης κλειδώματοςσε μερικές περιπτώσεις\n
* Τα αρχεία της βάσης δεδομένων φορτώνονται στη μνήμη ενώ πληκτρολογείς το συνθηματικό για αυξημένη ταχύτητα (δες Ρυθμίσεις)\n
* Εγγραφές μπορούν να προστεθούν στην ομάδα ρίζα\n
* Διορθώσεις σφαλμάτων (πεδία με αναφορές, προβλήματα πληκτρολογίου σε ιταλικές και κινέζικες συσκευές)</string>
<string name="ChangeLog_0_8_4">Έκδοση 0.8.4\n
* External database changes are detected and merged when saving\n
* Improved loading performance\n
* Improved search toolbar with suggestions\n
* New App logo!\n
* Added support for .kdbp format for faster loading/saving\n
* Improved editing of extra strings and hidden display when protected\n
Thanks to Alex Vallat for his code contributions!\n
Thanks to Niki Hüttner (www.close-cut.de) for the new logo!\n</string>
<string name="ChangeLog_0_8_3">Έκδοση 0.8.3\n
* Username/TAN index displayed in entry list (see settings)\n
* Entries can be created if search from browser doesn\'t return results\n
* KP2A keyboard provides possibility to search for credentials for current app\n
* App automatically closes after selecting an entry for use in keyboard\n
* Keyboard selection dialog automatically opens after search for URL (see settings)\n
* Placeholders in entry fields are replaced before copying (most placeholders supported)\n
* minor bug fixes
</string>
<string name="ChangeLog_0_8_2">Έκδοση 0.8.2\n
* Support for Digest Authentication in WebDAV\n
* Bugfixes (OI File manager, Open URL)</string>
<string name="ChangeLog_0_8_1">Έκδοση 0.8.1\n
* KP2A Offline and \"Online\" can be installed both again\n
* Added new translations (thanks to all contributors!)</string>
<string name="ChangeLog_0_8">Έκδοση 0.8\n
* Improved user interface especially for Android 4.x devices\n
* Allow using deliberate file managers for selecting existing files\n
* Added safer way for opening attachments (through cache directory)\n
* fixed bugs in Edit activity\n
* probably introduced new bugs :-)</string>
<string name="ChangeLog_keptDonate">Εκτεταμένη δυνατότητα προσφοράς μπύρας ή κάτι άλλου</string>
<string name="ChangeLog_0_7">Έκδοση 0.7\n
* Increased loading speed: key transformations now 10x faster!\n
* Added Keepass2Android soft-keyboard: Switch to this keyboard for entering credentials. Shields you from clipboard-based password sniffers (disable old clipboard notifications in the options)\n
* Added option to donate a beer or something else (see menu)</string>
<string name="ChangeLog">Έκδοση 0.6.2\n
* Google Drive/Dropbox/... integration: Use the official Google Drive or Dropbox App and open any .kdbx-file. This will now bring up KP2A.\n
* Improved Search Dialog \n
* Improved search results for Share URL with subdomains\n
* Added options to give feedback, and rate and translate the app in the menu\n
\n
<b>Version 0.6.1</b>\n
* Detect when database changes in the background (i.e. due to activity of a sync app)\n
* Improved searching for URLs from the browser\n
* Confirm dialog when discarding changes\n
\n
<b>Version 0.6</b>\n
Initial public release
</string>
<string-array name="clipboard_timeout_options">
<item>30 δευτερόλεπτα</item>
<item>1 λεπτό</item>
@@ -1049,7 +827,7 @@ Initial public release
</string-array>
<string-array name="sftp_auth_modes">
<item>Συνθηματικό</item>
<item>K2A Private/Public key</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
@@ -1068,6 +846,8 @@ Initial public release
<string name="autofill_enable_for">Ενεργοποίηση AutoFill για %1$s</string>
<string name="invalid_link_association">Δεν σχετίζεται το web domain %1$s με την εφαρμογή %2$s</string>
<string name="enable_fingerprint_hint">Το Keepass2Android ανίχνευσε βιομετρικό εξοπλισμό. Θέλετε να ενεργοποιήσετε βιομετρικό ξεκλείδωμα για αυτή τη βάση δεδομένων;</string>
<string name="post_notifications_dialog_disable">Απενεργοποιήστε αυτό το χαρακτηριστικό</string>
<string name="post_notifications_dialog_notnow">Όχι τώρα</string>
<string name="understand">Καταλαβαίνω</string>
<string name="dont_show_again">Να μην εμφανιστεί ξανά</string>
<string name="masterkey_infotext_head">Θυμάστε το κύριο συνθηματικό σας;</string>

Some files were not shown because too many files have changed in this diff Show More