Compare commits

..

141 Commits

Author SHA1 Message Date
PhilippC
1abee20c02 New translations strings.xml (Belarusian) 2025-02-11 16:10:19 +01:00
PhilippC
7891760723 New translations strings.xml (Yoruba) 2025-02-11 16:09:50 +01:00
PhilippC
985089c792 New translations strings.xml (Norwegian Bokmal) 2025-02-11 16:09:49 +01:00
PhilippC
486624ca24 New translations strings.xml (Sinhala) 2025-02-11 16:09:48 +01:00
PhilippC
0b7661c80b New translations strings.xml (Malayalam) 2025-02-11 16:09:46 +01:00
PhilippC
a49b80443b New translations strings.xml (Azerbaijani) 2025-02-11 16:09:45 +01:00
PhilippC
78890f741d New translations strings.xml (Norwegian Nynorsk) 2025-02-11 16:09:44 +01:00
PhilippC
7b31b52c6d New translations strings.xml (Croatian) 2025-02-11 16:09:43 +01:00
PhilippC
03d81865a8 New translations strings.xml (Persian) 2025-02-11 16:09:41 +01:00
PhilippC
a1348817b4 New translations strings.xml (Indonesian) 2025-02-11 16:09:40 +01:00
PhilippC
c0f717c737 New translations strings.xml (Portuguese, Brazilian) 2025-02-11 16:09:39 +01:00
PhilippC
fd2a74a297 New translations strings.xml (Galician) 2025-02-11 16:09:38 +01:00
PhilippC
17c0b115b2 New translations strings.xml (Vietnamese) 2025-02-11 16:09:36 +01:00
PhilippC
b764587582 New translations strings.xml (Chinese Traditional) 2025-02-11 16:09:35 +01:00
PhilippC
d163d2e101 New translations strings.xml (Chinese Simplified) 2025-02-11 16:09:34 +01:00
PhilippC
e2071e5bd5 New translations strings.xml (Ukrainian) 2025-02-11 16:09:33 +01:00
PhilippC
d1f880079b New translations strings.xml (Turkish) 2025-02-11 16:09:31 +01:00
PhilippC
299dba0d4e New translations strings.xml (Swedish) 2025-02-11 16:09:30 +01:00
PhilippC
8fddf5fa92 New translations strings.xml (Serbian (Cyrillic)) 2025-02-11 16:09:29 +01:00
PhilippC
152e196d62 New translations strings.xml (Slovenian) 2025-02-11 16:09:27 +01:00
PhilippC
21f58050f8 New translations strings.xml (Slovak) 2025-02-11 16:09:26 +01:00
PhilippC
7906102e43 New translations strings.xml (Russian) 2025-02-11 16:09:24 +01:00
PhilippC
3b2536472a New translations strings.xml (Portuguese) 2025-02-11 16:09:23 +01:00
PhilippC
2a93424365 New translations strings.xml (Polish) 2025-02-11 16:09:22 +01:00
PhilippC
09c7f9fa17 New translations strings.xml (Dutch) 2025-02-11 16:09:20 +01:00
PhilippC
ef93eedc63 New translations strings.xml (Korean) 2025-02-11 16:09:19 +01:00
PhilippC
95e51f9c5d New translations strings.xml (Japanese) 2025-02-11 16:09:18 +01:00
PhilippC
1c0528776b New translations strings.xml (Italian) 2025-02-11 16:09:17 +01:00
PhilippC
91a520e773 New translations strings.xml (Hungarian) 2025-02-11 16:09:15 +01:00
PhilippC
720e8d5a70 New translations strings.xml (Hebrew) 2025-02-11 16:09:14 +01:00
PhilippC
0539c7bb6c New translations strings.xml (Finnish) 2025-02-11 16:09:13 +01:00
PhilippC
a568e24e12 New translations strings.xml (Basque) 2025-02-11 16:09:12 +01:00
PhilippC
9cf33e3612 New translations strings.xml (Greek) 2025-02-11 16:09:10 +01:00
PhilippC
ec62f0b7fe New translations strings.xml (German) 2025-02-11 16:09:09 +01:00
PhilippC
34a3a3751e New translations strings.xml (Danish) 2025-02-11 16:09:07 +01:00
PhilippC
9e0b1b837c New translations strings.xml (Czech) 2025-02-11 16:09:06 +01:00
PhilippC
f44a7997bc New translations strings.xml (Catalan) 2025-02-11 16:09:04 +01:00
PhilippC
0e1b2c3ace New translations strings.xml (Bulgarian) 2025-02-11 16:09:03 +01:00
PhilippC
2d58979051 New translations strings.xml (Belarusian) 2025-02-11 16:09:02 +01:00
PhilippC
d5a3db21e9 New translations strings.xml (Arabic) 2025-02-11 16:09:00 +01:00
PhilippC
d56e9ebfd8 New translations strings.xml (Spanish) 2025-02-11 16:08:59 +01:00
PhilippC
24a22b0281 New translations strings.xml (French) 2025-02-11 16:08:58 +01:00
PhilippC
8582cc11aa New translations strings.xml (Romanian) 2025-02-11 16:08:56 +01:00
Philipp Crocoll
aff92370e5 rename folder back after merging crowdin translation changes 2025-02-11 13:36:45 +01:00
Philipp Crocoll
8ebe1bb0d9 Merge branch 'translation/prepare-crowdin-merge' into l10n_master2 2025-02-11 13:29:52 +01:00
Philipp Crocoll
bef3463a0d keepass2android-app renamed to keepass2android to prepare merging with crowdin updates 2025-02-11 13:27:54 +01:00
PhilippC
7537820d79 New translations strings.xml (Chinese Traditional) 2025-01-13 12:29:52 +01:00
PhilippC
79127ee4ae New translations strings.xml (Persian) 2024-11-23 21:28:30 +01:00
PhilippC
c367f94512 New translations strings.xml (Catalan) 2024-11-13 11:39:23 +01:00
PhilippC
04b455425b New translations strings.xml (Catalan) 2024-11-13 09:48:23 +01:00
PhilippC
130a6eb9bf New translations strings.xml (Vietnamese) 2024-11-04 09:39:34 +01:00
PhilippC
9490731f9a New translations strings.xml (Vietnamese) 2024-11-04 09:39:30 +01:00
PhilippC
8db227477d New translations strings.xml (Vietnamese) 2024-11-04 09:39:29 +01:00
PhilippC
1c720ac3d9 New translations strings.xml (Romanian) 2024-11-03 07:28:27 +01:00
PhilippC
581c897299 New translations strings.xml (Chinese Simplified) 2024-10-30 06:37:37 +01:00
PhilippC
c3936d05cc New translations strings.xml (Chinese Simplified) 2024-10-30 04:28:58 +01:00
PhilippC
7f7844f33e New translations strings.xml (Italian) 2024-10-26 11:24:17 +02:00
PhilippC
ba140b0612 New translations strings.xml (Italian) 2024-10-26 10:28:58 +02:00
PhilippC
9cba21cd7f New translations strings.xml (Italian) 2024-10-25 13:30:21 +02:00
PhilippC
0f3ad02ecb New translations strings.xml (Italian) 2024-10-25 11:30:58 +02:00
PhilippC
2859a53d0e New translations strings.xml (Belarusian) 2024-10-22 11:54:35 +02:00
PhilippC
edb5590dd3 New translations strings.xml (Belarusian) 2024-10-22 09:41:30 +02:00
PhilippC
f385fef48d New translations strings.xml (Belarusian) 2024-10-22 09:41:29 +02:00
PhilippC
05a340aa4d New translations strings.xml (Chinese Simplified) 2024-10-18 00:08:24 +02:00
PhilippC
2191421f62 New translations strings.xml (Spanish) 2024-10-09 17:54:16 +02:00
PhilippC
11f0ac2b4f New translations strings.xml (Spanish) 2024-10-08 12:17:32 +02:00
PhilippC
54ea326d2b New translations strings.xml (Spanish) 2024-10-07 13:50:21 +02:00
PhilippC
d2f2e19c24 New translations strings.xml (Spanish) 2024-10-07 12:21:30 +02:00
PhilippC
741bb4346e New translations strings.xml (Galician) 2024-09-29 01:09:57 +02:00
PhilippC
714e36c14d New translations strings.xml (Galician) 2024-09-29 00:07:56 +02:00
PhilippC
86cba725f8 New translations strings.xml (Spanish) 2024-09-24 14:13:11 +02:00
PhilippC
2207c02064 New translations strings.xml (Yoruba) 2024-09-23 09:09:24 +02:00
PhilippC
0687da9174 New translations strings.xml (Yoruba) 2024-09-23 09:09:22 +02:00
PhilippC
1d2a6d2c15 New translations strings.xml (Yoruba) 2024-09-23 09:09:21 +02:00
PhilippC
47a323dd5c New translations strings.xml (Persian) 2024-09-18 05:16:40 +02:00
PhilippC
5660f8b1d2 New translations strings.xml (Persian) 2024-09-18 00:03:17 +02:00
PhilippC
3ac238cc2b New translations strings.xml (Persian) 2024-09-17 22:55:43 +02:00
PhilippC
57fcfc11c4 New translations strings.xml (Azerbaijani) 2024-09-12 20:53:56 +02:00
PhilippC
c80b61e8f4 New translations strings.xml (Vietnamese) 2024-08-24 03:47:10 +02:00
PhilippC
d38f60e059 New translations strings.xml (Chinese Simplified) 2024-08-18 08:11:16 +02:00
PhilippC
f4197eee5d New translations strings.xml (Chinese Simplified) 2024-08-18 07:06:16 +02:00
PhilippC
271dcfc19c New translations strings.xml (Romanian) 2024-08-07 18:07:37 +02:00
PhilippC
011a939c39 New translations strings.xml (Catalan) 2024-07-24 14:47:54 +02:00
PhilippC
ee2b67a5dd New translations strings.xml (French) 2024-07-13 07:25:39 +02:00
PhilippC
9cf1606064 New translations strings.xml (Slovak) 2024-06-29 14:04:54 +02:00
PhilippC
df5f72262c New translations strings.xml (Slovak) 2024-06-29 12:25:38 +02:00
PhilippC
902f4a8f34 New translations strings.xml (French) 2024-05-21 23:30:15 +02:00
PhilippC
1a2b7c59aa New translations strings.xml (French) 2024-05-21 22:06:58 +02:00
PhilippC
ddced3d7b1 New translations strings.xml (Hebrew) 2024-05-18 07:38:04 +02:00
PhilippC
ecab74bfec New translations strings.xml (Japanese) 2024-05-17 17:09:50 +02:00
PhilippC
82e927cb93 New translations strings.xml (Hebrew) 2024-05-14 12:31:12 +02:00
PhilippC
45abdf4382 New translations strings.xml (Hebrew) 2024-05-14 10:45:39 +02:00
PhilippC
33cc95ff87 New translations strings.xml (Ukrainian) 2024-05-07 10:14:38 +02:00
PhilippC
a977c75b64 New translations strings.xml (Catalan) 2024-05-03 23:04:44 +02:00
PhilippC
3da07765ca New translations strings.xml (Catalan) 2024-05-03 20:48:28 +02:00
PhilippC
7d450865f7 New translations strings.xml (Portuguese) 2024-04-27 03:51:49 +02:00
PhilippC
14b01088ea New translations strings.xml (Portuguese) 2024-04-27 02:11:39 +02:00
PhilippC
4770b99127 New translations strings.xml (Italian) 2024-04-26 16:11:06 +02:00
PhilippC
b556eef642 New translations strings.xml (Spanish) 2024-04-25 17:32:49 +02:00
PhilippC
b31ec9fba0 New translations strings.xml (Spanish) 2024-04-25 15:55:24 +02:00
PhilippC
13e653f45d New translations strings.xml (Spanish) 2024-04-25 04:08:52 +02:00
PhilippC
75df57022a New translations strings.xml (Spanish) 2024-04-25 02:49:52 +02:00
PhilippC
10690ddf84 New translations strings.xml (Spanish) 2024-04-25 01:34:47 +02:00
PhilippC
4f4f85ea9d New translations strings.xml (Ukrainian) 2024-04-22 20:55:39 +02:00
PhilippC
d1da69f7a3 New translations strings.xml (Polish) 2024-04-19 17:36:51 +02:00
PhilippC
93a18a60b0 New translations strings.xml (Polish) 2024-04-19 16:22:39 +02:00
PhilippC
11f8f318da New translations strings.xml (Russian) 2024-04-19 09:29:31 +02:00
PhilippC
ec3b236ac3 New translations strings.xml (Chinese Simplified) 2024-04-04 12:49:30 +02:00
PhilippC
2fc9d2b9cb New translations strings.xml (Spanish) 2024-03-30 19:25:44 +01:00
PhilippC
290623a85c New translations strings.xml (Russian) 2024-03-27 06:36:17 +01:00
PhilippC
0df85ed593 New translations strings.xml (Russian) 2024-03-25 03:06:13 +01:00
PhilippC
3e696437c6 New translations strings.xml (Ukrainian) 2024-03-22 00:10:58 +01:00
PhilippC
b9fb4d127c New translations strings.xml (Ukrainian) 2024-03-21 23:07:21 +01:00
PhilippC
1afc69d715 New translations strings.xml (Russian) 2024-03-21 16:45:13 +01:00
PhilippC
cf06572aef New translations strings.xml (Russian) 2024-03-21 15:12:46 +01:00
PhilippC
0e7522923d New translations strings.xml (Hebrew) 2024-03-19 06:37:42 +01:00
PhilippC
5a2df80101 New translations strings.xml (Hebrew) 2024-03-18 22:22:39 +01:00
PhilippC
a0b80f706e New translations strings.xml (Hebrew) 2024-03-18 20:08:14 +01:00
PhilippC
1119ca31f6 New translations strings.xml (Hebrew) 2024-03-17 19:16:34 +01:00
PhilippC
d817e39c5d New translations strings.xml (Hebrew) 2024-03-17 17:45:30 +01:00
PhilippC
2f0881b917 New translations strings.xml (Japanese) 2024-03-11 10:07:53 +01:00
PhilippC
01666682b0 New translations strings.xml (Vietnamese) 2024-03-09 11:09:48 +01:00
PhilippC
2a56bee949 New translations strings.xml (Vietnamese) 2024-03-09 06:45:51 +01:00
PhilippC
78ed72390f New translations strings.xml (German) 2024-03-05 20:49:51 +01:00
PhilippC
17a83a731a New translations strings.xml (German) 2024-03-05 20:49:50 +01:00
PhilippC
a6a17be1eb New translations strings.xml (Vietnamese) 2024-03-05 16:36:44 +01:00
PhilippC
3d9a29c04b New translations strings.xml (Russian) 2024-03-05 16:36:43 +01:00
PhilippC
ae10cde944 New translations strings.xml (Russian) 2024-03-05 14:53:42 +01:00
PhilippC
8f947d6bd6 New translations strings.xml (Vietnamese) 2024-03-05 02:50:28 +01:00
PhilippC
c950a1d686 New translations strings.xml (Vietnamese) 2024-03-05 01:48:10 +01:00
PhilippC
50ef6f176c New translations strings.xml (Vietnamese) 2024-03-03 18:25:05 +01:00
PhilippC
c65136307d New translations strings.xml (Vietnamese) 2024-03-03 17:10:40 +01:00
PhilippC
2ef38695eb New translations strings.xml (Vietnamese) 2024-03-03 16:07:05 +01:00
PhilippC
bbdc223de3 New translations strings.xml (Italian) 2024-02-29 22:56:08 +01:00
PhilippC
ab4ce573a0 New translations strings.xml (Italian) 2024-02-29 21:48:33 +01:00
PhilippC
5bac055c80 New translations strings.xml (Arabic) 2024-02-29 02:53:39 +01:00
PhilippC
dbb5d402ed New translations strings.xml (Russian) 2024-02-28 10:59:20 +01:00
PhilippC
0a34855fd5 New translations strings.xml (Japanese) 2024-02-27 00:07:49 +01:00
PhilippC
e870f63024 New translations strings.xml (Japanese) 2024-02-26 07:26:49 +01:00
PhilippC
29102af02c New translations strings.xml (Portuguese, Brazilian) 2024-02-22 11:37:09 +01:00
PhilippC
da15c02b29 New translations strings.xml (Japanese) 2024-02-20 11:29:47 +01:00
878 changed files with 34313 additions and 3319 deletions

View File

@@ -1,124 +0,0 @@
name: Create keepass2android release
env:
NAME: 'ReleaseNet'
on:
release:
types: [published] # Trigger when a new GitHub release is published
workflow_dispatch: # For manual testing
jobs:
build-release:
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Extract key store
env:
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
KeyStore: "${{ github.workspace }}/kp2a.keystore"
shell: bash
run: |
echo $KeyStore
echo $KEYSTORE_BASE64 | base64 --decode > $KeyStore
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('src/**/*.csproj', 'src/**/packages.config') }}
restore-keys: |
${{ runner.os }}-nuget-
# 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@a3b6ebd6b634da88790d9c58d4b37a7f4a7b8708 # v1.4
with:
minimum-size: 8GB
- name: Add msbuild to PATH
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-17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Display java version
run: java -version
- name: Build native dependencies
shell: cmd
run: |
make native
- name: Build java dependencies
shell: cmd
run: |
make java
- name: Install NuGet dependencies (net)
run: make nuget Flavor=Net
- name: Use the _net manifest
run: |
make manifestlink Flavor=Net
- name: Build APK (net)
env:
KeyStore: "${{ github.workspace }}/kp2a.keystore"
MyAndroidSigningStorePass: ${{ secrets.KEY_STORE_PASSWORD }}
MyAndroidSigningKeyPass: ${{ secrets.KEY_PASSWORD }}
run: |
make Configuration=Release Flavor=Net
- name: List files
shell: bash
run: |
ls src/keepass2android-app/bin/**/*.*
- name: Archive production artifacts (net)
uses: actions/upload-artifact@v4
with:
name: signed APK ('net' built on ${{ github.job }})
path: |
src/keepass2android-app/bin/Release/net8.0-android/*-Signed.apk
- name: Upload APK to GitHub Release
uses: softprops/action-gh-release@v2
if: github.ref_type == 'tag'
with:
files: |
src/keepass2android-app/bin/Release/net8.0-android/*-Signed.apk
- name: Run checksum action
uses: thewh1teagle/checksum@v2
with:
pre-release: true
file-name: 'apk-checksum-sha256.txt'
patterns: |
src/keepass2android-app/bin/Release/net8.0-android/*-Signed.apk
algorithm: sha256
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -20,7 +20,6 @@
# - nuget: restore NuGet packages
# - msbuild: build the project
# - apk: same as all
# - manifestlink: creates a symlink (to be used in building) to the AndroidManifest corresponding to the selected Flavor
#
# - distclean: run a 'git clean -xdff'. Remove everyhing that is not in the git tree.
# - clean: all clean_* targets below

View File

@@ -1,7 +1,7 @@
files:
- source: src/keepass2android-app/Resources/values/strings.xml
- source: src/keepass2android/Resources/values/strings.xml
translation: >-
/src/keepass2android-app/Resources/values-%two_letters_code%/%original_file_name%
/src/keepass2android/Resources/values-%two_letters_code%/%original_file_name%
translate_attributes: '0'
content_segmentation: '0'
languages_mapping:

View File

@@ -0,0 +1,5 @@
As of December 2017, Google does not accept the use of Accessibility services for anything except helping people with disabilities. This means that Keepass2Android can no longer provide the accessibility service based AutoFill feature. Otherwise, Google would remove Keepass2Android from Play Store.
If you want to continue using this feature, please [install the Accessibility service based AutoFill plugin](https://github.com/PhilippC/kp2a_accservice_autofill/releases/).
After installation, please enable the accessibility service "KP2A AutoFillPlugin" in the Android system settings. When trying to use the plugin for the first time, KP2A will ask you if the plugin may access the Keepass database. Please accept this to use the plugin.

View File

@@ -0,0 +1,18 @@
# Installing dictionaries
Keepass2Android will load dictionaries for your current language both from AnySoftKeyboard and from Hacker's keyboard.
* For AnySoftKeyboard dictionaries visit: [https://play.google.com/store/search?q=anysoftkeyboard+dictionary&c=apps](https://play.google.com/store/search?q=anysoftkeyboard+dictionary&c=apps)
* For Hacker's Keyboard dictionaries visit: [https://play.google.com/store/search?q=hacker%27s%20keyboard%20dictionary&c=apps](https://play.google.com/store/search?q=hacker%27s%20keyboard%20dictionary&c=apps)
# Automatic keyboard switching (requires ADB)
Starting with Keepass2Android 1.02-pre1, you can use the [KeyboardSwap Plugin](https://play.google.com/store/apps/details?id=keepass2android.plugin.keyboardswap2) to switch to the KP2A keyboard automatically instead of bringing up the Input method selection dialog (e.g. after using the Share URL feature). To setup the plugin please follow the instructions on [the PlayStore website](https://play.google.com/store/apps/details?id=keepass2android.plugin.keyboardswap2)
# Deprecated: Automatic keyboard switching on rooted devices
In order to automatically switch to the KP2A keyboard and back, you need to
* have a rooted device (per Android security policies)
* have at least KP2A version 0.9.3-pre2
* install the Secure Settings app with the "System+" module available in Secure Settings v. 1.3.4 and above. **Note:** This is no longer available for recent Android versions.
* Go to the KP2A keyboard settings. Enable auto-switch on rooted devices.
If you go to a website, select "Share URL" -> Keepass2Android, the keyboard should be switched as soon as you locate the entry or when it's found automatically.

239
docs/Build.readme.md Normal file
View File

@@ -0,0 +1,239 @@
# How to build Keepass2Android
## Overview
Keepass2Android is a Mono for Android app. This means that you need Xamarin's Mono for Android to build it. However, it also uses several components written in Java, so there are also Android-Studio projects involved. To make things even worse, parts of the keyboard and kdb-library are written in native code.
To build KP2A from scratch, you need:
- Xamarin's Mono for Android (also included in Visual Studio)
- Android SDK & NDK
Prior to building Keepass2Android, you need to build some of its components (from command line). Then you can build the full project either through Visual Studio, or through command line.
By using the command line, you can build on Windows, macOS or Linux.
## Prerequisites
### Common to all architectures
- Install Android SDK & NDK (either manually with Google's [sdkmanager](https://developer.android.com/studio/command-line/sdkmanager), or through Android Studio). Visual Studio also installs a version of it, but in the end the directory must be writable and in a path without spaces (see below) so as to be able to build the components.
- Fetch the main repository of Keepass2Android and all submodules
- Note that VisualStudio can do this for you, otherwise run:
- `git submodule init && git submodule update`
### On Windows or macOS
- Install Visual Studio (for example 2019) with Xamarin.Android (ie. with capability to build Android apps). This should provide the needed tools like
- Xamarin.Android
- MSBuild
- Java JDK
- If you plan to build also from the command line:
- Install the MSVC build tools of visual studio. They provide the `vcvarsall.bat` file which among other things adds MSBuild to the PATH.
- Install [NuGet](https://www.nuget.org/downloads) to build also with "make". Alternatively, on Windows, if you use [chocolatey](https://chocolatey.org), run as administrator:
- `choco install nuget.commandline`
- Check that you have access to 'GNU make'.
- On Windows, it is usually not available by default. But the Android NDK provides it. You can find it in `%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe`. Alternatively, on Windows, if you use [chocolatey](https://chocolatey.org), run as administrator:
- `choco install make`
- On macOS, it is usually only installed if you have developer command line tools installed or if you use [homebrew](https://brew.sh) or [macports](https://www.macports.org/). As an alternative it may be available in the Android NDK at `%ANDROID_NDK_ROOT%/prebuilt/darwin-x86_64/bin/make`.
### On Linux
- Install Java's JDK
- On Debian, for example: `apt install default-jdk-headless`.
- Install [Mono](https://www.mono-project.com/)
- This should provide `msbuild` & `xabuild` binary
- On Debian, after having added the repo from above, install with `apt install -t <repo_name> mono-devel msbuild`. A value for `<repo_name>` could be `stable-buster` for example, depending on which one you chose. You could also install the `mono-complete` package if you prefer.
- Install Xamarin.Android
- ~~Option 1: Use the mono-project [CI builds](https://dev.azure.com/xamarin/public/_build/latest?definitionId=48&branchName=main&stageName=Linux)~~ **NOTE:** KP2A now requires Xamarin.Android v13, which is newer than the current CI build; until a more recent CI build is available, this option is unfortunately no longer viable.
- Option 2: [Build it from source](https://github.com/xamarin/xamarin-android/blob/master/Documentation/README.md#building-from-source)
- Install NuGet package of your distribution
- On Debian/Ubuntu: `apt install nuget`
- Install [libzip](https://libzip.org/) for your distribution for some Xamarin.Android versions
- This may not be relevant anymore: for example, with Xamarin.Android 11.4.99. this is not needed.
- Some versions of Xamarin may require `libzip4`. If you are in this case:
- On Debian/Ubuntu, install it with `apt install libzip4`.
- Other distributions ship only `libzip5`. As a dirty workaround, it's possible to symlink `libzip.so.5` to `libzip.so.4`. Luckily, it appears to be working. For example:
- `sudo ln -s /usr/lib/libzip.so.5 /usr/lib/libzip.so.4`
- or `sudo ln -s /usr/lib64/libzip.so.5 /usr/lib/libzip.so.4`
## Building the required components:
This is done on the command line and requires the Android SDK & NDK and Java JDK.
### On Windows
- Setup your environment:
- Set these environment variables for Android's SDK & NDK
- `ANDROID_HOME` (for example `set ANDROID_HOME=C:\PATH\TO\android-sdk`)
- `ANDROID_SDK_ROOT` (for example `set ANDROID_SDK_ROOT=C:\PATH\TO\android-sdk`)
- `ANDROID_NDK_ROOT` (for example `set ANDROID_NDK_ROOT=C:\PATH\TO\android-sdk\ndk\version`)
**Note:** Care must be taken when setting the above variables to **not** include a trailing backslash in the path. A trailing backslash may cause `make` to fail.
**Note**: If the path to the Android SDK contains spaces, you **must** do one of these:
- either put the Android SDK into a path without spaces.
- or create a symlink to that path which doesn't contain spaces. Attention: this requires **administrator** priveleges. For example:
```
IF NOT EXIST C:\Android ( MKDIR C:\Android ) &&
MKLINK /D C:\Android\android-sdk "C:\Program Files (x86)\Android\android-sdk"
```
This is because [Android NDK doesn't support being installed in a path with spaces](https://github.com/android/ndk/issues/1400).
**Note**: The Android SDK path will require to be writeable because during the build, some missing components might be downloaded & installed.
- If you have "GNU make" available on your windows system, you may build by using the Makefile. You can also find a `make` executable in `%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe`. To use it, see the instructions for Linux/macOS. Basically, just run `make` or `mingw32-make` depending on which distribution of GNU make for windows you have installed.
- Otherwise proceed as below:
1. Build argon2
```
cd src/java/argon2
%ANDROID_NDK_ROOT%/ndk-build.cmd
```
1. Build the other java components
```
cd src/build-scripts
build-java.bat
```
`build-java.bat` will call `gradlew` for several Java modules.
**Notes:**
- For building the java parts, it is suggested to keep a short name (e.g. "c:\projects\keepass2android") for the root project directory. Otherwise the Windows path length limit might be hit when building.
- Before building the java parts, make sure you have set the ANDROID_HOME variable or create a local.properties file inside the directories with a gradlew file. It is recommended to use the same SDK location as that of the Xamarin build.
- On some environments, `make` can fail to properly use the detected `MSBUILD` tools. This seems to be due to long pathnames and/or spaces in pathnames. It may be required to explicitly set the `MSBUILD` path using 8.3 "short" path notation:
- Determine the location of `MSBUILD` (e.g. `C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe`)
- [Generate the "short" path](https://superuser.com/a/728792) of that location (e.g.: `C:\PROGRA~1\MICROS~2\2022\COMMUN~1\MSBuild\Current\Bin\MSBuild.exe`)
- When running `make` specify the location of ``MSBUILD` explicitly (e.g.: `make MSBUILD="C:\PROGRA~1\MICROS~2\2022\COMMUN~1\MSBuild\Current\Bin\MSBuild.exe`
### On Linux/macOS
- Setup your environment:
- Set these environment variables for Android's SDK & NDK
- `ANDROID_HOME` (for example `export ANDROID_HOME=/path/to/android-sdk/`)
- `ANDROID_SDK_ROOT` (for example `export ANDROID_SDK_ROOT=/path/to/android-sdk/`)
- `ANDROID_NDK_ROOT` (for example `export ANDROID_NDK_ROOT=/path/to/android-sdk/ndk/version`)
- Update your PATH environment variable so that it can access `nuget`, `msbuild` or `xabuild` (for linux):
- On Linux:
- add `xabuild` to your path: `export PATH=/path/to/xamarin.android-oss/bin/Release/bin/:$PATH`
- On macOS:
- you may similarly need to add `msbuild` & `nuget` to your PATH.
- Start the build:
- This will use the Makefile at the root of the project (requires GNU make). To build everything (components & Keepass2Android APK) in a single command simply run:
```
make
```
- Otherwise, if you prefer to do step by step
1. Build argon2
```
make native
```
1. Build the other java components
```
make java
```
## Building Keepass2Android:
These are the basic steps to build Keepass2Android. You can also build Keepass2Android Offline. For this, configure the build by using the [Flavors](#Flavors).
### With Visual Studio
- On windows or on macOS open the src/KeePass.sln file with visual studio, and choose to build the project named 'keepass2android-app'
### Command Line
#### Windows, Macos & Linux
to build the APK, simply run:
```
make
```
or to skip building the APK:
```
make msbuild
```
## Where is the APK ?
The Apk can be installed on a device.
It is located in `src/keepass2android/bin/*/*-Signed.apk`
If you build with Visual Studio, the APK is not produced automatically. You need to perform some extra step. See the documentation of Visual Studio on how to proceed.
## Flavors
Keepass2Android is distributed in two flavors.
- Keepass2Android (aka `net`)
- Keepass2Android Offline (aka `nonet`)
The flavor is set through a MSBuild Property named "`Flavor`". The possible values are '`Net`' and '`NoNet`'.
The value of the Flavor property is used in 2 projects:
- `keepass2android-app` (in `src/keepass2android`)
- `Kp2aBusinessLogic` (in `src/keepass2android`)
Its value is set inside the `*.csproj` file (XML format) of each project in the `Project`/`PropertyGroup`/`Flavor` node.
By default its value is set to an empty string so that development is made with `AndroidManifest_debug.xml` on the '`net`' flavor.
This is the behaviour of the build system depending on the value of Flavor:
| Flavor | What is built | `AndroidManifest.xml` used |
| ----- | ----- | ----- |
| `` (empty string): This is the default value. | Keepass2Android | `AndroidManifest_debug.xml` |
| `Net` | Keepass2Android | `AndroidManifest_net.xml` |
| `NoNet` | Keepass2Android Offline | `AndroidManifest_nonet.xml` |
### Select/Change flavor:
When building, by default, the flavor is not set. So the value used is the value of the Flavor property in *.csproj file. This should result on doing a build of the 'net' flavor.
You can force the Flavor by setting the Flavor property.
Proceed this way:
#### Command line
##### Windows, Macos & Linux
To force building 'net' with `make`, run:
```
make Flavor=Net
```
To build 'nonet' with `make`, run:
```
make Flavor=NoNet
```
##### MSBuild
To build with MSBuild directly on the command line, set the flavor with `-p:Flavor=value` argument. For example:
```
MSBuild src/KeePass.sln ... -p:Flavor=NoNet
```
#### Visual Studio
When building with Visual Studio, edit the `*.csproj` file (XML format) and set the value in the `Project`/`PropertyGroup`/`Flavor` node. This is needed only for the projects that use the flavors.
**Note:** When switching between flavors, be sure to clean the previous build before.
## Makefile
It is possible to override the project's default 'Flavor' (Net, NoNet) and 'Configuration' (Release, Debug) by passing it as argument to `make`. See the header of the Makefile to see what can be done.

View File

@@ -0,0 +1,118 @@
<div class="wikidoc">
<h1>Comparison of Keepass apps for Android</h1>
<p>This page was created to give you a short overview of the features of Keepass2Android vs. Keepass2Android Offline. As Keepass2Android is based on Keepassdroid (by Brian Pellin), there are quite a few similarities here, as well, so we added Keepass2Android
vs. Keepassdroid comparison as well. &quot;Better&quot; properties are highlighted in bold. The page was created in 12/2013. If any information is out of date, please leave a note in the comments section.</p>
<table>
<tbody>
<tr>
<th>&nbsp;</th>
<th>
<h3>Keepass2Android</h3>
</th>
<th>
<h3>Keepass2Android Offline</h3>
</th>
<th>
<h3>Keepassdroid</h3>
</th>
</tr>
<tr>
<td><strong>Play Store link</strong></td>
<td><a href="https://play.google.com/store/apps/details?id=keepass2android.keepass2android">https://play.google.com/store/apps/details?id=keepass2android.keepass2android</a></td>
<td><a href="https://play.google.com/store/apps/details?id=keepass2android.keepass2android_nonet">https://play.google.com/store/apps/details?id=keepass2android.keepass2android_nonet</a></td>
<td><a href="https://play.google.com/store/apps/details?id=com.android.keepass">https://play.google.com/store/apps/details?id=com.android.keepass</a></td>
</tr>
<tr>
<td><strong>Technology</strong></td>
<td>Mono for Android, Java</td>
<td>Mono for Android, Java</td>
<td>Java</td>
</tr>
<tr>
<td><strong>Keepass 2.x (kdbx) support</strong></td>
<td><strong>write and read</strong></td>
<td><strong>write and read</strong></td>
<td>read (write in beta)</td>
</tr>
<tr>
<td><strong>Keepass 2.x feature support</strong></td>
<td><strong>Viewing and editing of tags, attachments, additional fields, TAN support</strong></td>
<td><strong>Viewing and editing of tags, attachments, additional fields, TAN support</strong></td>
<td>Edit standard fields only, no display/edit of attachments</td>
</tr>
<tr>
<td><strong>Keepass 1.x (kdb) support</strong></td>
<td>currently read-only</td>
<td>currently read-only</td>
<td><strong>yes</strong></td>
</tr>
<tr>
<td><strong>Storage locations</strong></td>
<td>SD Card,<strong> Cloud (Dropbox, Google Drive, OneDrive), Web (FTP/HTTP/HTTPS/WebDav), SFTP</strong></td>
<td>SD Card</td>
<td>SD Card</td>
</tr>
<tr>
<td><strong>File choosers</strong></td>
<td><strong>Internal or third party</strong></td>
<td><strong>Internal or third party</strong></td>
<td>Third party</td>
</tr>
<tr>
<td><strong>Required permissions</strong></td>
<td>Internet, SD card, Manage accounts</td>
<td><strong>SD card</strong></td>
<td><strong>SD card</strong></td>
</tr>
<tr>
<td><strong>Android 4.x style</strong></td>
<td><strong>yes</strong></td>
<td><strong>yes</strong></td>
<td>no</td>
</tr>
<tr>
<td><strong>Database locking</strong></td>
<td><strong>QuickUnlock</strong> or full lock</td>
<td><strong>QuickUnlock</strong> or full lock</td>
<td>Full lock only</td>
</tr>
<tr>
<td><strong>Browser integration</strong></td>
<td><strong>yes</strong></td>
<td><strong>yes</strong></td>
<td>no</td>
</tr>
<tr>
<td><strong>Secure keyboard</strong></td>
<td><strong>yes</strong></td>
<td><strong>yes</strong></td>
<td>no</td>
</tr>
<tr>
<td><strong>Database unlocking</strong></td>
<td><strong>password, keyfile, One-Time-Passwords (supports Yubikey NEO with NFC), KeeChallenge</strong></td>
<td><strong>password, keyfile, One-Time-Passwords (supports Yubikey NEO with NFC),&nbsp;KeeChallenge</strong></td>
<td>password, keyfile</td>
</tr>
<tr>
<td><strong>Keepass plugin compatibility</strong></td>
<td><strong>Twofish Cipher, KeeChallenge, TrayTOTP, KeeOTP</strong></td>
<td><strong>Twofish Cipher, KeeChallenge, TrayTOTP, KeeOTP</strong></td>
<td>Twofish Cipher</td>
</tr>
<tr>
<td><strong>Extensible with plugins</strong></td>
<td><strong>yes</strong></td>
<td><strong>yes</strong></td>
<td>no</td>
</tr>
<tr>
<td><strong>Database export</strong></td>
<td><strong>yes</strong></td>
<td><strong>yes</strong></td>
<td>no</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
</div><div class="ClearBoth"></div>

View File

@@ -1 +1,125 @@
This page has been moved to the [wiki](https://github.com/PhilippC/keepass2android/wiki/Documentation)
**Note:** This is an incomplete and preliminary documentation. More documentation will be added as requests come in or when the app is more feature stable.
If you want, I'd be happy if you contribute texts for this place!
If you think something is missing in the documentation, please create an issue at https://github.com/PhilippC/keepass2android/issues
# What you should know and think about
If you store important information using Keepass2Android, you should know a little bit about what's going on:
* Keepass2Android stores your password in an encrypted file. It is *your responsibility* to backup this file regularly and safely.
* There is no way for anyone, including the app's author, to access the information stored in your password database without
* having the database file
* knowing the master password (and additional second factor if you chose one)
This means that **if you forget the master password, your database is lost**! So make sure you remember the password and retain any second factor method (if one is used).
* You might also want to think about:
* What happens if I have an accident? Should any trusted person be able to access my database?
* What happens if my phone gets lost or stolen? Do I know how to recover my database from a backup or the cloud?
# Getting started
## Opening an existing database
Many users are already using Keepass 2 on Windows and thus have their passwords stored in a Keepass database, typically a file with ending .kdbx. For opening such an existing database, there are two main options:
* You can open the file directly if it is located on a webserver or in the cloud. Use "Open Database" on the startscreen. By default, files from the cloud or servers are cached in the application's cache directory after loading them once. This allows to access your files even when you're offline.
* If you don't have your database stored on a webserver or in the cloud (or if you're using KP2A Offline) you need to copy your kdbx-Database to your phone. I suggest to use a sync tool like FolderSync. Such a tool copies your database to your local storage, so you always have it accessible. FolderSync can access your database if you have it on a network share or use any other common storage.
## Creating a new database
Select "Create new database" from the start screen. Tap the integrated help icons for more information. Note that by default, the database is created as a local file. Please consider making backups regularly or select a location in the cloud.
## Getting passwords into password fields
There are many ways how to enter the passwords from your database in the corresponding fields. By default, the clipboard as well as the KP2A keyboard are activated in the settings:
* The KP2A keyboard is the recommended way because it's safe against clipboard loggers: Whenever you select an entry, the KP2A keyboard notification will appear in the notification bar. Click it to activate the keyboard. (The first time you do this, you are required to enable the keyboard in the system settings. This must be done by the user for Android security reasons.) As soon as it's activated, you can tap a field where you want to enter data from the selected entry. The KP2A keyboard will come up. Click the KP2A key (on the bottom left) to select whether you want to enter Username/password etc. When you're done, click the Keyboard key (next to the KP2A key) to switch back to your favorite keyboard.
* You can enable the Keepass2Android Autofill service in the system's Autofill settings (Android 8+) which allows to fill data using Android's accessibility system. This works with many apps including Firefox browser but is not supported for Chrome (when writing this).
* The clipboard based approach can be used as well: Pull the notification bar down and select "Copy username/password to clipboard". Then long-tap the field where you want to paste the data. A small "paste" button should come up. Note, however, that information in the clipboard can be monitored by all apps on your device and clearing the clipboard is not always possible.
These options can be used in different workflows:
### Browser-based workflow
If you are browsing the web and need to enter crendentials for a webpage, a simple and powerful workflow is to use the "Share URL" option from the browser's menu. Then select Keepass2Android (or KP2A Offline). Open your database (if it's not already opened) and select the entry you want to enter (if KP2A did not already select the appropriate entry). Use the built-in keyboard or the clipboard to enter the password.
### Autofill service based workflow
If you have enabled the autofill service and open a (supported) app with a password field, a dropdown appears. Select "Fill with Keepass2Android" to select the appropriate entry. When you return to the app, the password and user field should be filled already.
### KP2A based workflow for websites
Open KP2A, open your database, select your entry (in this step, the notification bar items should show up already). Now click the URL link of the entry to open a browser window with the website. Use one of the methods described above to enter the credentials.
### KP2A Keyboard based workflow
When you are in a text field, you can use the Android icon in the notification bar to switch to the KP2A keyboard. Hit the KP2A key to select an icon. After it's selected, hit the KP2A key again to enter the desired field.
## Creating a new account
Assume you want to create an account on a website. If you do not have a database yet, see above. As soon as you have a database, you may proceed as follows:
* Go to the website you want to create the account for
* Select Share/Share URL from the browser's menu and tap "Keepass2Android"
* Log in to your database (if it's not already unlocked)
* You will see the search result screen with "No search results"
* Tap "Create entry for URL"
* Choose the desired group, then tap the "+"-button to add an entry.
* Tap the "..." button next to the password field to launch the password generator, create your password and then select "Accept"
* Enter a name for the entry
* Enter the username you want to use for the entry
* Tap "Save" on the top
* You should see notifications like "Entry is available through KP2A keyboard" and/or "Copy username/password to clipboard". If not, view the new entry by clicking it.
* Return back to the browser.
* Use the notifications to enter your new credentials. See "Getting passwords into the password fields" for more details.
* If the user name you entered is not available or valid, choose a different one but copy it to clipboard. After creating the account, don't forget to update the new entry.
# Keepass2Android vs Keepass2Android Offline vs Keepassdroid
What's the difference between these apps? There is a short comparison on [Comparison of Keepass apps for Android](Comparison-of-Keepass-apps-for-Android.md) to help you pick the best for you!
# Advanced topics
## YubiKey NEO support for One-Time-Passwords
Please see the [How to use Keepass2Android with YubiKey NEO](How-to-use-Keepass2Android-with-YubiKey-NEO.md) page.
## 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?
The KP2A keyboard is meant to quickly "paste" or "type" values from your database to any text fields by using the KP2A icon. The QUERTY keyboard is just for convenience (if you just have the KP2A keyboard activated and need to enter a few letters). However, every other (trustworthy) keyboard is ok as well to enter sensitive information: Keyboard's aren't unsafe in Android. Only the clipboard is. Thus, the KP2A keyboard allows to get information out of the database without using the clipboard.
**You can use any keyboard when you enter the main database password**
## Is it safe to store my kdbx file in the cloud?
While it may happen that someone gets access to your kdbx file in the cloud, there is still no need to worry: the purpose of encryption is to protect the data even in case someone gets the kdbx file! As long as you are using a safe master key, you're safe! [Key files](https://keepass.info/help/base/keys.html#keyfiles) can help with securing the database even more.
## Doesn't Keepass2Android create automatic backups?
Yes and no. Yes: Keepass2Android stores the last successfully opened file as a read-only backup locally on the phone (unless you disable this is in the settings). This should make sure that even if the file gets destroyed during a save operation or gets deleted by accident, you should always have a version that can be opened. (Don't mix this up with the internal file cache which is not meant as a backup and can easily be overwritten even with a corrupt file. This internal file cache is meant for providing writable access even when the original file is not reachable, e.g. when you're offline.)
No: The local backup has two shortcomings: It is only one backup and does not allow to revert to older versions. So if you deleted an entry from the database, it might be deleted in the local backup soon as well. The even more important shortcoming is that it is just a local backup. It won't help when your phone gets lost or broken. Please create additional backups on seperate storage!
## How do I backup the database?
If you have stored your database on the cloud, you might rely on your cloud storage providers backups. Make sure they allow you to revert to older revisions in case the file gets corrupted for some reason.
If you are working with a local database file, make sure you create regular backups. I suggest you have an aumotated mechanism, e.g. with FolderSync (Lite) which can copy local files from your device to other locations, e.g. your PC in a local network. You can also use USB or tools like MyPhoneExploror to transfer data to your PC. Or, you use a removable storage like an SD card which you keep in a safe place after making the backup.
In all cases, you need to verify that your backup is readable! It's even best to test this on another device (e.g. a PC), so you simulate the case that you may lose your phone.
## I can open my database with fingerprint, but don't remember my master password!
It's time for action! As soon as possible, select Settings - Database - Export and choose unencrypted XML (don't put this on the cloud but on a local file). Transfer this file to a PC and import it to a new kdbx file, e.g. with Keepass2. Choose a new master password and make sure you don't forget this password!
## How can I transfer data from one device to another?
* If you are about to get a new Android device, you should make sure you're not losing your passwords in the transition! The first thing you need to make sure is that you can access your .kdbx file (which stores the passwords) on the new device. If it is already stored in the cloud, you only need to make sure you know how to setup the cloud storage on the new device (it might require a password, so make sure you have access to that!).
* If the .kdbx-file is stored locally on the old device, make sure you have an up-to-date backup (see above). You can then transfer that backup copy to the new device. (Note: transferring via USB causes data corruption in some cases, use MyPhoneExplorer or similar tools to be sure this does not happen.)
* If you are securing your password database with a keyfile, also transfer this key file to the new device.
* If you are opening your database with a fingerprint, make sure you also know the master password because fingerprint will not be available immediately on the new device.
## Why is Keepass2Android's apk so big?
Please see [Keepass2Android Apk](Keepass2Android-Apk.md) for more information.
## I get a message "File is trashed" when reading or writing a file on Google Drive
This happens because ocaml-fuse (I guess you are on Linux  and use that) moves files to trash and then creates a new one instead of correctly updating the file on Google Drive (each file has a unique ID which Keepass2Android uses). Fortunately, this was fixed: https://github.com/astrada/google-drive-ocamlfuse/issues/494. After activating this option, please select "Change database" in KP2A, tap ,"Open file" and browse to the file on Google Drive again. After that, the message should no longer pop up.
## I get a message "The name must not be empty: null" when opening from Google Drive
Please follow these steps:
* select "Change database" on the password screen, then "Open database" and browse to your file again
* go to Android app settings and disable all permissions for the KP2A app. Then try again to open the database file.
* reboot the device
(Before running the following steps, make sure you don't have local changes in your database which have not been synchronized with Google Drive (this can happen if you worked offline). If you have, please open the database from the local cache and go to settings - database settings - export database and make a backup copy of the data.)
* clear KP2A's app cache in the Android settings
* uninstall & reinstall
One of these has helped all users so far, but unfortunately it's not totally clear to me why different steps are required (or nothing for most users).
# For developers
If you are interested in adding new features, you have two options:
Either your features can be implemented as a plug-in. Please see [How to create a plug-in?](How-to-create-a-plug-in_.md) for more information. Or you add the features directly in the source code of the projects and create a pull request.
If you want to build Keepass2Android, check the [build guide](Build.readme.md).

View File

@@ -1 +1,53 @@
This page has been moved to the [wiki](https://github.com/PhilippC/keepass2android/wiki/Generating-TOTPs)
## 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)._

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -0,0 +1,157 @@
# How to create a plug-in or connect from your app
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://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://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:
```java
public class PluginAAccessReceiver extends keepass2android.pluginsdk.PluginAccessBroadcastReceiver
{
@Override
public ArrayList<String> getScopes() {
ArrayList<String> scopes = new ArrayList<String>();
scopes.add(Strings.SCOPE_DATABASE_ACTIONS);
scopes.add(Strings.SCOPE_CURRENT_ENTRY);
return scopes;
}
}
```
Here, you define the method getScopes where the list of scopes is created which must be granted by the user. The actual logic of the authorization process is implemented by the base class in the sdk.
In order to make this broadcast receiver visible to KP2A, add the following lines (probably with the name adapted to your class name) in the AndroidManifest.xml:
```xml
<receiver android:name="PluginAAccessReceiver" android:exported="true">
<intent-filter>
<action android:name="keepass2android.ACTION_TRIGGER_REQUEST_ACCESS" />
<action android:name="keepass2android.ACTION_RECEIVE_ACCESS" />
<action android:name="keepass2android.ACTION_REVOKE_ACCESS" />
</intent-filter>
</receiver>
```
Please also add a few strings in your resource files (e.g. strings.xml) with the following keys:
```xml
<string name="kp2aplugin_title">The Great PluginA</string>
<string name="kp2aplugin_shortdesc">Test plugin to demonstrate how plugins work</string>
<string name="kp2aplugin_author">[your name here](your-name-here)</string>
```
These strings will be displayed to the user when KP2A asks if access should be granted.
## 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" 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).
To implement this, simply follow the steps descrIbed above in the sections Preparation and Authorization. Then, wherever appropriate in your app, do something like this:
```java
try
{
PlaceholderFragment.this.startActivityForResult(
Kp2aControl.getQueryEntryIntentForOwnPackage(),
1);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(
PlaceholderFragment.this.getActivity(),
"no KP2A host app found",
Toast.LENGTH_SHORT).show();
}
```
(of course you can use `PacketManager` to check if the intent can be started instead of catching the `Exception`).
Instead of querying credentials associated with your own app, you might want to query other credentials as well. instead of `KpControl.getQueryEntryIntentForOwnPackage()` use
`Kp2aControl.getQueryEntryIntent("google.com")`
This requires \{"SCOPE_QUERY_CREDENTIALS (whereas getQueryEntryIntentForOwnPackage() requires SCOPE_QUERY_CREDENTIALS_FOR_OWN_PACKAGE)"\}.
The credential data can be retrieved in onActivityResult():
```java
if ((requestCode == 1) //queryEntry for own package
&& (resultCode == RESULT_OK)) // ensure user granted access and selected something
{
HashMap<String, String> credentials = Kp2aControl.getEntryFieldsFromIntent(data);
if (!credentials.isEmpty())
{
//here we go!
Toast.makeText(
getActivity(),
"retrieved credenitals! Username="+credentials.get(KeepassDefs.UserNameField),
Toast.LENGTH_LONG).show();
}
}
```
Note that you get access to all strings (Title, Username, Password, URL, Notes + any user defined strings) in the entry. This may be in intersting in combination with the following section:
## Storing data in KP2A
If you allow the user to set up an account in your app or create a password, e.g. for encryption, please add an option to store this data in the Keepass2Android database, as this will lead to great workflows for the user. It's as simple as
```java
try {
HashMap<String, String> fields = new HashMap<String, String>();
//standard fields
fields.put(KeepassDefs.TitleField, "plugin A");
fields.put(KeepassDefs.UserNameField, "John Doe");
fields.put(KeepassDefs.PasswordField, "top secret");
//associate entry with our app. If we would require the URL field for a web URL,
//this string could be added in any other (e.g. a custom) field
fields.put(KeepassDefs.UrlField, "androidapp://"+getActivity().getPackageName());
//custom field:
fields.put(PLUGIN_A_PASSPHRASE, "some long text");
//mark custom field as protected (i.e. display masked, enable memory protection in Keepass2)
ArrayList<String> protectedFields = new ArrayList<String>();
protectedFields.add(PLUGIN_A_PASSPHRASE);
//add to KP2A
PlaceholderFragment.this.startActivityForResult(
Kp2aControl.getAddEntryIntent(fields, protectedFields),
2);
} catch (ActivityNotFoundException e) {
Toast.makeText(
PlaceholderFragment.this.getActivity(),
"no KP2A host app found",
Toast.LENGTH_SHORT).show();
}
```
Note that this does not even require access authorization because the user will actively save the entry anyways (after selecting the group where to create it.)
## Get information about database actions
With {"SCOPE_DATABASE_ACTIONS"}, you will be informed when the user opens, closes, locks or unlocks the database including the file name information.
PluginA uses this to simply display a toast message in its ActionReceiver:
```java
@Override
protected void dbAction(DatabaseAction db) {
Log.d("PluginA", db.getAction() + " in file " + db.getFileDisplayName() + " ("+db.getFilePath()+")");
}
```
## Sample plugin
Most example code from above is taken from the simple sample plugin "PluginA" as can be found on [https://keepass2android.codeplex.com/SourceControl/latest#src/java/PluginA/](https://keepass2android.codeplex.com/SourceControl/latest#src/java/PluginA/)

View File

@@ -0,0 +1,31 @@
<div class="wikidoc">
<h1>How to use Keepass2Android with YubiKey NEO</h1>
<p>Please refer to the documentation on the Keepass website (<a href="http://keepass.info/help/kb/yubikey.html">http://keepass.info/help/kb/yubikey.html</a>) or the Yubico website (<a href="http://www.yubico.com/applications/password-management/consumer/keepass/">http://www.yubico.com/applications/password-management/consumer/keepass/</a>)
on how to set up a Keepass 2 database with Yubikey/OTP protection.<br>
<br>
After successful setup you should have the database file, e.g. yubi.kdbx, and the OTP auxiliary file, e.g. yubi.otp.xml, both in the same folder.<br>
<a href="How to use Keepass2Android with YubiKey NEO_OTPAuxFile_2.png"><img title="OTPAuxFile" src="How to use Keepass2Android with YubiKey NEO_OTPAuxFile_thumb.png" alt="OTPAuxFile" width="513" height="40" border="0" style="padding-top:0px; padding-left:0px; display:inline; padding-right:0px; border:0px"></a></p>
<p>Make sure you make <strong>both files</strong> available to Keepass2Android, e.g. by placing them both in your Dropbox.</p>
<p>Now you should check your NDEF setup of the Yubikey NEO. Therefore, go to the Tools menu in the Yubico Personalization Utility. Select the same slot as used for OTPs with Keepass 2. The default setting for NDEF type and payload should work. If you experience
problems, you may use the configuration as shown in this screenshot or simply press the &ldquo;Reset&rdquo; button:</p>
<p><a href="How to use Keepass2Android with YubiKey NEO_image_2.png"><img title="image" src="How to use Keepass2Android with YubiKey NEO_image_thumb.png" alt="image" width="760" height="622" border="0" style="padding-top:0px; padding-left:0px; display:inline; padding-right:0px; border:0px"></a></p>
<p><br>
<br>
In Keepass2Android, select &quot;Open file&quot; and locate your database file, e.g. yubi.kdbx.<br>
<br>
In the password screen under &quot;Select master key type&quot; select &quot;Password &#43; OTP&quot;.</p>
<p><a href="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-38-50_2.png"><img title="Screenshot_2013-12-13-06-38-50" src="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-38-50_thumb.png" alt="Screenshot_2013-12-13-06-38-50" width="204" height="360" border="0" style="padding-top:0px; padding-left:0px; display:inline; padding-right:0px; border:0px"></a></p>
<p>Click &quot;Load auxiliary OTP file&quot;. This is required to load the information how many OTPs must be entered. As loading the file might require user action in some cases, this is not performed automatically.<br>
<a href="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-38-12_2.png"><img title="Screenshot_2013-12-13-06-38-12" src="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-38-12_thumb.png" alt="Screenshot_2013-12-13-06-38-12" width="204" height="360" border="0" style="padding-top:0px; padding-left:0px; display:inline; padding-right:0px; border:0px"></a><br>
After loading the OTP auxiliary file, you should see a few text fields for entering the OTPs. Now swipe your YubiKey NEO at the back of your Android device. If you have multiple apps which can handle NFC actions, you might be prompted to select which app to
use. Select Keepass2Android in this case. Swipe your YubiKey again until all OTP fields are filled. Note: You don't need to select the next text field, this is done automatically!<br>
<a href="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-38-36_2.png"><img title="Screenshot_2013-12-13-06-38-36" src="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-38-36_thumb.png" alt="Screenshot_2013-12-13-06-38-36" width="204" height="360" border="0" style="padding-top:0px; padding-left:0px; display:inline; padding-right:0px; border:0px"></a><br>
Don't forget to also enter your password and click OK. You will see the &ldquo;Saving auxiliary OTP file&hellip;&rdquo; dialog. Note that there is some encryption envolved which is probably fast on your PC but might take some time on your mobile device. You
can reduce the look-ahead window length to speed this up.<br>
<a href="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-39-47_2.png"><img title="Screenshot_2013-12-13-06-39-47" src="How to use Keepass2Android with YubiKey NEO_Screenshot_2013-12-13-06-39-47_thumb.png" alt="Screenshot_2013-12-13-06-39-47" width="204" height="360" border="0" style="padding-top:0px; padding-left:0px; display:inline; padding-right:0px; border:0px"></a></p>
<h2>&nbsp;</h2>
<h2>A note about offline access</h2>
<p>If your database is stored in the cloud or on the web, you can still access it if you have enabled file caching (which is on by default). With OTPs, this becomes a little bit more complicated: If you repeatedly open your datbase while being offline, the
OTP counter stored on the Yubikey will be increased. Don&rsquo;t forget to synchronize the database (which will also synchronize the OTP auxiliary file) as soon as possible to avoid problems with accessing your database on other devices! If you often need
to open the database while you&rsquo;re offline, consider increasing the look-ahead window length!</p>
</div><div class="ClearBoth"></div>

View File

@@ -0,0 +1,25 @@
Keepass2Android's apk is pretty big, e.g. when comparing to Keepassdroid. The main difference is that Keepass2Android is built on Mono for Android. Mono is an open-source implementation of the Microsoft .Net Framework (installed on pretty much every Windows PC). On Windows, the .net framework requires several hundred MB (but only once, not for every application). On Android devices, Mono is not installed globally. Instead, it is packaged into every app. The more features from Mono are required, the bigger the package becomes.
Here's a list of what is contained in the Keepass2Android 0.9.1 application package:
```
Mono for Android
.net dlls 5.0 MB
Runtime 2.5 MB
Google libraries 0.8 MB
(for Drive support)
Resources Strings, Icons.. 2.1 MB
Password Font 0.2 MB
Java Code including Dropbox 1.1 MB
GDrive, SkyDrive
libraries
Keepass library 0.2 MB
Keepass2Android Code 0.3 MB
Java/Mono bindings 0.5 MB
rest 0.3 MB
TOTAL 13 MB
```

20
docs/OreoAutoFill.md Normal file
View File

@@ -0,0 +1,20 @@
Google has introduced the Android Autofill interface in Android 8. Keepass2Android supports this interface. In most Android apps and all Autofill-enabled browsers, this is the most convenient way of entering passwords. As soon as you focus a field, you will see a popup "Fill with Keepass2Android".
<img src="autofill-facebook.png" />
After clicking this popup, you can unlock your KP2A database. If automatic look up succeeds, KP2A will close automatically, if not you are prompted to select the entry you want to auto-fill. When returning to the target app, the fields should be filled automatically already.
As of January 2018, the following browsers are known to have Android Autofill support:
* Firefox Focus / Firefox Klar
* Opera Mini
These browsers do not (yet) have autofill support:
* Google Chrome
* Firefox for Android ([bugzilla entry](https://bugzilla.mozilla.org/show_bug.cgi?id=1352011))
* Brave-Browser
* Opera
Please use the Share-URL-feature and the built-in KP2A keyboard for these browsers.

View File

@@ -1 +1,25 @@
This page has been moved to the [wiki](https://github.com/PhilippC/keepass2android/wiki/Privacy-Policy)
# Who we are
Philipp Crocoll
Wallonenstr. 4
76297 Stutensee
Germany
is the author of Keepass2Android and Keepass2Android Offline.
# What data is collected?
The contents of your password database is yours and is never collected by us. Keepass2Android stores this data on a location chosen by the user and encrypted in the Keepass database format. The app author does not have any access, neither to the files nor the contents. Depending on the user's choice of the storage location, the files may be stored on third-party servers like Dropbox or Google Drive.
Keepass2Android does not collect personal identifiable information. For debugging purposes, the user may activate creating a debug log. This collects data inside the app and is not accessible to any other app nor the author of the app, unless the user explicitly sends the debug log to the author. Debug logs usually do not contain personal identifiable information, except if such information is part of file or folder names. Debug logs will not be shared with third parties unless explicitly authorized by the sender.
# What Android permissions are required?
* **Internet** (Keepass2Android regular only): Required to allow the user to read/store password databases or key files on remote locations, e.g. Dropbox or via WebDav.
* **Contacts/Accounts** (Keepass2Android regular only): Required by the Google Drive SDK. If you want to access files on Google Drive, you are prompted to select one of the Google Accounts on your phone to use. The permission is required to query the list of Google accounts on the device. Keepass2Android does not access your personal contacts.
* **Storage**: Required to allow the user to read/store password databases or key files on the device locally.
* **Fingerprint/Biometric**: Required if you want to use biometric unlock.
* **Vibrate**: Required by the built-in keyboard (vibrate on key press)
* **Camera**: Required for scanning OTP QR Codes
* **Foreground service**: Required to keep the app alive for QuickUnlock (so you don't need to enter your full master password repeatedly)

View File

@@ -2,8 +2,8 @@
# What is Keepass2Android?
Keepass2Android is a password manager app. It allows to store and retrieve passwords and other sensitive information in a file called "database", secured with a strong key.
The password database file can be synchronized across different devices. This works best using one of the built-in cloud storage options, but can also be performed with third-party apps. Keepass2Android is compatible with KeePass 2.x and KeepassXC on PCs as well as many other KeePass ports for a variety of platforms.
Keepass2Android is a password manager app. It allows to store and retrieve passwords and other sensitive information in a file called "database". This database is secured with a so-called master password. The master password typically is a strong password and can be complemented with a second factor for additional security.
The password database file can be synchronized across different devices. This works best using one of the built-in cloud storage options, but can also be performed with third-party apps. Keepass2Android is compatible with Keepass 1 and Keepass 2 on Windows and KeepassX on Linux.
# Where to get it?
Regular stable releases of Keepass2Android are available on [Google Play](https://play.google.com/store/apps/details?id=keepass2android.keepass2android).
@@ -17,7 +17,11 @@ Beta-releases can be obtained by opting in to the [Beta testing channel](https:/
* [Make a donation](http://philipp.crocoll.net/donate.php)
# How do I learn more?
Please see the [wiki](https://github.com/PhilippC/keepass2android/wiki/Documentation) for further information.
Please see the [documentation](Documentation.md).
# How do I build the project?
If you want to build Keepass2Android, check the [build guide](Build.readme.md).
The project homepage is https://philipp.crocoll.net/keepass2android/index.php
<img src="https://github.com/PhilippC/keepass2android/actions/workflows/build.yml/badge.svg" alt="build status" /> [Build status](https://github.com/PhilippC/keepass2android/actions)

72
docs/SFTP-Credentials.md Normal file
View File

@@ -0,0 +1,72 @@
# SFTP Open/Create Database Credentials Documentation
## Basic Settings
* **Host** -- the hostname or IP address of the SFTP server to connect to
* **Port** -- the listening TCP port of the SFTP server to connect to (default: 22)
* **Username** -- the user/account name on the SFTP server that has access to the database
* **Initial directory** -- The path on the SFTP server that will be used as a starting point when choosing the remote database file
### Authentication Modes
#### Password
Authenticate using a password
* **Password** -- the password associated with **username** used to log into the SFTP server
#### K2A Private/Public Key
Authenticate using a private/public key pair that is generated internally by KP2A
* **SEND PUBLIC KEY...** -- Opens a standard Android "Share" screen containing the KP2A public key content. This allows for the public key to be sent via email, SMS, etc. This public key will need to be added to the SFTP server's user's "authorized keys" to allow private/public key authentication.
#### Custom Private Key
Authenticate using an existing private/public key pair. Use this option instead of *K2A Private/Public Key* if you wish to use a key pair that is already set up for this **username** on the SFTP server.
* **Selected private key** -- a combo-box containing a list of custom private keys that KP2A knows about, and a special `[Add new...]` option.
##### Add A New Private Key
* Select `[Add new...]`
* Enter a name for the new key in **New key name**
* Enter the private key contents (text) into **New key content**. **TIP:** The easiest way to accomplish this is to open the private key file in a text editor on the device, **Select All**, **Copy** to the clipboard, and paste it into **New key content**.
* Tap **SAVE PRIVATE KEY** to add the new key to the known list.
##### Use An Existing Private Key
* To use a private key that has already been imported into KP2A, simply select it from the list of keys.
##### Remove An Existing Key
* To remove a private that has been imported into KP2A, select it from the list and tap **DELETE PRIVATE KEY**.
A **key passphrase** can be supplied (if the key pair requires it)
## Advanced Settings
* **Connection timeout seconds** -- the number of seconds to wait for a connection to the server before giving up and considering the server as unavailable/unreachable
### Key Algorithm Manipulation
**NOTE: It is very rare that these fields need to be (or should be) specified. Use at your own risk!**
* **Key Exchange (KEX) Algorithm(s)** -- Explicitly set or modify the ordered list of Key Exchange algorithms that the SSH/SFTP client library will try to use
* **Server Host Key Algorithm(s)** -- Explicitly set or modify the ordered list of Server Host Key algorithms that the SSH/SFTP client library will try to use
#### How It Works
The SSH/SFTP client has a pre-defined ordered list of algorithm names that it will use to negotiate with the server to handle key exchange. In rare cases there are compatibility issues where Android OS has not properly implemented full support for algorithms listed. This can result in a connection failure, even if there is a suitable algorithm available (of lesser priority in the list).
The fields listed above allow these lists to be manipulated in the following ways to overcome/workaround such problems. The value is a comma-separated list of "algorithm spec" entries. Specs can be one of:
* Direct replacement of values -- Ex: `primary_alg,secondary_alg`
* Prepend to values -- Ex: `+try_first_alg`
* Append to values -- Ex: `try_last_alg+`
* Remove a specific value -- Ex: `-bad_alg`
* Remove values matching prefix -- Ex: `-bad_starting_with*`
* Remove values matching suffix -- Ex: `-*bad_ending_with`
* Remove values matching substring -- Ex: `-*bad_middle*`
* Remove values matching prefix and suffix -- Ex: `-alg_begin*end`
For example, assume the system's KEX algorithm list is:
`ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256`
These are various outcomes (user KEX field -> result):
* Prefix removal: `-ec*` --> `diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256`
* Suffix removal, appending: `-*256,+first_alg,almost_last_alg+,last_alg+` --> `first_alg,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,almost_last_alg,last_alg`
* Direct replacement: `first_alg,middle_alg,last_alg` --> `first_alg,middle_alg,last_alg`
## Selecting A Database
Once all applicable fields have been entered and/or options selected, tapping **OK** will attempt to connect to the SFTP server. First time connections may pop up a dialog window asking to accept the host's authenticity (tap **yes** if the host is trusted), as well as potentially creating a new `known_hosts` file (tap **yes** to do so). If the connection is successful, a remote file browser screen will open. Navigate and select the Keepass database to open.

1
docs/_config.yml Normal file
View File

@@ -0,0 +1 @@
theme: jekyll-theme-slate

BIN
docs/autofill-facebook.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

@@ -1,48 +0,0 @@
Additions allow you to add arbitrary C# to the generated classes
before they are compiled. This can be helpful for providing convenience
methods or adding pure C# classes.
== Adding Methods to Generated Classes ==
Let's say the library being bound has a Rectangle class with a constructor
that takes an x and y position, and a width and length size. It will look like
this:
public partial class Rectangle
{
public Rectangle (int x, int y, int width, int height)
{
// JNI bindings
}
}
Imagine we want to add a constructor to this class that takes a Point and
Size structure instead of 4 ints. We can add a new file called Rectangle.cs
with a partial class containing our new method:
public partial class Rectangle
{
public Rectangle (Point location, Size size) :
this (location.X, location.Y, size.Width, size.Height)
{
}
}
At compile time, the additions class will be added to the generated class
and the final assembly will a Rectangle class with both constructors.
== Adding C# Classes ==
Another thing that can be done is adding fully C# managed classes to the
generated library. In the above example, let's assume that there isn't a
Point class available in Java or our library. The one we create doesn't need
to interact with Java, so we'll create it like a normal class in C#.
By adding a Point.cs file with this class, it will end up in the binding library:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}

View File

@@ -1,8 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>

View File

@@ -1,14 +0,0 @@
<enum-field-mappings>
<!--
This example converts the constants Fragment_id, Fragment_name,
and Fragment_tag from android.support.v4.app.FragmentActivity.FragmentTag
to an enum called Android.Support.V4.App.FragmentTagType with values
Id, Name, and Tag.
<mapping jni-class="android/support/v4/app/FragmentActivity$FragmentTag" clr-enum-type="Android.Support.V4.App.FragmentTagType">
<field jni-name="Fragment_name" clr-name="Name" value="0" />
<field jni-name="Fragment_id" clr-name="Id" value="1" />
<field jni-name="Fragment_tag" clr-name="Tag" value="2" />
</mapping>
-->
</enum-field-mappings>

View File

@@ -1,13 +0,0 @@
<enum-method-mappings>
<!--
This example changes the Java method:
android.support.v4.app.Fragment.SavedState.writeToParcel (int flags)
to be:
android.support.v4.app.Fragment.SavedState.writeToParcel (Android.OS.ParcelableWriteFlags flags)
when bound in C#.
<mapping jni-class="android/support/v4/app/Fragment.SavedState">
<method jni-name="writeToParcel" parameter="flags" clr-enum-type="Android.OS.ParcelableWriteFlags" />
</mapping>
-->
</enum-method-mappings>

View File

@@ -1,35 +0,0 @@
<metadata>
<remove-node path="/api/package[@name='com.dropbox.core']" />
<remove-node path="/api/package[@name='com.dropbox.core.http']" />
<remove-node path="/api/package[@name='com.dropbox.core.json']" />
<remove-node path="/api/package[@name='com.dropbox.core.oauth']" />
<remove-node path="/api/package[@name='com.dropbox.core.sdk.android']" />
<remove-node path="/api/package[@name='com.dropbox.core.stone']" />
<remove-node path="/api/package[@name='com.dropbox.core.util']" />
<remove-node path="/api/package[@name='com.dropbox.core.v1']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.account']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.callbacks']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.check']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.seenstate']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.teamcommon']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.secondaryemails']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.async']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.auth']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.common']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.contacts']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.fileproperties']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.filerequests']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.files']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.paper']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.openid']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.sharing']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.team']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.teamlog']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.teampolicies']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.users']" />
<remove-node path="/api/package[@name='com.dropbox.core.v2.userscommon']" />
<remove-node path="/api/package[@name='com.dropbox.android']" />
<remove-node path="/api/package[@name='com.dropbox.core.android']" />
</metadata>

View File

@@ -29,8 +29,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PCloudBindings", "PCloudBin
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Kp2aAutofillParser.Tests", "Kp2aAutofillParser.Tests\Kp2aAutofillParser.Tests.csproj", "{F5A2A8F9-C084-498F-9603-9D927BA5C626}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DropboxBinding", "DropboxBinding\DropboxBinding.csproj", "{2FE6E335-E834-4F86-AB83-2C5D225DA929}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -371,30 +369,6 @@ Global
{F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU
{F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU
{F5A2A8F9-C084-498F-9603-9D927BA5C626}.ReleaseNoNet|x64.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Win32.ActiveCfg = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|Win32.Build.0 = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|x64.ActiveCfg = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Debug|x64.Build.0 = Debug|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Any CPU.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Win32.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|Win32.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|x64.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.Release|x64.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Any CPU.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Any CPU.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Mixed Platforms.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Mixed Platforms.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Win32.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|Win32.Build.0 = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|x64.ActiveCfg = Release|Any CPU
{2FE6E335-E834-4F86-AB83-2C5D225DA929}.ReleaseNoNet|x64.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -35,6 +35,8 @@ namespace KeePassLib.Cryptography
{
get
{
Debug.Assert(m_dicts.Count > 0); // Should be initialized
int iMaxLen = 0;
foreach(int iLen in m_dicts.Keys)
{

View File

@@ -116,23 +116,12 @@ namespace keepass2android
Intent sendIntent = new Intent();
sendIntent.SetAction(Intent.ActionSend);
string logText = File.ReadAllText(LogFilename);
sendIntent.PutExtra(Intent.ExtraText, logText);
sendIntent.PutExtra(Intent.ExtraText, File.ReadAllText(LogFilename));
sendIntent.PutExtra(Intent.ExtraEmail, "crocoapps@gmail.com");
sendIntent.PutExtra(Intent.ExtraSubject, "Keepass2Android log");
sendIntent.SetType("text/plain");
try
{
ctx.StartActivity(Intent.CreateChooser(sendIntent, "Send log to..."));
}
catch (Exception e)
{
Toast.MakeText(ctx, $"Error sending log of length {logText.Length} bytes: " + e.Message, ToastLength.Long)?.Show();
}
}
ctx.StartActivity(Intent.CreateChooser(sendIntent, "Send log to..."));
}
public static void LogTask(object task, string activityName)
{

View File

@@ -83,7 +83,6 @@ namespace KeePassLib.Serialization
if (m_bUsedOnce)
throw new InvalidOperationException("Do not reuse KdbxFile objects!");
m_bUsedOnce = true;
Kp2aLog.Log("Starting to load KDBX file...");
#if KDBX_BENCHMARK
Stopwatch swTime = Stopwatch.StartNew();
@@ -258,8 +257,7 @@ namespace KeePassLib.Serialization
MessageService.ShowInfo("Loading KDBX took " +
swTime.ElapsedMilliseconds.ToString() + " ms.");
#endif
Kp2aLog.Log("Finished loading KDBX file.");
}
}
private void CommonCleanUpRead(List<Stream> lStreams, HashingStreamEx sHashing)
{

View File

@@ -445,9 +445,6 @@ namespace Kp2aAutofillParser
public static string ToCanonicalHint(string hint)
{
//avoid crash when looking up a null key
if (hint == null)
return "";
string canonicalHint;
if (!hintToCanonicalReplacement.TryGetValue(hint, out canonicalHint))
canonicalHint = hint;
@@ -733,7 +730,7 @@ namespace Kp2aAutofillParser
{
public List<TField> InputFields { get; set; } = new List<TField>();
public string? PackageId { get; set; } = null;
public string PackageId { get; set; } = null;
public string WebDomain { get; set; } = null;
}
@@ -844,7 +841,6 @@ namespace Kp2aAutofillParser
continue;
if (viewHints.Where(h => h != null).Select(AutofillHintsHelper.ToCanonicalHint).Intersect(_autofillHintsForLogin).Any())
{
AddFieldToHintMap(viewNode, viewHints.Where(h => h != null).Select(AutofillHintsHelper.ToCanonicalHint).ToHashSet().ToArray());
}

View File

@@ -29,14 +29,6 @@ namespace keepass2android
}
public enum MessageSeverity
{
Info,
Warning,
Error
}
/// <summary>
/// Interface through which Activities and the logic layer can access some app specific functionalities and Application static data
/// </summary>
@@ -110,13 +102,10 @@ namespace keepass2android
Context ctx,
string messageSuffix = "");
void ShowMessage(Context ctx, int resourceId, MessageSeverity severity);
void ShowMessage(Context ctx, string text, MessageSeverity severity);
/// <summary>
/// Returns a Handler object which can run tasks on the UI thread
/// </summary>
Handler UiThreadHandler { get; }
/// <summary>
/// Returns a Handler object which can run tasks on the UI thread
/// </summary>
Handler UiThreadHandler { get; }
IProgressDialog CreateProgressDialog(Context ctx);

View File

@@ -13,7 +13,7 @@ using Android.Content.PM;
using Android.OS;
using Android.Preferences;
using Java.IO;
using KeePass.Util;
using KeePassLib.Serialization;
using KeePassLib.Utility;
using File = System.IO.File;
@@ -121,7 +121,7 @@ namespace keepass2android.Io
var response = ex.Response as HttpWebResponse;
if ((response != null) && (response.StatusCode == HttpStatusCode.NotFound))
{
throw new FileNotFoundException(ExceptionUtil.GetErrorMessage(ex), ioc.Path, ex);
throw new FileNotFoundException(ex.Message, ioc.Path, ex);
}
if (ex.Status == WebExceptionStatus.TrustFailure)
{

View File

@@ -13,7 +13,6 @@ using Keepass2android.Javafilestorage;
#endif
using Exception = System.Exception;
using FileNotFoundException = Java.IO.FileNotFoundException;
using KeePass.Util;
namespace keepass2android.Io
{
@@ -43,7 +42,7 @@ namespace keepass2android.Io
}
catch (FileNotFoundException e)
{
throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
throw new System.IO.FileNotFoundException(e.Message, e);
}
catch (Java.Lang.Exception e)
{
@@ -196,7 +195,7 @@ namespace keepass2android.Io
}
catch (FileNotFoundException e)
{
throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
throw new System.IO.FileNotFoundException(e.Message, e);
}
catch (Java.Lang.Exception e)
{
@@ -215,7 +214,7 @@ namespace keepass2android.Io
}
catch (FileNotFoundException e)
{
throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
throw new System.IO.FileNotFoundException(e.Message, e);
}
catch (Java.Lang.Exception e)
{
@@ -245,7 +244,7 @@ namespace keepass2android.Io
}
catch (FileNotFoundException e)
{
throw new System.IO.FileNotFoundException(ExceptionUtil.GetErrorMessage(e), e);
throw new System.IO.FileNotFoundException(e.Message, e);
}
catch (Java.Lang.Exception e)
{

View File

@@ -8,7 +8,6 @@ using Android.Content;
using Android.OS;
using FluentFTP;
using FluentFTP.Exceptions;
using KeePass.Util;
using KeePassLib;
using KeePassLib.Serialization;
using KeePassLib.Utility;
@@ -128,7 +127,7 @@ namespace keepass2android.Io
var ftpEx = (FtpCommandException) exception;
if (ftpEx.CompletionCode == "550")
throw new FileNotFoundException(ExceptionUtil.GetErrorMessage(exception), exception);
throw new FileNotFoundException(exception.Message, exception);
}
return exception;

View File

@@ -3,7 +3,6 @@ using System.Reflection;
using System.Text;
using Android.Content;
using Android.Util;
using KeePass.Util;
using keepass2android.Io.ItemLocation;
using KeePassLib.Serialization;
using KeePassLib.Utility;
@@ -523,10 +522,10 @@ namespace keepass2android.Io
{
if (e.IsMatch(GraphErrorCode.ItemNotFound.ToString()))
return new FileNotFoundException(ExceptionUtil.GetErrorMessage(e));
return new FileNotFoundException(e.Message);
if (e.Message.Contains("\n\n404 : ")
) //hacky solution to check for not found. errorCode was null in my tests so I had to find a workaround.
return new FileNotFoundException(ExceptionUtil.GetErrorMessage(e));
return new FileNotFoundException(e.Message);
return e;
}
@@ -1149,46 +1148,30 @@ namespace keepass2android.Io
});
}
string? driveId = parentPath.DriveId;
if ((string.IsNullOrEmpty(driveId)) && (drives?.Any() == true))
{
driveId = drives.First().Id;
}
if (!CanListShares)
return result;
try
var sharedWithMeResponse = await client.Drives[driveId].SharedWithMe.GetAsSharedWithMeGetResponseAsync();
foreach (DriveItem i in sharedWithMeResponse?.Value ?? [])
{
string? driveId = parentPath.DriveId;
if (string.IsNullOrEmpty(driveId))
var oneDrive2ItemLocation = parentPath.BuildShare(i.RemoteItem.Id, i.RemoteItem.Name, i.RemoteItem.WebUrl, i.RemoteItem.ParentReference.DriveId);
FileDescription sharedFileEntry = new FileDescription()
{
driveId = (await client.Me.Drive.GetAsync()).Id;
}
if ((string.IsNullOrEmpty(driveId)) && (drives?.Any() == true))
{
driveId = drives.First().Id;
}
CanWrite = true, CanRead = true, DisplayName = i.Name,
IsDirectory = true,
Path = oneDrive2ItemLocation.ToString()
};
result.Add(sharedFileEntry);
var sharedWithMeResponse = await client.Drives[driveId].SharedWithMe.GetAsSharedWithMeGetResponseAsync();
foreach (DriveItem i in sharedWithMeResponse?.Value ?? [])
{
var oneDrive2ItemLocation = parentPath.BuildShare(i.RemoteItem.Id, i.RemoteItem.Name, i.RemoteItem.WebUrl, i.RemoteItem.ParentReference.DriveId);
FileDescription sharedFileEntry = new FileDescription()
{
CanWrite = true,
CanRead = true,
DisplayName = i.Name,
IsDirectory = (i.Folder != null) || ((i.RemoteItem != null) && (i.RemoteItem.Folder != null)),
Path = oneDrive2ItemLocation.ToString()
};
result.Add(sharedFileEntry);
}
}
catch (Exception e)
{
logDebug("Failed to list shares: " + e);
}
return result;
}

View File

@@ -16,32 +16,20 @@ namespace keepass2android.Io
/// </summary>
public class OneDriveFileStorage: IFileStorage
{
public OneDriveFileStorage(IKp2aApp app)
{
_app = app;
}
private readonly IKp2aApp _app;
public IEnumerable<string> SupportedProtocols
public IEnumerable<string> SupportedProtocols
{
get
{
yield return "skydrive";
yield return "onedrive";
}
}
}
string GetDeprecatedMessage()
{
return
"You have opened your file through a deprecated Microsoft API. Please select Change database, Open Database and then select OneDrive again.";
}
private Exception GetDeprecatedException()
private Exception GetDeprecatedMessage()
{
return new Exception(
GetDeprecatedMessage());
"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
@@ -51,132 +39,133 @@ namespace keepass2android.Io
public void Delete(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public bool CheckForFileChangeFast(IOConnectionInfo ioc, string previousFileVersion)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public string GetCurrentFileVersionFast(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public Stream OpenFileForRead(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public IWriteTransaction OpenWriteTransaction(IOConnectionInfo ioc, bool useFileTransaction)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public string GetFilenameWithoutPathAndExt(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public string GetFileExtension(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public bool RequiresCredentials(IOConnectionInfo ioc)
{
return false;
throw GetDeprecatedMessage();
}
public void CreateDirectory(IOConnectionInfo ioc, string newDirName)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public IEnumerable<FileDescription> ListContents(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public FileDescription GetFileDescription(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public bool RequiresSetup(IOConnectionInfo ioConnection)
{
return false;
throw GetDeprecatedMessage();
}
public string IocToPath(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
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)
{
_app.ShowMessage(activity.Activity, GetDeprecatedMessage(), MessageSeverity.Error);
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)
{
return "File using deprecated Microsoft API. Please update.";
throw GetDeprecatedMessage();
}
public string CreateFilePath(string parent, string newFilename)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public IOConnectionInfo GetParentPath(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public IOConnectionInfo GetFilePath(IOConnectionInfo folderPath, string filename)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public bool IsPermanentLocation(IOConnectionInfo ioc)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
public bool IsReadOnly(IOConnectionInfo ioc, OptionalOut<UiStringKey> reason = null)
{
throw GetDeprecatedException();
throw GetDeprecatedMessage();
}
}
}

View File

@@ -12,6 +12,7 @@
<PackageReference Include="FluentFTP" Version="51.1.0" />
<PackageReference Include="MegaApiClient" Version="1.10.4" />
<PackageReference Include="Microsoft.Graph" Version="5.68.0" />
<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.67.1" />
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
<PackageReference Include="Xamarin.AndroidX.Core" Version="1.13.1.5" />

View File

@@ -138,8 +138,7 @@ namespace keepass2android
{
continue;
}
if (string.Equals(host, otherHost, StringComparison.OrdinalIgnoreCase) ||
host.EndsWith("." + otherHost, StringComparison.OrdinalIgnoreCase))
if (host.IndexOf(otherHost, StringComparison.InvariantCultureIgnoreCase) > -1)
{
pgResults.AddEntry(entry, false);
}

View File

@@ -4,7 +4,6 @@ using Android.Content;
using Android.OS;
using Android.Widget;
using Java.Net;
using KeePass.Util;
using KeePassLib.Serialization;
using keepass2android.Io;
@@ -95,12 +94,15 @@ namespace keepass2android
}
if ((resultCode == Result.Canceled) && (data != null) && (data.HasExtra("EXTRA_ERROR_MESSAGE")))
{
ShowErrorToast(data.GetStringExtra("EXTRA_ERROR_MESSAGE"));
ShowToast(data.GetStringExtra("EXTRA_ERROR_MESSAGE"));
}
if (resultCode == Result.Ok)
{
Kp2aLog.Log("FileSelection returned "+data.DataString);
//TODO: don't try to extract filename if content URI
string filename = IntentToFilename(data);
Kp2aLog.Log("FileSelection returned filename " + filename);
if (filename != null)
{
if (filename.StartsWith("file://"))
@@ -148,7 +150,7 @@ namespace keepass2android
protected abstract void StartFileChooser(string path, int requestCode, bool isForSave);
protected abstract void ShowErrorToast(string text);
protected abstract void ShowToast(string text);
protected abstract void ShowInvalidSchemeMessage(string dataString);
@@ -206,7 +208,7 @@ namespace keepass2android
{
return () =>
{
ShowErrorToast(_app.GetResourceString(UiStringKey.ErrorOcurred) + " " + ExceptionUtil.GetErrorMessage(e));
ShowToast(_app.GetResourceString(UiStringKey.ErrorOcurred) + " " + e.Message);
ReturnCancel();
};
}

View File

@@ -1,25 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace KeePass.Util
{
public class ExceptionUtil
{
public static string GetErrorMessage(Exception e)
{
string errorMessage = e.Message;
if (e is Java.Lang.Exception javaException)
{
errorMessage = javaException.LocalizedMessage ?? javaException.Message ?? errorMessage;
}
return errorMessage;
}
}
}

View File

@@ -5,7 +5,6 @@ using System.Security.Cryptography;
using System.Text;
using Android.App;
using Android.Content;
using KeePass.Util;
using KeePassLib.Cryptography;
using KeePassLib.Serialization;
using KeePassLib.Utility;
@@ -66,7 +65,7 @@ namespace keepass2android
}
catch (Exception e)
{
Finish(false, ExceptionUtil.GetErrorMessage(e));
Finish(false, e.Message);
}
}

View File

@@ -90,12 +90,9 @@ namespace keepass2android
PwDatabase pwDatabase = new PwDatabase();
IFileStorage fileStorage = _app.GetFileStorage(iocInfo);
Kp2aLog.Log("LoadData: Retrieving stream");
Stream s = databaseData ?? fileStorage.OpenFileForRead(iocInfo);
Kp2aLog.Log("LoadData: GetCurrentFileVersion");
var fileVersion = _app.GetFileStorage(iocInfo).GetCurrentFileVersionFast(iocInfo);
Kp2aLog.Log("LoadData: PopulateDatabaseFromStream");
PopulateDatabaseFromStream(pwDatabase, s, iocInfo, compositeKey, status, databaseFormat);
Stream s = databaseData ?? fileStorage.OpenFileForRead(iocInfo);
var fileVersion = _app.GetFileStorage(iocInfo).GetCurrentFileVersionFast(iocInfo);
PopulateDatabaseFromStream(pwDatabase, s, iocInfo, compositeKey, status, databaseFormat);
LastFileVersion = fileVersion;
status.UpdateSubMessage("");

View File

@@ -10,7 +10,6 @@ using Com.Keepassdroid.Database.Exception;
#endif
using Com.Keepassdroid.Database.Save;
using Java.Util;
using KeePass.Util;
using KeePassLib;
using KeePassLib.Cryptography;
using KeePassLib.Cryptography.Cipher;
@@ -83,14 +82,15 @@ namespace keepass2android
catch (Java.IO.FileNotFoundException e)
{
throw new FileNotFoundException(
ExceptionUtil.GetErrorMessage(e), e);
e.Message, e);
}
catch (Java.Lang.Exception e)
{
if (e.Message == "Invalid key!")
throw new InvalidCompositeKeyException();
throw new Exception(ExceptionUtil.GetErrorMessage(e) ??
e.GetType().Name, e);
throw new Exception(e.LocalizedMessage ??
e.Message ??
e.GetType().Name, e);
}
HashOfLastStream = hashingStream.Hash;

View File

@@ -6,7 +6,6 @@ using Android.App;
using Android.Content;
using KeePassLib.Serialization;
using keepass2android.Io;
using KeePass.Util;
namespace keepass2android
{
@@ -110,7 +109,7 @@ namespace keepass2android
catch (Exception e)
{
Kp2aLog.LogUnexpectedError(e);
Finish(false, ExceptionUtil.GetErrorMessage(e));
Finish(false, e.Message);
}
}

View File

@@ -21,7 +21,6 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Android.App;
using KeePass.Util;
using keepass2android.database.edit;
using KeePassLib;
using KeePassLib.Keys;
@@ -104,10 +103,10 @@ namespace keepass2android
}
catch (AggregateException e)
{
string message = ExceptionUtil.GetErrorMessage(e);
string message = e.Message;
foreach (var innerException in e.InnerExceptions)
{
message = ExceptionUtil.GetErrorMessage(innerException);
message = innerException.Message;
// Override the message shown with the last (hopefully most recent) inner exception
Kp2aLog.LogUnexpectedError(innerException);
}
@@ -117,14 +116,14 @@ namespace keepass2android
catch (DuplicateUuidsException e)
{
Kp2aLog.Log(e.ToString());
Finish(false, _app.GetResourceString(UiStringKey.DuplicateUuidsError) + " " + ExceptionUtil.GetErrorMessage(e) + _app.GetResourceString(UiStringKey.DuplicateUuidsErrorAdditional), false, Exception);
Finish(false, _app.GetResourceString(UiStringKey.DuplicateUuidsError) + " " + e.Message + _app.GetResourceString(UiStringKey.DuplicateUuidsErrorAdditional), false, Exception);
return;
}
catch (Exception e)
{
if (!(e is InvalidCompositeKeyException))
Kp2aLog.LogUnexpectedError(e);
Finish(false, _app.GetResourceString(UiStringKey.ErrorOcurred) + " " + (ExceptionUtil.GetErrorMessage(e) ?? (e is FileNotFoundException ? _app.GetResourceString(UiStringKey.FileNotFound) : "")), false, Exception);
Finish(false, _app.GetResourceString(UiStringKey.ErrorOcurred) + " " + (e.Message ?? (e is FileNotFoundException ? _app.GetResourceString(UiStringKey.FileNotFound) : "")), false, Exception);
return;
}
@@ -138,7 +137,6 @@ namespace keepass2android
Database TryLoad(MemoryStream databaseStream)
{
Kp2aLog.Log("LoadDb: Copying database in memory");
//create a copy of the stream so we can try again if we get an exception which indicates we should change parameters
//This is not optimal in terms of (short-time) memory usage but is hard to avoid because the Keepass library closes streams also in case of errors.
//Alternatives would involve increased traffic (if file is on remote) and slower loading times, so this seems to be the best choice.
@@ -147,9 +145,8 @@ namespace keepass2android
workingCopy.Seek(0, SeekOrigin.Begin);
//reset stream if we need to reuse it later:
databaseStream.Seek(0, SeekOrigin.Begin);
Kp2aLog.Log("LoadDb: Ready to start loading");
//now let's go:
try
//now let's go:
try
{
Database newDb = _app.LoadDatabase(_ioc, workingCopy, _compositeKey, StatusLogger, _format, _makeCurrent);
Kp2aLog.Log("LoadDB OK");

View File

@@ -130,24 +130,24 @@ namespace keepass2android
if ( !String.IsNullOrEmpty(message) ) {
Kp2aLog.Log("OnFinish message: " + message);
if (makeDialog && ctx != null)
{
try
{
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ctx);
builder.SetMessage(message)
.SetPositiveButton(Android.Resource.String.Ok, (sender, args) => ((Dialog)sender).Dismiss())
.Show();
{
try
{
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ctx);
builder.SetMessage(message)
.SetPositiveButton(Android.Resource.String.Ok, (sender, args) => ((Dialog)sender).Dismiss())
.Show();
}
catch (Exception)
{
Toast.MakeText(ctx, message, ToastLength.Long).Show();
}
}
{
Toast.MakeText(ctx, message, ToastLength.Long).Show();
}
}
else
Toast.MakeText(ctx ?? Application.Context, message, ToastLength.Long).Show();
}
}
}
}
}

View File

@@ -29,7 +29,6 @@ using KeePassLib.Utility;
using keepass2android.Io;
using Debug = System.Diagnostics.Debug;
using Exception = System.Exception;
using KeePass.Util;
namespace keepass2android
{
@@ -188,7 +187,7 @@ namespace keepass2android
}
*/
Kp2aLog.LogUnexpectedError(e);
Finish(false, ExceptionUtil.GetErrorMessage(e));
Finish(false, e.Message);
return;
}
}
@@ -223,8 +222,8 @@ namespace keepass2android
catch (Exception e)
{
Kp2aLog.LogUnexpectedError(e);
Kp2aLog.Log("Error in worker thread of SaveDb: " + ExceptionUtil.GetErrorMessage(e));
Finish(false, ExceptionUtil.GetErrorMessage(e));
Kp2aLog.Log("Error in worker thread of SaveDb: " + e);
Finish(false, e.Message);
}
});
@@ -234,7 +233,7 @@ namespace keepass2android
{
Kp2aLog.LogUnexpectedError(e);
Kp2aLog.Log("Error starting worker thread of SaveDb: "+e);
Finish(false, ExceptionUtil.GetErrorMessage(e));
Finish(false, e.Message);
}
}

View File

@@ -1,25 +0,0 @@
#!/bin/bash
set -e
#unset ANDROID_NDK_HOME ANDROID_NDK
pushd ../java/
pushd JavaFileStorageTest-AS
./gradlew assemble
popd
pushd KP2ASoftkeyboard_AS
./gradlew assemble
popd
pushd Keepass2AndroidPluginSDK2
./gradlew assemble
popd
pushd KP2AKdbLibrary
./gradlew assemble
popd
popd

View File

@@ -1,6 +0,0 @@
#!/bin/bash
set -e
pushd ../java/argon2
ndk-build
popd

View File

@@ -1,29 +0,0 @@
## Setup build environment
* install Android SDK
* install Android NDK
* install dotnet8
```
#from https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-8.0.407-linux-x64-binaries
wget https://download.visualstudio.microsoft.com/download/pr/9d07577e-f7bc-4d60-838d-f79c50b5c11a/459ef339396783db369e0432d6dc3d7e/dotnet-sdk-8.0.407-linux-x64.tar.gz
mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-8.0.407-linux-x64.tar.gz -C $HOME/dotnet
export DOTNET_ROOT=$HOME/dotnet
export PATH=$PATH:$HOME/dotnet
```
## Build Keepass2Android
```
git clone --recurse-submodules https://github.com/PhilippC/keepass2android.git
cd keepass2android/src/build-scripts
./build-java.sh && ./build-native.sh
cd ..
cp Kp2aBusinessLogic/Io/DropboxFileStorageKeysDummy.cs Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs
cd keepass2android-app
ln -s Manifests/AndroidManifest_debug.xml AndroidManifest.xml
dotnet workload restore
dotnet restore
dotnet build
```

View File

@@ -41,8 +41,7 @@ dependencies {
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:7.0.0'
implementation 'com.dropbox.core:dropbox-android-sdk:7.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'

View File

@@ -7,7 +7,6 @@ import com.dropbox.core.DbxOAuth1Upgrader;
import com.dropbox.core.DbxRequestConfig;
import com.dropbox.core.InvalidAccessTokenException;
import com.dropbox.core.android.Auth;
import com.dropbox.core.json.JsonReadException;
import com.dropbox.core.oauth.DbxCredential;
import com.dropbox.core.v2.DbxClientV2;
@@ -155,7 +154,7 @@ public class DropboxV2Storage extends JavaFileStorageBase
{
if ((previousFileVersion == null) || (previousFileVersion.equals("")))
return false;
path = removeProtocol(path);
path = removeProtocol(path);
try {
Metadata entry = dbxClient.files().getMetadata(path);
return !String.valueOf(entry.hashCode()) .equals(previousFileVersion);

View File

@@ -304,11 +304,6 @@ public class WebDavStorage extends JavaFileStorageBase {
//relative path:
e.path = buildPathFromHref(parentPath, r.href);
}
if ( (parentPath.indexOf("@") != -1) && (e.path.indexOf("@") == -1))
{
//username/password not contained in .href response. Add it back from parentPath:
e.path = parentPath.substring(0, parentPath.indexOf("@")+1) + e.path.substring(e.path.indexOf("://")+3);
}
if ((depth == 1) && e.isDirectory)
{

View File

@@ -113,15 +113,4 @@ extends Activity implements JavaFileStorage.FileStorageSetupActivity {
return state;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
MainActivity.storageToTest.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
}
}

View File

@@ -147,7 +147,6 @@ import java.util.List;
//import keepass2android.javafilestorage.DropboxCloudRailStorage;
import keepass2android.javafilestorage.DropboxV2Storage;
import keepass2android.javafilestorage.GoogleDriveAppDataFileStorage;
import keepass2android.javafilestorage.GoogleDriveFullFileStorage;
import keepass2android.javafilestorage.ICertificateErrorHandler;
import keepass2android.javafilestorage.JavaFileStorage;
import keepass2android.javafilestorage.JavaFileStorage.FileEntry;
@@ -548,7 +547,7 @@ public class MainActivity extends Activity implements JavaFileStorage.FileStorag
//storageToTest = new GoogleDriveAppDataFileStorage();
/*storageToTest = new WebDavStorage(new ICertificateErrorHandler() {
storageToTest = new WebDavStorage(new ICertificateErrorHandler() {
@Override
public boolean onValidationError(String error) {
return false;
@@ -559,11 +558,10 @@ public class MainActivity extends Activity implements JavaFileStorage.FileStorag
return false;
}
});
*/
//storageToTest = new DropboxV2Storage(ctx,"4ybka4p4a1027n6", "1z5lv528un9nre8", !simulateRestart);
//storageToTest = new DropboxFileStorage(ctx,"4ybka4p4a1027n6", "1z5lv528un9nre8", !simulateRestart);
//storageToTest = new DropboxAppFolderFileStorage(ctx,"ax0268uydp1ya57", "3s86datjhkihwyc", true);
storageToTest = new GoogleDriveFullFileStorage();
return storageToTest;
@@ -582,8 +580,6 @@ public class MainActivity extends Activity implements JavaFileStorage.FileStorag
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

View File

@@ -356,13 +356,7 @@ public class KP2AKeyboard extends InputMethodService
pFilter.addAction("android.intent.action.PACKAGE_ADDED");
pFilter.addAction("android.intent.action.PACKAGE_REPLACED");
pFilter.addAction("android.intent.action.PACKAGE_REMOVED");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerReceiver(mPluginManager, pFilter, RECEIVER_EXPORTED);
}
else
{
registerReceiver(mPluginManager, pFilter);
}
registerReceiver(mPluginManager, pFilter);
LatinIMEUtil.GCUtils.getInstance().reset();
@@ -381,28 +375,16 @@ public class KP2AKeyboard extends InputMethodService
// register to receive ringer mode changes for silent mode
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerReceiver(mSilentModeReceiver, filter, RECEIVER_EXPORTED);
}
else
{
registerReceiver(mSilentModeReceiver, filter);
}
registerReceiver(mSilentModeReceiver, filter);
prefs.registerOnSharedPreferenceChangeListener(this);
//check if we have KP2A data available:
mHadKp2aData = mShowKp2aKeyboard = KeyboardData.hasData();
mHadKp2aData = mShowKp2aKeyboard = keepass2android.kbbridge.KeyboardData.hasData();
mClearKeyboardReceiver = new ClearKeyboardBroadcastReceiver();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)), RECEIVER_EXPORTED);
}
else
{
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
}
Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
android.util.Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
}

View File

@@ -19,7 +19,7 @@
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Title for Latin keyboard -->
<string name="english_ime_name">Keepass2Android-Tastatur</string>
<string name="english_ime_name">KeePass2Android-Tastatur</string>
<!-- Title for Latin keyboard settings activity / dialog -->
<string name="english_ime_settings">Android-Tastatureinstellungen</string>
<!-- Title for Latin keyboard input options dialog -->
@@ -49,7 +49,7 @@
<!-- Description for text prediction -->
<string name="prediction_summary">Automatische Vervollständigung während der Eingabe aktivieren</string>
<!-- Dialog title for auto complete choices -->
<string name="auto_complete_dialog_title">Autovervollständigung</string>
<string name="auto_complete_dialog_title">Automatische. Vervollständigung </string>
<!-- Option to enable text prediction in landscape -->
<string name="prediction_landscape">Textfeld vergrößern</string>
<!-- Description for text prediction -->
@@ -62,7 +62,7 @@
<string name="auto_punctuate">Autom. Zeichensetzung</string>
<!-- Description for auto punctuate -->
<!-- Option to enable quick fixes -->
<string name="quick_fixes">Schnelle Korrektur</string>
<string name="quick_fixes">Schnelle Fixierung</string>
<!-- Description for quick fixes -->
<string name="quick_fixes_summary">Korrigiert gängige Tippfehler</string>
<!-- Option to enable showing suggestions -->
@@ -112,7 +112,7 @@
<!-- Tip to long press on typed word to add to dictionary -->
<string name="tip_add_to_dictionary">Lange auf das Wort ganz links außen drücken, um es zum Wörterbuch hinzuzufügen</string>
<!-- Instruction to touch the bubble to continue -->
<string name="touch_to_continue">Diesen Hinweis antippen, um fortzufahren.»</string>
<string name="touch_to_continue">Diesen Hinweis berühren, um fortzufahren.»</string>
<!-- Instruction to touch the bubble to start typing -->
<string name="touch_to_finish">Hier berühren, um diesen Hinweis zu schließen und mit dem Tippen zu beginnen!</string>
<!-- Tutorial tip 1 - The keyboard opens any time you touch a text field -->
@@ -138,7 +138,7 @@
<!-- Label for "switch to symbols" key. Must be short to fit on key! -->
<string name="label_symbol_key">\?123</string>
<!-- Label for "switch to numeric" key. Must be short to fit on key! -->
<string name="label_phone_key">123</string>
<string name="label_phone_key">Nummer</string>
<!-- Label for "switch to alphabetic" key. Must be short to fit on key! -->
<string name="label_alpha_key">ABC</string>
<!-- Label for ALT modifier key. Must be short to fit on key! -->
@@ -161,7 +161,7 @@
"Swipe across keyboard to speak"). Also shown when enabling settings. -->
<string name="voice_hint_dialog_message">Um die Spracheingabe zu verwenden, drücken Sie die Mikrofontaste oder ziehen Sie Ihren Finger über die Bildschirmtastatur.</string>
<!-- Short message to tell the user the system is ready for them to speak. -->
<string name="voice_listening">Jetzt sprechen</string>
<string name="voice_listening">Sprechen Sie jetzt</string>
<!-- Short message shown after the user finishes speaking. -->
<string name="voice_working">Vorgang läuft</string>
<!-- Short message shown before the user should speak. -->
@@ -186,7 +186,7 @@
<!-- Short hint shown in candidate view to explain voice input. -->
<string name="voice_swipe_hint"><b>„Hinweis:“</b>„ Ziehen Sie zum Sprechen den Finger über die Tastatur.“</string>
<!-- Short hint shown in candidate view to explain that user can speak punctuation. -->
<string name="voice_punctuation_hint"><b>Hinweis: </b>Versuche beim nächsten Mal, Satzzeichen wie „Punkt“, „Komma“ oder „Fragezeichen“ per Sprachbefehl einzugeben.</string>
<string name="voice_punctuation_hint"><b>Hinweis: </b>Versuchen Sie beim nächsten Mal, Satzzeichen wie „Punkt“, „Komma“ oder „Fragezeichen“ per Sprachbefehl einzugeben.</string>
<!-- Label on button to stop recognition. Must be short to fit on button. -->
<string name="cancel">Abbrechen</string>
<!-- Label on button when an error occurs -->
@@ -216,7 +216,7 @@
<!-- appears above image showing the user to click on a TextView to show the IME -->
<string name="open_the_keyboard"><font size="17"><b>„Tastatur öffnen“\n</b></font><font size="3">\n</font>„Berühren Sie ein beliebiges Textfeld.“</string>
<!-- appears above the image showing the back button used to close the keyboard -->
<string name="close_the_keyboard"><font size="17"><b>Tastatur schließen\n</b></font><font size="3">\n</font>Drücken die Zurück-Taste.</string>
<string name="close_the_keyboard"><font size="17"><b>Tastatur schließen\n</b></font><font size="3">\n</font>Drücken Sie die Zurück-Taste.</string>
<!-- appears above image showing how to use touch and hold -->
<string name="touch_and_hold"><font size="17"><b>„Für Optionen eine Taste berühren und gedrückt halten“\n</b></font><font size="3">\n</font>„Greifen Sie auf Satzzeichen und Akzente zu.“</string>
<!-- appears above image showing how to access keyboard settings -->

View File

@@ -64,6 +64,8 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
@Override
public boolean onCreate() {
Log.d("KP2A_FC_P", "onCreate");
BaseFileProviderUtils.registerProviderInfo(_ID,
getAuthority());
@@ -220,12 +222,12 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
try
{
checkConnection(uri);
if (Utils.doLog()) Log.d("KP2A_FC_P", "checking connection for " + uri + " ok.");
Log.d("KP2A_FC_P", "checking connection for " + uri + " ok.");
return null;
}
catch (Exception e)
{
if (Utils.doLog()) Log.d("KP2A_FC_P","Check connection failed with: " + e.toString());
Log.d("KP2A_FC_P","Check connection failed with: " + e.toString());
MatrixCursor matrixCursor = new MatrixCursor(BaseFileProviderUtils.CONNECTION_CHECK_CURSOR_COLUMNS);
RowBuilder newRow = matrixCursor.newRow();
@@ -253,7 +255,7 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
}
catch (FileNotFoundException ex)
{
if (Utils.doLog()) Log.d("KP2A_FC_P","File not found. Ignore.");
Log.d("KP2A_FC_P","File not found. Ignore.");
return;
}
@@ -274,8 +276,8 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
MatrixCursor matrixCursor = null;
String lastPathSegment = uri.getLastPathSegment();
if (Utils.doLog()) Log.d("KP2A_FC_P", "lastPathSegment:" + lastPathSegment);
Log.d("KP2A_FC_P", "lastPathSegment:" + lastPathSegment);
if (BaseFile.CMD_CANCEL.equals(lastPathSegment)) {
int taskId = ProviderUtils.getIntQueryParam(uri,
@@ -359,7 +361,7 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
} else if (BaseFile.CMD_CHECK_CONNECTION.equals(lastPathSegment))
{
if (Utils.doLog()) Log.d("KP2A_FC_P","Check connection...");
Log.d("KP2A_FC_P","Check connection...");
return getCheckConnectionCursor(uri);
}
@@ -468,7 +470,7 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
String displayName = getFileEntryCached(dirName).displayName;
newRow.add(displayName);
if (Utils.doLog()) Log.d(CLASSNAME, "Returning name " + displayName+" for " +dirName);
Log.d(CLASSNAME, "Returning name " + displayName+" for " +dirName);
}
}
@@ -688,7 +690,7 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
}
catch (Exception e)
{
if (Utils.doLog()) Log.d("KP2A_FC_P", "sortFiles() >> "+e);
Log.d("KP2A_FC_P", "sortFiles() >> "+e);
throw e;
}
}// sortFiles()
@@ -775,14 +777,14 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
path = removeTrailingSlash(path);
if (path.indexOf("://") == -1)
{
if (Utils.doLog()) Log.d("KP2A_FC_P", "invalid path: " + path);
Log.d("KP2A_FC_P", "invalid path: " + path);
return null;
}
String pathWithoutProtocol = path.substring(path.indexOf("://") + 3);
int lastSlashPos = path.lastIndexOf("/");
if (pathWithoutProtocol.indexOf("/") == -1)
{
if (Utils.doLog()) Log.d("KP2A_FC_P", "parent of " + path + " is null");
Log.d("KP2A_FC_P", "parent of " + path + " is null");
return null;
}
else
@@ -791,7 +793,7 @@ public abstract class Kp2aFileProvider extends BaseFileProvider {
if (params != null) {
parent += params;
}
if (Utils.doLog()) Log.d("KP2A_FC_P", "parent of " + path +" is " + parent);
Log.d("KP2A_FC_P", "parent of " + path +" is " + parent);
return parent;
}
}

View File

@@ -56,7 +56,7 @@
<string name="afc_title_sort_by">Sortieren nach…</string>
<string name="afc_yesterday">Gestern</string>
<plurals name="afc_title_choose_directories">
<item quantity="one">Ordner wählen…</item>
<item quantity="one">Ordner wählen </item>
<item quantity="other">Verzeichnisse wählen</item>
</plurals>
<plurals name="afc_title_choose_files">
@@ -64,7 +64,7 @@
<item quantity="other">Dateien wählen …</item>
</plurals>
<plurals name="afc_title_choose_files_directories">
<item quantity="one">Datei/Ordner wählen…</item>
<item quantity="one">Datei/Ordner wählen </item>
<item quantity="other">Dateien/Ordner wählen …</item>
</plurals>
</resources>

View File

@@ -56,15 +56,15 @@
<string name="afc_title_sort_by">Ordina per…</string>
<string name="afc_yesterday">Ieri</string>
<plurals name="afc_title_choose_directories">
<item quantity="one">Scegli cartella...</item>
<item quantity="other">Scegli le cartelle...</item>
<item quantity="one">Scegli la cartella&#8230;</item>
<item quantity="other">Scegli le cartelle&#8230;</item>
</plurals>
<plurals name="afc_title_choose_files">
<item quantity="one">Scegli il file</item>
<item quantity="other">Scegli i file</item>
<item quantity="one">Scegli il file&#8230;</item>
<item quantity="other">Scegli i file&#8230;</item>
</plurals>
<plurals name="afc_title_choose_files_directories">
<item quantity="one">Scegli file/cartella</item>
<item quantity="other">Scegli file/cartelle</item>
<item quantity="one">Scegli file/ cartella&#8230;</item>
<item quantity="other">Scegli file/ cartelle&#8230;</item>
</plurals>
</resources>

View File

@@ -55,19 +55,4 @@
<string name="afc_title_size">Dimensiune</string>
<string name="afc_title_sort_by">Sortează după…</string>
<string name="afc_yesterday">Ieri</string>
<plurals name="afc_title_choose_directories">
<item quantity="one">Alege dosarul…</item>
<item quantity="few">Alege dosarele…</item>
<item quantity="other">Alege dosarele…</item>
</plurals>
<plurals name="afc_title_choose_files">
<item quantity="one">Alege fișierul…</item>
<item quantity="few">Alege fișierele…</item>
<item quantity="other">Alege fișierele…</item>
</plurals>
<plurals name="afc_title_choose_files_directories">
<item quantity="one">Alege fișierul/dosarul…</item>
<item quantity="few">Alege fișierele/dosarele…</item>
<item quantity="other">Alege fișierele/dosarele…</item>
</plurals>
</resources>

View File

@@ -1,24 +0,0 @@
using Android.Content.PM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace keepass2android
{
[Activity(Label = AppNames.AppName,
MainLauncher = false,
Theme = "@style/Kp2aTheme_BlueNoActionBar",
Exported = true)]
///For autofill, we sometimes need to pass an intent to an inline presentation which never gets fired. We use this as a dummy activity.
public class NullActivity: Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
Kp2aLog.Log("NullActivity.OnCreate - this is unexpected.");
base.OnCreate(savedInstanceState);
Finish();
}
}
}

View File

@@ -1,81 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/switch_ime_text" />
<Button
android:id="@+id/btn_reopen"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/switch_ime_reopen" />
<Button
android:id="@+id/btn_cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/cancel" />
<LinearLayout android:orientation="vertical"
android:paddingTop="64dp"
android:id="@+id/settings_notes_container"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:paddingTop="12dp"
android:id="@+id/note_kp2a_switch_rooted"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/autoswitch_enabled_but_not_setup"
/>
<TextView
android:paddingTop="12dp"
android:id="@+id/note_AutoFillTotp_prefs_ActivateKeyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/switch_keyboard_for_totp_enabled"
/>
<TextView
android:paddingTop="12dp"
android:id="@+id/note_UseKp2aKeyboardInKp2a"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/switch_keyboard_inside_kp2a_enabled"
/>
<TextView
android:id="@+id/note_OpenKp2aKeyboardAutomatically"
android:paddingTop="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/switch_keyboard_on_search_enabled"
/>
<Button
style="?attr/materialButtonOutlinedStyle"
android:id="@+id/btn_open_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/IconVisibilityInfo_Android8_btnSettings" />
</LinearLayout>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (KP2A složka)</string>
<string name="filestoragehelp_dropboxKP2A">Pokud nechcete, aby měl KP2A plný přístup k vašemu Dropbox účtu, může vybrat tuto možnost. Bude vyžadován pouze přístup ke složce Apps/Keepass2Android. Toto je vhodné zejména při vytváření nové databáze. Pokud již máte databázi, zvolte na tuto možnost pro vytvoření složky, poté umístěte soubor (z PC) do této složky a zvolte tuto možnost znovu pro otevření souboru.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Upozornění: Společnost Google omezuje přístup k Disku Google z aplikací pro stále více uživatelů. Pokud vestavěná implementace Disku Google nefunguje, použijte místo toho systémový výběr souborů a vyberte Disk Google tam!</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>
@@ -718,20 +717,6 @@
<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_12">
<item>Aktualizováno z Xamarin Android na .net 8</item>
<item>Aktualizováno na Target SDK 34</item>
<item>Aktualizováno na uživatelské rozhraní Material 3</item>
<item>Vylepšení automatického vyplňování pro práci s aplikacemi Compose</item>
<item>Oprava přiřazování názvů hostitelů v automatickém vyplňování a vyhledávání</item>
<item>Oprava problému s generátorem hesel</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Aktualizováno OneDrive SDK na verzi 5.68</item>
<item>Aktualizováno Dropbox SDK na verzi 7.0.0</item>
<item>Aktualizován Gradle, NewtonsoftJson, FluentFTP, MegaApiClient a okhttp</item>
<item>Oprava chyby ve výběru souborů WebDav</item>
</string-array>
<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>
@@ -1165,12 +1150,5 @@ První veřejné vydání
<string name="AutofillWarning_Intro">Chystáte se vložit přihlašovací údaje pro doménu \"%1$s\" do aplikace \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Pokud věříte že \"%2$s\" patří k \"%1$s\", nebo důvěřujete \"%2$s\" že nezneužije přihlašovací údaje (např. pokud se jedná o důvěryhodný prohlížeč), můžete pokračovat. Pokud tomu tak není, zrušte prosím tuto akci.</string>
<string name="AutofillWarning_trustAsBrowser">Přijmout vždy v \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Přepnout zpět po dokončení</string>
<string name="kp2a_switch_on_sendgodone_summary">Přepnout zpět při stisknutí tlačítka odeslat/pokračovat/ukončit</string>
<string name="qr_scanning_error_no_google_play_services">Skenování QR kódu vyžaduje služby Google Play. Nainstalujte nebo aktualizujte služby Google Play ve svém zařízení.</string>
<string name="english_ime_settings">Nastavení klávesnice Keepass2Android</string>
<string name="autoswitch_enabled_but_not_setup">Poznámka: Máte povoleno Aplikace - Nastavení - Přístup k heslu - Přepínání klávesnice - Automatické přepínání klávesnice, ale nezdá se, že je správně nakonfigurováno.</string>
<string name="switch_keyboard_for_totp_enabled">Poznámka: Máte povoleno Aplikace - Přístup k heslu - Služba automatického vyplňování - Automatické vyplňování pro položky TOTP. To může způsobit, že se toto okno zobrazí, když otevřete položku s TOTP.</string>
<string name="switch_keyboard_inside_kp2a_enabled">Poznámka: V aplikaci Keepass2Android jste povolili možnost Aplikace - Zabezpečení - Použít vestavěnou klávesnici. To může způsobit, že se toto okno zobrazí při otevření aplikace nebo úpravě položky.</string>
<string name="switch_keyboard_on_search_enabled">Poznámka: Máte povoleno Aplikace - Zabezpečení - Přístup k heslu - Přepínání klávesnice - Přepínání klávesnice. To může způsobit, že se toto okno zobrazí při vyhledávání položky z prohlížeče.</string>
</resources>

View File

@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="about_feedback">Feedback</string>
<string name="AboutText">Keepass2Android ist ein Passwortmanager, der KeePass 2.x-Datenbanken verwalten kann.</string>
<string name="AboutText">Keepass2Android ist ein Passwortmanager mit Lese- und Schreib-Zugriff auf KeePass 2.x Datenbanken.</string>
<string name="CreditsText">Die Benutzeroberfläche basiert auf einem Port von Keepassdroid (entwickelt von Brian Pellin) nach Mono for Android. Der Code für die Datenbank-Operationen nutzt eine angepasste Version einer Bibliothek aus KeePass (entwickelt von Dominik Reichl).
Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die Google durchgeführt und zur Verfügung gestellt hat; er wird nach den Bedingungen der Creative Commons 3.0 Attribution License genutzt.</string>
<string name="CreditsTextSFTP">SFTP-Unterstützung ist implementiert unter Verwendung der JSch-Bibliothekvmit BSD-Lizenz der Fa. JCraft Inc.</string>
<string name="CreditsTextSFTP">SFTP-Unterstützung ist implementiert unter Nutzung der JSch-Bibliothek (BSD-Lizenz), erstellt durch JCraft, Inc.</string>
<string name="CreditsIcons">Das Hammer-Icon wurde von John Caserta (Noun Project) erstellt. Das Pinguin-Icon wurde von Adriano Emerick (Noun Project) erstellt. Das Feder-Icon wurde von Jon Testa (Noun Project) erstellt. Das Apfel-Icon wurde von Ava Rowell (Noun Project) erstellt. Das Bild-Icon stammt von https://icons8.com/icon/5570/Picture.</string>
<string name="accept">Akzeptieren</string>
<string name="deny">Verweigern</string>
@@ -28,7 +28,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="application">Anwendung</string>
<string name="application_settings">Anwendungseinstellungen</string>
<string name="ShowGroupnameInSearchResult_title">Gruppennamen im Suchergebnis anzeigen</string>
<string name="ShowGroupnameInSearchResult_resume">Gruppennamen unter den Eintragstiteln im Suchergebnis anzeigen. Nützlich, wenn es mehrere Einträge mit demselben Namen gibt.</string>
<string name="ShowGroupnameInSearchResult_resume">Gruppennamen unter den Eintragstiteln im Suchergebnis anzeigen. Nützlich, wenn es mehrere Einträge mit dem selben Namen gibt.</string>
<string name="NavigationToGroupCompleted_message">Angezeigte Gruppe ist jetzt: %1$s</string>
<string name="AutofillDisabledQueriesPreference_title">Deaktivierte AutoFill-Ziele</string>
<string name="AutofillDisabledQueriesPreference_summary">Zeigt eine Liste von Apps und Webseiten, für die AutoFill deaktiviert ist.</string>
@@ -123,7 +123,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="entry_extra_strings">Zusätzliche Felder</string>
<string name="entry_binaries">Datei-Anhänge</string>
<string name="entry_history">Vorherige Versionen</string>
<string name="error_can_not_handle_uri">Keepass2Android kann diese URI nicht verarbeiten.</string>
<string name="error_can_not_handle_uri">Keepass2Android kann diese Adresse nicht verarbeiten.</string>
<string name="error_could_not_create_group">Fehler beim Erstellen der Gruppe.</string>
<string name="error_could_not_create_parent">Verzeichnis konnte nicht erstellt werden.</string>
<string name="error_database_exists">Diese Datei existiert bereits.</string>
@@ -164,7 +164,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="invalid_db_sig">Datenbank-Format wurde nicht erkannt.</string>
<string name="keyfile_does_not_exist">Schlüssel-Datei existiert nicht.</string>
<string name="no_keyfile_selected">Keine Schlüsseldatei ausgewählt.</string>
<string name="keyfile_is_empty">Schlüsseldatei ist leer.</string>
<string name="keyfile_is_empty">Schlüssel-Datei ist leer.</string>
<string name="length">Länge</string>
<string name="list_size_title">Größe der Gruppenliste</string>
<string name="list_size_summary">Schriftgröße in der Gruppenliste</string>
@@ -295,7 +295,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="TanExpiresOnUse_title">TAN verfällt bei Verwendung</string>
<string name="TanExpiresOnUse_summary">TAN-Einträge als abgelaufen markieren, wenn sie verwendet werden</string>
<string name="ShowUsernameInList_title">Benutzernamen in Liste anzeigen</string>
<string name="ShowUsernameInList_summary">Benutzernamen unter den Eintragstiteln anzeigen. Nützlich für mehrere Konten bei einem Dienst oder für TANs.</string>
<string name="ShowUsernameInList_summary">Zeige Benutzernamen unter den Titeln der Einträge. Hilfreich bei mehreren Accounts für einen Dienst oder bei TANs.</string>
<string name="RememberRecentFiles_title">Datenbanken merken</string>
<string name="RememberRecentFiles_summary">Dateinamen der bisher geöffneten Datenbanken speichern und im Bildschirm zum Öffnen der Datenbank anzeigen.</string>
<string name="NoDalVerification_title">Keine Digital-Asset-Link-Verifikation</string>
@@ -378,7 +378,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<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>
<string name="NoDonateOption_summary">Diese Einstellung ist ein Dankeschön an alle, die gespendet haben. Sie steht erst nach einer gewissen Zeit der Benutzung von Keepass2Android zur Verfügung.</string>
<string name="NoDonateOption_question">Ohne Spenden würde diese App nicht existieren und ständig verbessert werden! Wenn du noch nicht gespendet hast, erwäge bitte, dies jetzt zu tun</string>
<string name="NoDonateOption_question">Ohne Spenden gäbe es diese App nicht und sie könnte nicht ständig verbessert werden! Wenn Sie noch nicht gespendet haben, sollten Sie dies jetzt in Betracht ziehen.</string>
<string name="NoDonationReminder_title">Nie um eine Spende bitten</string>
<string name="NoDonationReminder_summary">Ich werde keinen Cent spenden oder habe bereits gespendet. Bitte niemals um eine Spende, nicht einmal am Geburtstag des Autors.</string>
<string name="UseOfflineCache_title">Datenbank-Caching</string>
@@ -642,7 +642,7 @@ Der Android Robot wird genutzt und wurde modifiziert basierend auf Arbeiten, die
<string name="FileReadOnlyTitle">Datenbank ist schreibgeschützt</string>
<string name="FileReadOnlyMessagePre">Keepass2Android hat die aktuelle Datenbank im schreibgeschützten Modus geöffnet.</string>
<string name="ReadOnlyReason_PreKitKat">Es scheint, dass die Datei von einer externen Anwendung aus geöffnet wurde. Über diesen Weg ist das Schreiben nicht möglich. Wenn Änderungen an der Datenbank vorgenommen werden sollen, bitte die Datenbank schließen und „Datenbank wechseln“ wählen. Danach die Datei über eine der verfügbaren Optionen öffnen, sofern möglich.</string>
<string name="ReadOnlyReason_ReadOnlyFlag">Datei ist schreibgeschützt. Dieses Attribut entfernen, wenn Änderungen an der Datenbank vorgenommen werden sollen.</string>
<string name="ReadOnlyReason_ReadOnlyFlag">Datei ist schreibgeschützt. Diese Attribut entfernen, wenn Änderungen an der Datenbank vorgenommen werden sollen.</string>
<string name="ReadOnlyReason_ReadOnlyKitKat">Das Speichern ist aufgrund von Einschränkungen, die in Android KitKat eingeführt wurden, nicht möglich. Wenn Änderungen an der Datenbank vorgenommen werden sollen, bitte die Datenbank schließen und „Datenbank wechseln“ wählen. Danach die Datei über die systeminterne Dateiauswahl öffnen.</string>
<string name="ReadOnlyReason_LocalBackup">Lokale Sicherungskopien können nicht bearbeitet werden. Du kannst über \"Datenbank-Einstellungen\" - \"Datenbank exportieren\" dieses Backup an einen anderen Ort exportieren und dann von dort öffnen. Dann kannst du auch wieder Änderungen vornehmen.</string>
<string name="AddCustomIcon">Icon aus Datei hinzufügen...</string>
@@ -716,20 +716,6 @@ 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_12">
<item>Von Xamarin Android auf .NET 8 upgegradet</item>
<item>Upgrade auf Target-SDK 34</item>
<item>Auf MUI 3 upgegradet</item>
<item>Verbessertes automatisches Ausfüllen damit Compose-Apps funktionieren</item>
<item>Hostnamen-vergleiche im automatischen Ausfüllen und der Suche gefixt</item>
<item>Probleme mit dem Passwort Generator behoben</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>OneDrive SDK auf Version 5.68 aktualisiert</item>
<item>Dropbox SDK auf Version 7.0.0 aktualisiert</item>
<item>Gradle, NewtonsoftJson, FluentFTP, MegaApiClient und okhttp aktualisiert</item>
<item>Bugfix in WebDav-Dateiauswahl</item>
</string-array>
<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>
@@ -1145,11 +1131,11 @@ Erstes öffentliches Release</string>
<string name="masterkey_infotext_head">Kennst du dein Master-Passwort?</string>
<string name="masterkey_infotext_main">Bitte beachte, dass du deine Datenbank ohne den Hauptschlüssel nicht öffnen kannst. Es gibt keine Möglichkeit, das Hauptpasswort „zurückzusetzen“.</string>
<string name="masterkey_infotext_fingerprint_note">Bitte auch bedenken, dass das Biometrische Entsperren über das Speichern des Hauptschlüssels im sicheren Speicher von Android funktioniert. Dieser Speicher kann von Android jederzeit gelöscht werden, z. B. wenn ein neuer Fingerabdruck in den Systemeinstellungen hinzugefügt wird. Daher sich nicht auf das biometrische Entsperren verlassen, sondern sich bitte das eigene Hauptpasswort merken!</string>
<string name="backup_infotext_head">Ist deine Datenbank gesichert?</string>
<string name="backup_infotext_head">Gibt es eine Sicherung der Datenbank?</string>
<string name="backup_infotext_main">Keepass2Android speichert die Passwörter in einer Datei an einem frei wählbarem Speicherort.Ist sichergestellt, dass die Datei auch dann noch verfügbar ist, wenn das Telefon verloren geht oder gestohlen wird, oder wenn die Datei zerstört oder gelöscht wird? Bitte sicherstellen, dass immer eine aktuelle Kopie an einem sichern Ort aufbewahrt wird!</string>
<string name="backup_infotext_note">Um jetzt eine Sicherung zu erstellen, nach %1$s &gt; %2$s &gt; %3$s gehen.</string>
<string name="emergency_infotext_head">Hast du für Notfälle vorgesorgt?</string>
<string name="emergency_infotext_main">Hast du je darüber nachgedacht, was passiert, wenn du nicht mehr auf deine Passwort-Datenbank zugreifen kannst? Was, wenn du einen Unfall hast? Ein bewährtes Verfahren ist, einer vertrauenswürdigen Person dein Masterpasswort für Notfälle mitzuteilen. Ansonsten wird niemand auf deine Passwörter Zugriff haben.</string>
<string name="emergency_infotext_head">Ist man auf Notfälle vorbereitet?</string>
<string name="emergency_infotext_main">Wurde schon einmal darüber nachgedacht, was passiert, wenn man keinen Zugriff mehr zu seiner Passwortdatenbank hat? Was ist, wenn man einen Unfall hat? Es ist eine vernünftige Maßnahme, den Hauptschlüssel für Notfälle an eine vertrauenswürdige Person weiterzugeben. Andernfalls hat niemand Zugang zu den Passwörtern.</string>
<string name="no_secure_display">Der aktuell gültige Bildschirm ist nicht als sicher eingestuft. Das bedeutet, dass Bildschirmfotos von anderen Anwendungen erstellt werden könnten. Keepass2Android ist so konfiguriert, dass sensible Informationen nur auf sicheren Bildschirmen angezeigt werden. Bitte zu einem sicheren Bildschirm wechseln (z. B. durch Abklemmen eines HDMI-Monitors) oder die App-Einstellungen ändern.</string>
<string name="disable_secure_screen_check">Diese Nachricht deaktivieren</string>
<string name="switch_ime_text">Bitte die Keepass2Android-Tastatur aktivieren.</string>
@@ -1158,9 +1144,5 @@ Erstes öffentliches Release</string>
<string name="AutofillWarning_Intro">Hiermit werden Anmeldeinformationen für die Domäne „%1$s“ in die Anwendung „%2$s“ eingefügt.</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Wenn darauf vertraut wird, dass „%2$s“ zu „%1$s“ gehört, oder wenn darauf vertraut wird, dass die App „%2$s“ die Anmeldeinformationen nicht missbraucht (z. B. weil es sich um eine vertrauenswürdige Browser-App handelt), kann fortgefahren werden. Falls nicht, bitte abbrechen.</string>
<string name="AutofillWarning_trustAsBrowser">Für „%1$s“ immer akzeptieren</string>
<string name="kp2a_switch_on_sendgodone">Tastatur zurückwechseln wenn fertig</string>
<string name="kp2a_switch_on_sendgodone_summary">Beim Drücken von Senden/Los/Fertig zurückschalten</string>
<string name="qr_scanning_error_no_google_play_services">QR-Code-Scannen erfordert Google Play-Dienste. Bitte installiere oder aktualisiere Google Play-Dienste auf deinem Gerät.</string>
<string name="english_ime_settings">Android-Tastatureinstellungen</string>
<string name="autoswitch_enabled_but_not_setup">Notiz: Du hast Einstellungen - Anwendung - Passwortzugriff - Wechsel der Eingabemethode - Auto-Umschalten der Tastatur eingeschaltet, aber sieht aus als würde es nicht funktionieren</string>
</resources>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="about_feedback">Σχόλια</string>
<string name="AboutText">Το KP2A είναι ένας διαχειριστής συνθηματικών, που παρέχει δυνατότητα ανάγνωσης / εγγραφής σε βάσεις δεδομένων του KeePass 2.x στο Android.</string>
<string name="AboutText">Το KP2A είναι ένας διαχειριστής συνθηματικών, που παρέχει την δυνατότητα ανάγνωσης/εγγραφής σε βάσεις δεδομένων του KeePass 2.x στο Android.</string>
<string name="CreditsText">Το περιβάλλον εργασίας χρήστη βασίζεται σε μια έκδοση του KeepassDroid που αναπτύχθηκε από τον Brian Pellin. Ο κώδικας για τις λειτουργίες της βάσης δεδομένων βασίζεται στο KeePass του Dominik Reichl. Το ρομπότ Android αναπαράγεται ή τροποποιείται από εργασία που δημιουργήθηκε και διαμοιράστηκε από την Google και χρησιμοποιείται σύμφωνα με τους όρους που περιγράφονται στο το Creative Commons 3.0 Attribution License.</string>
<string name="CreditsTextSFTP">Το SFTP υποστηρίζεται με χρήση της βιβλιοθήκης JSch με άδεια BSD που δημιουργήθηκε από τη JCraft, Inc.</string>
<string name="CreditsIcons">Το εικονίδιο Σφυρί δημιουργήθηκε από τον John Caserta, το εικονίδιο Πιγκουίνος δημιουργήθηκε από τον Adriano Emerick, το εικονίδιο Φτερό δημιουργήθηκε από τον Jon Testa και το εικονίδιο της Apple δημιουργήθηκε από την Ava Rowell. Όλα τα προηγούμενα εικονίδια είναι από το Noun Project. Το εικονίδιο της Εικόνας είναι από το https://icons8.com/icon/5570/Picture.</string>
@@ -401,14 +401,6 @@
<string name="ShowSeparateNotifications_summary">Εμφάνιση χωριστών ειδοποιήσεων για την αντιγραφή του ονόματος χρήστη και του συνθηματικού στο πρόχειρο και ενεργοποίηση του πληκτρολογίου.</string>
<string name="AccServiceAutoFill_prefs">Αυτόματη συμπλήρωση υπηρεσίας προσβασιμότητας</string>
<string name="AutoFill_prefs">Λειτουργία αυτόματης συμπλήρωσης</string>
<string name="AutoFillTotp_prefs_ShowNotification_summary">Κατά την αυτόματη συμπλήρωση μιας καταχώρισης με TOTP, εμφανίστε την ειδοποίηση με ένα κουμπί Αντιγραφή TOTP</string>
<string name="AutoFillTotp_prefs_ShowNotification_title">Εμφάνιση ειδοποίησης καταχώρισης</string>
<string name="AutoFillTotp_prefs_title">Αυτόματη συμπλήρωση για καταχωρίσεις TOTP</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_title">Αντιγραφή TOTP στο πρόχειρο</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_summary">Κατά την αυτόματη συμπλήρωση μιας καταχώρισης με TOTP, αντιγράφει το TOTP στο πρόχειρο</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_summary">Κατά την αυτόματη συμπλήρωση μιας καταχώρισης με TOTP, ενεργοποιήστε το ενσωματωμένο πληκτρολόγιο. Το πληκτρολόγιο έχει ένα κουμπί TOTP.</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_title">Ενεργοποίηση ενσωματωμένου πληκτρολογίου</string>
<string name="TotpCopiedToClipboard">Αντιγράφηκε το TOTP στο πρόχειρο</string>
<string name="ShowKp2aKeyboardNotification_title">Ειδοποίηση πληκτρολογίου KP2A</string>
<string name="ShowKp2aKeyboardNotification_summary">Κάντε προσβάσιμη την πλήρη καταχώριση μέσω του πληκτρολογίου KP2A (συνιστάται).</string>
<string name="OpenKp2aKeyboardAutomatically_title">Εναλλαγή πληκτρολογίου</string>
@@ -546,7 +538,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (φάκελος KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Αν δεν θέλεις να δώσεις στο Keepass2Android πλήρη πρόσβαση στο Dropbox, μπορείς να διαλέξεις αυτή την επιλογή. Θα ζητήσει πρόσβαση μόνο στο φάκελο Apps/Keepass2Android. Ταιριάζει ειδικά στη δημιουργία νέας βάσης δεδομένων. Αν ήδη έχεις μια βάση δεδομένων, διάλεξε αυτή την επιλογή για να δημιουργήσεις το φάκελο, μετά τοποθέτησε το αρχείο σου μέσα στο φάκελο (από το PC) και μετά διάλεξε αυτή την επιλογή πάλι για να ανοίξεις το αρχείο. </string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Παρακαλώ σημειώστε: Η Google περιορίζει την πρόσβαση στο Google Drive από εφαρμογές για όλο και περισσότερους χρήστες. Εάν η ενσωματωμένη υλοποίηση του Google Drive δεν λειτουργεί, χρησιμοποιήστε τον επιλογέα αρχείων συστήματος και επιλέξτε το 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>
@@ -597,7 +588,6 @@
<string name="CouldntLoadChalAuxFile_Hint">Χρησιμοποιήστε το πρόσθετο KeeChallenge σε KeePass 2.x (PC) για να ρυθμίσετε τη βάση δεδομένων για χρήση με Πρόκληση-Απόκριση!</string>
<string name="ErrorUpdatingChalAuxFile">Σφάλμα ενημέρωσης βοηθητικού αρχείου OTP!</string>
<string name="TrayTotp_SeedField_title">Όνομα πεδίου για seed του TOTP</string>
<string name="TOTP">TOTP</string>
<string name="TrayTotp_SeedField_summary">Εάν χρησιμοποιείτε το πρόσθετο \"TrayTotp\" του Keepass 2 με μη προεπιλεγμένες ρυθμίσεις, πληκτρολογήστε το όνομα του πεδίου για το πεδίο seed σύμφωνα με τις ρυθμίσεις στον υπολογιστή.</string>
<string name="TrayTotp_SettingsField_title">Όνομα πεδίου στις ρυθμίσεις TOTP</string>
<string name="TrayTotp_SettingsField_summary">Εισάγετε όνομα πεδίου από ρυθμίσεις TrayTotp.</string>
@@ -715,33 +705,6 @@
<string name="EntryChannel_desc">Ειδοποίηση για απλοποιημένη πρόσβαση στην τρέχουσα καταχώριση.</string>
<string name="CloseDbAfterFailedAttempts">Κλείσιμο της βάσης δεδομένων μετά από 3 ανεπιτυχείς προσπάθειες βιομετρικού ξεκλειδώματος.</string>
<string name="WarnFingerprintInvalidated">Προσοχή! Ο βιομετρικός έλεγχος ταυτότητας μπορεί να ακυρωθεί από το Android, π.χ. μετά την προσθήκη ενός νέου δακτυλικού αποτυπώματος στις ρυθμίσεις της συσκευής σας. Βεβαιωθείτε ότι ξέρετε πάντα πώς να ξεκλειδώσετε με τον κύριο κωδικό πρόσβασης!</string>
<string-array name="ChangeLog_1_12">
<item>Αναβαθμίστηκε από Xamarin Android σε .ΝΕΤ 8</item>
<item>Αναβαθμίστηκε στοχεύοντας το SDK 34</item>
<item>Αναβαθμίστηκε σε διεπαφή χρήστη Material 3</item>
<item>Βελτιώστε την αυτόματη συμπλήρωση για να εργαστείτε με Compose Apps</item>
<item>Διόρθωση ονόματος host στην αυτόματη συμπλήρωση και αναζήτηση</item>
<item>Διόρθωση προβλήματος με τη γεννήτρια κωδικού πρόσβασης</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Αναβαθμίστηκε το OneDrive SDK στην έκδοση 5.68</item>
<item>Αναβαθμίστηκε το Dropbox SDK στην έκδοση 7.0.0</item>
<item>Αναβαθμισμένο Gradle, NewtonsoftJson, FluentFTP, MegaApiClient και okhttp</item>
<item>Επιδιόρθωση σφαλμάτων στην επιλογή αρχείου WebDav</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Προστέθηκαν τα αιωρούμενα κουμπιά ενεργειών για αναζήτηση και επισκόπηση TOTP (αν υπάρχουν καταχωρήσεις TOTP).</item>
<item>Βελτιωμένη εμφάνιση των πεδίων TOTP με την προσθήκη ενός δείκτη χρονικού ορίου και πιο εμφανή εμφάνιση.</item>
<item>Το TOTP εμφανίζεται από την προβολή ομάδας.</item>
<item>Αντιγραφή τιμής κειμένου στο πρόχειρο με παρατεταμένο πάτημα στην προβολή καταχωρίσεων.</item>
<item>Κάντε το TOTP πιο εύκολα προσβάσιμο στο ενσωματωμένο πληκτρολόγιο.</item>
<item>Εμφάνιση ειδοποίησης καταχώρησης κατά την αυτόματη συμπλήρωση μιας καταχώρισης TOTP. Επιτρέπει την αντιγραφή του TOTP στο πρόχειρο. Δείτε τις προτιμήσεις για τη ρύθμιση της συμπεριφοράς.</item>
<item>Ενημερώθηκε η υλοποίηση του TOTP για την επίλυση προβλημάτων συμβατότητας με το KeePass2 και το TrayTOTP</item>
<item>Μικρές βελτιώσεις</item>
</string-array>
<string-array name="ChangeLog_1_11_net">
<item>Ενημέρωση pCloud SDK για να παρέχει πρόσβαση σε κοινόχρηστους φακέλους</item>
</string-array>
<string-array name="ChangeLog_1_10">
<item>Προσθήκη υποστήριξης για δικαιώματα ειδοποίησης στο Android 13+</item>
<item>Βελτίωση της υλοποίησης FTP και SFTP</item>
@@ -863,8 +826,8 @@
</string-array>
<string-array name="sftp_auth_modes">
<item>Συνθηματικό</item>
<item>Ιδιωτικό / Δημόσιο κλειδί KP2A</item>
<item>Προσαρμοσμένο ιδιωτικό κλειδί</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
<item>Παράβλεψη αποτυχιών επικύρωσης πιστοποιητικού</item>
@@ -882,9 +845,6 @@
<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_title">Να επιτρέπονται οι ειδοποιήσεις</string>
<string name="post_notifications_dialog_message">Το Keepass2Android μπορεί να εμφανίσει ειδοποιήσεις με κουμπιά για να αντιγράψετε τιμές, όπως κωδικούς πρόσβασης και TOTP στο πρόχειρο, ή για να εμφανιστεί το ενσωματωμένο πληκτρολόγιο. Αυτό είναι χρήσιμο για να μεταφέρετε τιμές σε άλλες εφαρμογές, χωρίς να μεταβείτε σε Keepass2Android επανειλημμένα. Θέλετε να ενεργοποιήσετε αυτές τις ειδοποιήσεις;</string>
<string name="post_notifications_dialog_allow">Να επιτρέπονται οι ειδοποιήσεις</string>
<string name="post_notifications_dialog_disable">Απενεργοποιήστε αυτό το χαρακτηριστικό</string>
<string name="post_notifications_dialog_notnow">Όχι τώρα</string>
<string name="understand">Καταλαβαίνω</string>
@@ -905,8 +865,5 @@
<string name="AutofillWarning_Intro">Πρόκειται να εισάγετε διαπιστευτήρια για τον τομέα \"%1$s\" στην εφαρμογή \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Εάν εμπιστεύεστε ότι το \"%2$s\" ανήκει στο \"%1$s\" ή εμπιστεύεστε ότι η εφαρμογή \"%2$s\" δεν καταχράται τα διαπιστευτήρια (πχ. επειδή είναι μια αξιόπιστη εφαρμογή περιήγησης), είναι εντάξει να συνεχίσετε. Αν όχι, ακυρώστε.</string>
<string name="AutofillWarning_trustAsBrowser">Αποδοχή πάντα στο \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Εναλλαγή μετά την ολοκλήρωση</string>
<string name="kp2a_switch_on_sendgodone_summary">Εναλλαγή πίσω όταν πατήσετε αποστολή / λήψη / ολοκλήρωση</string>
<string name="qr_scanning_error_no_google_play_services">Η σάρωση QR κώδικα απαιτεί Google Play Services. Παρακαλώ εγκαταστήστε ή ενημερώστε τις Google Play Services στη συσκευή σας.</string>
<string name="english_ime_settings">Ρυθμίσεις πληκτρολογίου Android</string>
</resources>

View File

@@ -681,17 +681,6 @@
<string name="HintLocalBackupInvalidCompositeKey"> \n
&#8226; Sugerencia: Si piensas que la Base de Datos está dañada o no recuerdas la contraseña maestra después de cambiarla, inténtalo con la última versión de la Base de Datos abierta con éxito pulsando en \"%1$s\" y seleccionando la copia local.
</string>
<string name="HintLocalBackupOtherError"> \n
• Sugerencia: Keepass2Android ha almacenado la última versión del archivo abierto con éxito en el almacenamiento interno. Puedes abrirlo tocando \"%1$s\" y seleccionando la copia de seguridad local.
</string>
<string name="CorruptDatabaseHelp"> El archivo está corrupto. \n
Aquí hay algunas sugerencias que podrían ayudar a diagnosticar el problema:\n
• Si copiaste el archivo a través de USB ( modo MTP), por favor inténtalo de nuevo usando una herramienta como MyPhoneExplorer. MTP trunca los archivos en ciertos casos.\n
• Si no puedes abrir el archivo desde la misma localización en tu PC, es muy probable que el archivo en realidad esté corrupto. En ese caso, por favor usa una copia de seguridad de la base de datos. Si asumes que Keepass2Android ha corrompido el archivo, por favor contacta con el equipo de soporte.\n
• Si aún puedes abrir el archivo en tu PC, por favor contacta con el equipo de soporte. Podrías intentar guardarlo con una configuración diferente (p.ej. descomprimido) en el PC y volver a intentar abrirlo en Keepass2Android.
</string>
<string name="open_other_db">Abrir otrar base de datos…</string>
<string name="select_database">Seleccione base de datos</string>
<string name="configure_child_dbs">Configure bases de datos hijas…</string>
@@ -1175,8 +1164,5 @@
<string name="AutofillWarning_Intro">Está a punto de insertar credenciales para el dominio \"%1$s\" en la aplicación \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Si confía en que \"%2$s\" pertenece a \"%1$s\", o confía en que la aplicación \"%2$s\" no utilizará mal las credenciales (p. e. porque es una aplicación de navegador de confianza), está bien continuar. Si no, por favor cancele.</string>
<string name="AutofillWarning_trustAsBrowser">Aceptar siempre en \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Volver cuando termine</string>
<string name="kp2a_switch_on_sendgodone_summary">Volver cuando se presione enviar/ir/finalizado</string>
<string name="english_ime_settings">Ajustes del teclado de Keepass2Android</string>
<string name="switch_keyboard_on_search_enabled">Nota: Ha habilitado la aplicación - Seguridad - Acceso a la contraseña - Interruptor de teclado - Cambiar teclado. Esto puede causar que esta ventana se muestre cuando busque una entrada desde el navegador.</string>
</resources>

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (dossier KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Si vous ne voulez pas donner l\'accès KP2A à votre espace Dropbox complet, vous pouvez sélectionner cette option. Seul l\'accès au dossier Apps/Keepass2Android sera demandé. Ceci est particulièrement adapté lorsque vous créez une nouvelle base de données. Si vous avez déjà une base de données, cliquez sur cette option pour créer le dossier, puis placez votre fichier dans le dossier (à partir de votre PC) et puis sélectionnez à nouveau cette option pour ouvrir le fichier.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Attention : Google restreint l\'accès à Google Drive depuis les applications pour un nombre grandissant d\'utilisateurs. Si l\'intégration de Google Drive ne fonctionne pas, utilisez plutôt le sélecteur de fichiers système et sélectionnez Google Drive !</string>
<string name="filestoragename_gdriveKP2A">Google Drive (fichiers KP2A)</string>
<string name="filestoragehelp_gdriveKP2A">Si vous ne voulez pas donner à KP2A un accès complet à Google Drive, vous pouvez sélectionner cette option. Notez que vous devez d\'abord créer un fichier de base de données, les fichiers existants ne sont pas visibles pour l\'application. Choisissez cette option dans l\'écran Créer une base de données ou, si vous avez déjà ouvert une base de données, en exportant la base de données en choisissant cette option.</string>
<string name="filestoragename_pcloud">PCloud (dossier KP2A)</string>
@@ -673,26 +672,6 @@
<string name="Continue">Suivant</string>
<string name="NoFilenameWarning">L\'URI que vous avez entré ne ressemble pas à un nom de fichier. Etes-vous sûr qu\'il s\'agit d\'un fichier valide ?</string>
<string name="FirstInvalidCompositeKeyError">Clé composite invalide ! S\'il vous plaît essayez encore.</string>
<string name="RepeatedInvalidCompositeKeyHelp"> Clé composite non valide ! Veuillez essayer les étapes suivantes pour déverrouiller votre base de données :\n
• Assurez-vous que vous avez saisi le bon mot de passe. Utilisez l\'icône en forme d\'œil pour révéler le mot de passe saisi.\n
• Assurez-vous que vous avez sélectionné le bon type de mot de passe et qu\'il correspond à celui utilisé lors de la création de la base de données.\n
• Assurez-vous que vous avez sélectionné le bon fichier de base de données.
</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
• Indice : si vous pensez que votre fichier de base de données est corrompu ou que vous ne vous souvenez pas de la clé principale après l\'avoir modifiée, vous pouvez essayer avec la dernière version du fichier ouverte avec succès en appuyant sur « %1$s » et en sélectionnant la sauvegarde locale.
</string>
<string name="HintLocalBackupOtherError"> \n
• Indice : Keepass2Android a enregistré la dernière version de fichier ouverte avec succès sur le stockage interne. Vous pouvez l\'ouvrir en appuyant sur « %1$s » et en sélectionnant la sauvegarde locale.
</string>
<string name="CorruptDatabaseHelp"> Le fichier est corrompu.\n
Voici quelques conseils qui pourraient aider à diagnostiquer le problème :\n
• Si vous avez copié le fichier via USB (mode MTP), essayez à nouveau en utilisant un outil comme MyPhoneExplorer. MTP tronque les fichiers dans certains cas.\n
• Si vous ne pouvez pas ouvrir le fichier à partir du même emplacement sur votre PC, il est très probable que le fichier soit corrompu. Veuillez alors utiliser une sauvegarde de la base de données. Si vous pensez que Keepass2Android a corrompu le fichier, veuillez contacter l\'équipe d\'assistance.\n
• Si vous pouvez toujours ouvrir le fichier sur votre PC, essayez de l\'enregistrer avec des paramètres différents (par ex. décompressé) sur le PC et réessayer de l\'ouvrir dans Keepass2Android. Sinon, veuillez contacter l\'équipe d\'assistance.
</string>
<string name="open_other_db">Ouvrir une autre base de données…</string>
<string name="select_database">Sélectionner une base de données</string>
<string name="configure_child_dbs">Configurer les bases de données filles…</string>
@@ -720,20 +699,6 @@
<string name="EntryChannel_desc">Notification pour simplifier l\'accès à l\'entrée actuellement sélectionnée.</string>
<string name="CloseDbAfterFailedAttempts">Fermer la base de données après trois tentatives de déverrouillage biométrique échouées.</string>
<string name="WarnFingerprintInvalidated">Attention ! L\'authentification biométrique peut être invalidée par Android, par ex. après avoir ajouté une nouvelle empreinte digitale dans les paramètres de votre appareil. Assurez-vous de toujours savoir comment déverrouiller avec votre mot de passe maître !</string>
<string-array name="ChangeLog_1_12">
<item>Mise à niveau de Xamarin Android vers. net 8</item>
<item>Mise à niveau vers Target SDK 34</item>
<item>Mise à niveau vers l\'interface utilisateur Material 3</item>
<item>Amélioration de la saisie automatique pour fonctionner avec les applications Compose</item>
<item>Fix hostname matching in autofill and search</item>
<item>Corriger le problème avec le générateur de mot de passe</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Mise à jour de OneDrive SDK vers la version 5.68</item>
<item>Mise à jour du SDK Dropbox vers la version 7.0.0</item>
<item>Mise à jour Gradle, NewtonsoftJson, FluentFTP, MegaApiClient et okhttp</item>
<item>Correction de bugs dans la sélection de fichiers WebDav</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Ajout de boutons d\'action flottants pour la recherche et l\'aperçu TOTP (si des entrées TOTP sont présentes).</item>
<item>Amélioration de l\'affichage des champs TOTP en ajoutant un indicateur de dépassement de délai et en le montrant plus en évidence.</item>
@@ -828,89 +793,6 @@
* Nouvelle implémentation pour OneDrive : inclut la prise en charge de OneDrive Entreprise, des fichiers partagés, des périmètres d\'accès sélectionnables, des comptes multiples et des corrections de problèmes d\'accès en mode hors-ligne\n
* Corrections d\'anomalies
</string>
<string name="ChangeLog_1_07"> Version 1.07\n
* Corrige les crashs sur les Samsung avec Android 9\n
* Permet d\'ouvrir plus d\'une base de données, compatible avec KeeAutoExec\n
* SFTP : permet l\'authentification avec clé publique, vérifie si la clé de l\'hôte a changé\n
* Introduction du support pCloud - merci à gilbsgilbs !\n
* Mise en place explicite du support Nextcloud\n
* Améliore l\'enregistrement et la mise à jour des pièces jointes des entrées\n
* Plus d\'options pour adapter le comportement aux préférences personnelles\n
* SSL : acceptation et confiance avec les certificats utilisateur\n
* Améliore la saisie automatique (fonctionne maintenant avec Firefox, permet de réduire les popups)\n
* Résolution de bugs\n
</string>
<string name="ChangeLog_1_06">Version 1.06\n
* Changement vers ykDroid au lieu de YubiChallenge comme application pour le défi-réponse de Yubikey.\n
* implémentation du support de défi-réponse compatible KeepassXC. Note : Le format de base de données doit être KDBX4 !\n
* Blocage du chargement de fichiers supprimés depuis Google Drive\n
* Changement d\'implémentation TLS pour FTPS, ajout d\'un contournement du bug JSch avec les serveurs compatibles avec gssapi-with-mic\n
* Correction de bugs\n </string>
<string name="ChangeLog_1_05"> Version 1.05\n * Utilisation des canaux de notification Android 8, ce qui permet la configuration via les paramètres système\n * Affichage de licône entrée dans la notification\n * Utilisation d\'icônes adaptatifs pour Android 8, utilisez l\'icône arrondi du lanceur pour Android 7\n * Permet dactiver la recherche au déverrouillage (voir réglages) \n * Modification de comment les fichiers sont écrits en utilisant le framework Storage Access, corrections de problèmes sur les mises à jour des fichiers ouvert sur Google Drive avec le sélecteur du système fichier\n * Ajout de textes dinformations afin déviter certaines incompréhensions commune \n * Création de sauvegardes locales pour les bases ouvertes avec succès pour réduire le risque de perte de donnée\n * Mise à jour de JSch pour supporté les derniers chiffrements SSH\n * Permettre la modification des paramètres de connexion, par exemple lorsque le mot de passe WebDav a changé\n * Ajout du support pour mot de passe statique Yubikey Neo\n * Permettre de désactiver les suggestions automatiques\n * Correction des fuites de données vers logcat\n * Corrections d\'anomalies\n
</string>
<string name="ChangeLog_1_04b"> Version 1.04b\n * Évite les plantages lorsque lutilisateur essaie dactiver la fonctionnalité de remplissage automatique sur les appareils Huawei.\n
</string>
<string name="ChangeLog_1_04">Version 1.04
* Ajout du service de saisie automatique pour Android 8.0 et plus.
* Mise à niveau des librairies, des outils de build et de la version du sdk cible
</string>
<string name="ChangeLog_1_03">Version 1.03
* Suppression du service d\'accessibilité pour le remplissage automatique tel que demandé par Google. Voir les paramètres daccès mot de passe pour trouver un plugin reproduisant la fonctionnalité précédente.
* Ajout d\'applications tierces comme option de stockage
* Visionneuse intégrée pour le voir des images jointes sans les transférer sur dautres applications
* OkHttp mis à jour pour résoudre certains problèmes de connexion
* Support des entrées de KeeTrayTOTP, supporte désormais les entrées Steam</string>
<string name="ChangeLog_1_02"> Version 1.02\n
* Quelques améliorations liées à la sécurité. Merci beaucoup pour le rapport jean-baptiste.cayrou@thalesgroup.com et vincent.fargues@thalesgroup.com et aussi pour votre collaboration !\n
* Support de KeyboardSwapPlugin (voir les paramètres d\'accès aux mots de passe) : permet de changer de méthode de saisie automatiquement sur les appareils sans « root ». Merci à Mishaal Rahman d\'XDA-Developers de l\'avoir rendu possible.\n
* Correction pour les services daccessibilité avec les versions récentes de Chrome\n
* Correction pour les nettoyages non nécessaires des données d\'empreintes digitales\n
* Correction de plantages mineurs\n
* Mise à jour du kit de développement Dropbox pour s\'assurer de la compatibilité future\n
* Suppression des rapports d\'erreur en utilisant Xamarin Insights\n
* Mise à jour des outils de compilation\n
</string>
<string name="ChangeLog_1_01g"> Version 1. 1-g\n
* Correction pour un plantage lorsque vous essayez de travailler hors ligne\n
* Correction pour un codage incorrect des identifiants FTP(S)\n
* Correction pour les plantages lors de l\'utilisation de OneDrive et des anciennes versions d\'Android\n
* Affiche les temps en temps local dans l\'écran d\'entrée\n
</string>
<string name="ChangeLog_1_01d">Version 1.01-d\n * Correction pour le listing des fichiers OneDrive\n * Possibilité dignorer les erreurs de certificat lorsque la vérification du nom de lhôte échoue (non recommandé pour une utilisation en production) \n * Correction pour QuickUnlock qui parfois ne fonctionnait malgré la saisie correcte du code\n </string>
<string name="ChangeLog_0_9_8c">Version 0.9.8c\n
* Correctif pour la vulnérabilité SSL dans Microsoft Live SDK (utilisé lorsque vous accédez à des fichiers via OneDrive)\n
* Bug fix : la version précédente contenait deux méthodes de saisie (l\'une des deux plante)\n </string>
<string name="ChangeLog_1_01">Version 1.01\n * Ajout du support pour le nouveau format KDBX-4 (compatible avec Keepass 2.35) y compris la dérivation de clés Argon2 et ChaCha20 cryptage.\n * Nouvelle implémentation du stockage WebDav, il est maintenant possible de parcourir les fichiers et le stockage prend en charge un chiffrement moderne.\n * Nouvelle implémentation du stockage FTP qui permet maintenant de parcourir les fichiers et de prendre en charge le cryptage (FTPS).\n * Mise à jour du SDK OneDrive (le SDK Live précédemment utilisé nest plus mis à jour).\n * Mise à jour du SDK Dropbox vers la version 2 (la version 1 n\'est plus supportée).\n * Ajout du support pour OwnCloud.\n *Demande dautorisation de stockage avant douvrir les fichiers locaux. </string>
<string name="ChangeLog_1_0_0e">Version 1.0.0e\n
* Règle un problème avec le scaneur d\'empreintes digitales sur les anciens appareils Samsung tournant avec Android 6.\n
* Ajout d\'un support natif pour les processeurs x86.\n
* Permet d\'afficher ou cacher les caractères dans les champs texte de saisie si le scanner d\'empreinte digital a été activé. \n
* Construction de mise à jour système </string>
<string name="ChangeLog_1_0_0">Version 1.0.0\n * Déverrouiller par empreinte digitale (nécessite Android 6.0+ ou un appareil Samsung)\n * Ajout du service de saisie automatique (nécessite Android 5.0+)\n * Ajout du support pour l\'entrée templates\n * Ajout d\'un mode \"hors connexion\"\n * Possibilité de copier les entrées\n * Mode semi-automatique pour les champs noms\n * Possibilité de supprimer des éléments de liste des fichiers récents\n * Demande des autorisations à l\'exécution pour Android 6.0\n * Corrections de bugs (dans le clavier intégré, lorsque vous sélectionnez les icônes)\n * Ajout d\'une option pour envoyer des rapports d\'erreur\n * Ajouts de plusieurs messages d\'aide\n </string>
<string name="ChangeLog_0_9_9">Version 0.9.9\n
* Refonte complète de l\'interface utilisateur. Merci beaucoup à Stefano Pignataro (http://www.spstudio.at) pour son aide!\n
* Permet l\'ajout d\'icônes personnalisées\n
* Support pour l\'affichage fractionné sur les appareils Samsung\n
* Nombre de rotation par défaut pour le chiffrement de nouvelle base de données\n
* Vérification des clés dupliquées des champs supplémentaires pour éviter la perte de données\n
</string>
<string name="ChangeLog_0_9_9c"> Version 0.9.9c
* Retour du thème sombre
* Vous pouvez installer d\'autres pack d\'icones (Icones Windows ancien sont disponibles sur le Play Store)
* Ajout d\'une confirmation lors d\'une suppression d\'éléments sans passer par la corbeille
* Correction de bugs (mauvais affichage de l\'encodage secret OTP, mauvaise icone de l\'application dans certains endroits)
</string>
<string name="ChangeLog_0_9_8b">Version 0.9.8b\n
* corrections de bugs (Sauvegarde a échoué pour certaines bases, exporter vers le périphérique local ne fonctionne pas, sélectionner certaines options de préférence crash l\'app)\n</string>
<string name="ChangeLog_0_9_8">Version 0.9.8\n
* Support du Storage Access Framework (permet l\'écriture sur carte SD et Google Drive dans KP2A Offline)\n
* Essai de détecter les erreurs de saisie dans les URL WebDAV (répertoire au lieu du fichier)\n
* Police de mot de passe modifié\n
* Autorise le changement de compte Dropbox\n
* correction de bug: maintenant se souvient du mot de passe OTP\n</string>
<string name="ChangeLog_0_9_7b">Version 0.9.7b\n
* traductions actualisées\n
* corrections de bugs : polices de mot de passe était manquant dans 0.9.7, trie par nom ne trie pas les groupes\n</string>
<string name="ChangeLog_keptDonate">Possibilité élargie de faire un don d\'une bière ou autre chose</string>
<string-array name="clipboard_timeout_options">
<item>30 secondes</item>
@@ -1002,10 +884,5 @@
<string name="AutofillWarning_Intro">Vous êtes sur le point d\'insérer des identifiants pour le domaine \"%1$s\" dans l\'application \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Si vous faites confiance à \"%2$s\" pour appartenir à \"%1$s\" ou que vous faites confiance à l\'application \"%2$s\" pour ne pas abuser des identifiants (ex. parce que c\'est une application de navigateur de confiance), il est possible de continuer. Si ce n\'est pas le cas, veuillez annuler.</string>
<string name="AutofillWarning_trustAsBrowser">Accepter toujours dans \"%1$s\"</string>
<string name="qr_scanning_error_no_google_play_services">Le scan de QR Code requiert les Services Google Play. Veuillez installer ou mettre à jour les Services Google Play sur votre périphérique.</string>
<string name="english_ime_settings">Paramètres du clavier Keepass2Android</string>
<string name="autoswitch_enabled_but_not_setup">Note : Vous avez activé le changement automatique de clavier, mais il ne semble pas être correctement configuré (Paramètres - Appli - Accès aux mots de passe - Changement de clavier).</string>
<string name="switch_keyboard_for_totp_enabled">Note : Vous avez activé le remplissage automatique des entrées TOTP. Cela peut entrainer l\'apparition de cette fenêtre lorsque vous ouvrez une entrée avec un TOTP (Paramètres - Appli - Accès aux mots de passe - Service de saisie automatique).</string>
<string name="switch_keyboard_inside_kp2a_enabled">Note : Vous avez activé le clavier intégré dans Keepass2Android. Cela peut faire apparaitre cette fenêtre quand vous ouvrez l\'application, ou que vous éditez une entrée (Paramètres - Appli - Sécurité).</string>
<string name="switch_keyboard_on_search_enabled">Note : Vous avez activé le changement de clavier. Cela peut faire apparaitre cette fenêtre lorsque vous recherchez une entrée depuis le navigateur (Paramètres - Appli - Accès aux mots de passe - Changement de clavier).</string>
</resources>

View File

@@ -151,7 +151,6 @@
<string name="hint_keyfile">kulcsfájl</string>
<string name="hint_length">hosszúság</string>
<string name="hint_pass">jelszó</string>
<string name="hint_keyfile_path">SSH privátkulcs elérési útvonala</string>
<string name="hint_login_pass">Jelszó</string>
<string name="hint_title">név</string>
<string name="hint_url">URL</string>
@@ -401,14 +400,6 @@
<string name="ShowSeparateNotifications_summary">Külön értesítés jelenjen meg a felhasználónév és a jelszó vágólapra másolásáról és a billentyűzet aktiválásáról.</string>
<string name="AccServiceAutoFill_prefs">Automatikus kitöltés akadálymentesítési szolgáltatás</string>
<string name="AutoFill_prefs">Automatikus kitöltés szolgáltatás</string>
<string name="AutoFillTotp_prefs_ShowNotification_summary">Egy bejegyzés TOTP-vel való kitöltésekor értesítés megjelenítése, TOTP másolása gombbal</string>
<string name="AutoFillTotp_prefs_ShowNotification_title">Értesítés megjelenítése</string>
<string name="AutoFillTotp_prefs_title">Automatikus kitöltés TOTP bejegyzésekhez</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_title">TOTP másolása a vágólapra</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_summary">Egy bejegyzés TOTP-vel való kitöltésekor a TOTP másolása a vágólapra</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_summary">Egy bejegyzés TOTP-vel való kitöltésekor aktiválódjon a beépített billentyűzet</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_title"> A beépített billentyűzet aktiválása</string>
<string name="TotpCopiedToClipboard">TOTP a vágólapra másolva</string>
<string name="ShowKp2aKeyboardNotification_title">KP2A billentyűzet</string>
<string name="ShowKp2aKeyboardNotification_summary">A teljes bejegyzés elérhetővé tétele a KP2A billentyűzet segítségével (ajánlott).</string>
<string name="OpenKp2aKeyboardAutomatically_title">Billentyűzetváltás</string>
@@ -425,7 +416,6 @@
<string name="ShowUnlockedNotification_summary">Egy értesítési ikon megjelenítése, amíg az adatbázis hozzáférhető.</string>
<string name="IconVisibilityInfo_Android8_text">Az Android 8 bevezetett egy új működési módot az értesítésekhez. Ha el akarja rejteni a Keepass2Android értesítési ikonját, kérjük, ezt a rendszerbeállításokban tegye meg. Állítsa az értesítési kategória fontosságát minimumra.</string>
<string name="IconVisibilityInfo_Android8_btnSettings">Beállítások megnyitása</string>
<string name="PostNotificationsPermissionInfo_text">A Keepass2Android képes rendszerértesítést megjeleníteni, amíg az adatbázis nincs lezárva. Hogy ez működjön, kérjük, adja meg az engedélyt.</string>
<string name="DontCare">Nem érdekel</string>
<string name="DocumentAccessRevoked">A fájl már nem elérhető a Keepass2Android által. Vagy el lett távolítva, vagy a hozzáférési jogosultságok vissza lettek vonva. Kérjük használja a Fájl újra megnyitását, pl. az adatbázis-váltást használva.</string>
<string name="PreloadDatabaseEnabled_title">Adatbázisok előrehozott betöltése</string>
@@ -510,27 +500,9 @@
<string name="hint_sftp_host">szerver (pl. 192.168.0.1)</string>
<string name="hint_sftp_port">port</string>
<string name="initial_directory">Kezdőkönyvtár (opcionális):</string>
<string name="connect_timeout">Kapcsolódás időkorlátja, másodpercben (opcionális)</string>
<string name="enter_sftp_login_title">SFTP tárhely adatai:</string>
<string name="sftp_auth_mode">Hitelesítési mód</string>
<string name="send_public_key">A nyilvános kulcs küldése...</string>
<string name="select_private_keyfile">Privátkulcs kiválasztása</string>
<string name="hint_sftp_key_name">Új kulcs neve</string>
<string name="hint_sftp_key_content">Új kulcs tartalma</string>
<string name="private_key_saved">Privátkulcs elmentve</string>
<string name="private_key_save_failed">A privátkulcs mentése nem sikerült: %1$s</string>
<string name="private_key_info">Adja meg az elmentendő kulcs nevét és tartalmát</string>
<string name="private_key_delete">A privát kulcs törölve: %1$s</string>
<string name="private_key_delete_failed">A privát kulcs törlése sikertelen: %1$s</string>
<string name="save_key">Privát kulcs mentése</string>
<string name="delete_key">Privát kulcs törlése</string>
<string name="private_key_select">Privát kulcs kiválasztása</string>
<string name="private_key_create_new">[Új hozzáadása...]</string>
<string name="hint_sftp_key_passphrase">Kulcshoz tartozó jelmondata</string>
<string name="sftp_kex_title">Kulcscsere (KEX) algoritmus (opcionális)</string>
<string name="hint_sftp_kex">Nevek/specifikációk, vesszővel elválasztva</string>
<string name="sftp_shk_title">Szerverazonosításhoz használt kulcs algoritmusa(i) (opcionális)</string>
<string name="hint_sftp_shk">Nevek/specifikációk, vesszővel elválasztva</string>
<string name="enter_ftp_login_title">Adja meg az FTP bejelentkezési adatait:</string>
<string name="enter_mega_login_title">Adja meg a MEGA fiókjának belépési adatait:</string>
<string name="select_storage_type">Tárolási típus kiválasztása:</string>
@@ -546,12 +518,9 @@
<string name="filestoragename_dropboxKP2A">Dropbox (KPA2 mappa)</string>
<string name="filestoragehelp_dropboxKP2A">Válassza ezt az opciót, ha nem akarja, hogy a KP2A a teljes Dropbox tárhelyhez hozzáférjen. A KP2A csak az Apps/Keepass2Android könyvtárhoz fog hozzáférést igényelni. Ha már meglévő, de máshol tárolt adatbázist kíván ilyen módon elérni, akkor válassza ezt az opciót a könyvtár létrehozásához, majd helyezze át az adatbázisfájlt a létrehozott könyvtárba (például egy PC-ről), majd válassza még egyszer ezt az opciót a fájl megnyitásához.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Figyelem! A Google egyre több felhasználó számára korlátozza a Google Drive-hoz való hozzáférést az alkalmazásokból. Ha a beépített Google Drive implementáció nem működik, kérjük, használja helyette a Alapértelmezett fájlválasztót és válassza ott a Google Drive-ot!</string>
<string name="filestoragename_gdriveKP2A">Google Drive (KP2A fájlok)</string>
<string name="filestoragehelp_gdriveKP2A">Válassza ezt az opciót, ha nem akarja, hogy a KP2A a teljes Google Drive-hoz hozzáférjen. Fontos, hogy először egy új adatbázist kell létrehoznia, a korábban létrehozott fájlokat az alkalmazás nem fogja látni. Vagy válassza ezt az opciót az Új adatbázis létrehozása képernyőn, vagy, ha már létezik az opció, exportálja azt ennek ezzel az opcióval.</string>
<string name="filestoragename_pcloud">PCloud (KP2A folder)</string>
<string name="filestoragehelp_pcloud">Ez a tárhelytípus csak az \"Applications/Keepass2Android\" mappához igényel hozzáférést. Ahhoz, hogy a PCloud tárhelyed egy meglévő adatbázisát használd, azt ebben az mappában kell elhelyezned.</string>
<string name="filestoragename_pcloudall">PCloud (teljes hozzáférés)</string>
<string name="filestoragename_onedrive">OneDrive</string>
<string name="filestoragename_onedrive2">OneDrive</string>
<string name="filestoragename_onedrive2_full">Az összes fájl és a megosztott fájlok</string>
@@ -598,14 +567,12 @@
<string name="CouldntLoadChalAuxFile_Hint">Kérjük, konfigurálja az adatbázist hitelesítő kérdés-válasszal való használthoz a KeePass 2.x (PC-s verzió) KeeChallenge beépülő modulja segítségével.</string>
<string name="ErrorUpdatingChalAuxFile">OTP kiegészítő fájl frissítése közben hiba történt!</string>
<string name="TrayTotp_SeedField_title">TOTP mezőnév</string>
<string name="TOTP">Idő alapú egyszer használatos jelszó (TOTP)</string>
<string name="TrayTotp_SeedField_summary">Ha a \"TrayTotp\" beépülő-modult nem alapértelmezett beállításokkal használja, adja meg annak a mezőnek a nevét, amit a jelszógenerálásnál használni kell (megegyezően a PC-n használt beállítással).</string>
<string name="TrayTotp_SettingsField_title">TOTP beállítások mező</string>
<string name="TrayTotp_SettingsField_summary">Adja meg a TrayTotp beállítások mezőjének nevét.</string>
<string name="TrayTotp_prefs">TrayTotp</string>
<string name="DebugLog_prefs_prefs">Naplófájl a hibakereséshez</string>
<string name="DebugLog_title">Naplófájl használata</string>
<string name="FtpDebug_title">FTP/SFTP naplózása</string>
<string name="DebugLog_summary">Az alkalmazás kimenetének egy helyi naplófájlba írása</string>
<string name="DebugLog_send">Hibakeresési naplóbejegyzések küldése...</string>
<string name="loading">Töltés...</string>
@@ -674,21 +641,6 @@
<string name="Continue">Folytatás</string>
<string name="NoFilenameWarning">A megadott URI nem tűnik fájlnévnek. Biztos benne, hogy jó URI-t adott meg?</string>
<string name="FirstInvalidCompositeKeyError">Az összetett kulcs érvénytelen! Próbálkozzon újra.</string>
<string name="RepeatedInvalidCompositeKeyHelp">Az összetett kulcs érvénytelen! Kérjük, próbálja meg a következő lépésekkel feloldani az adatbázisát:\n
- Győződjön meg róla, hogy helyesen adta meg a jelszót. Használja a szem ikont a beírt jelszó felfedéséhez.\n
- Győződjön meg róla, hogy a megfelelő jelszótípust választotta ki. Győződjön meg róla, hogy ez megegyezik az adatbázis létrehozásakor használt típussal.\n
- Győződjön meg róla, hogy a megfelelő adatbázisfájlt választotta ki.</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
- Tipp: Ha úgy gondolja, hogy az adatbázis-fájlja sérült lehet, vagy nem emlékszik a főkulcsra (jelszó) a módosítás után, akkor a „%1$s” gombra koppintva és a helyi biztonsági mentést kiválasztva próbálkozhat a fájl utolsó sikeresen megnyitott verziójával.</string>
<string name="HintLocalBackupOtherError"> \n
- Tipp: A Keepass2Android az utolsó sikeresen megnyitott fájlverziót a belső tárhelyen tárolja. Megnyithatja azt a „%1$s” koppintással és a helyi biztonsági mentés kiválasztásával.</string>
<string name="CorruptDatabaseHelp">A fájl sérült. \n
Néhány tipp, amely segíthet a probléma diagnosztizálásában:\n
- Ha a fájlt USB-n keresztül másolta (MTP-mód), próbálja meg újra egy olyan eszközzel, mint a MyPhoneExplorer. Az MTP bizonyos esetekben csonkítja a fájlokat.\n
- Ha nem tudja megnyitni a fájlt ugyanarról a helyről a számítógépéről sem, akkor nagyon valószínű, hogy a fájl valóban sérült. Kérjük, ekkor használja az adatbázis egy biztonsági mentését. Ha feltételezi, hogy a Keepass2Android okozta a sérülést, kérjük, lépjen kapcsolatba a támogatói csapatot.\n
- Ha még meg tudja nyitni a fájlt a számítógépén, kérjük, lépjen kapcsolatba a támogatói csapattal. Megpróbálhatja más beállításokkal elmenteni a számítógépen (például tömörítetlenül), és azt megnyitni a Keepass2Androidban.</string>
<string name="open_other_db">Egy másik adatbázis megnyitása…</string>
<string name="select_database">Adatbázis kiválasztása</string>
<string name="configure_child_dbs">Csatolt adatbázisok konfigurálása…</string>
@@ -777,8 +729,8 @@
</string-array>
<string-array name="sftp_auth_modes">
<item>Jelszó</item>
<item>KP2A privát/publikus kulcs</item>
<item>Egyedi privát kulcs</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
<item>Továbblépés, figyelmeztetés nélkül</item>
@@ -796,11 +748,6 @@
<string name="autofill_enable_for">Az automatikus kitöltés engedélyezése %1$s esetén</string>
<string name="invalid_link_association">Nem sikerült összerendelni a %1$s internettartományt a %2$s alkalmazással</string>
<string name="enable_fingerprint_hint">Biometrikus eszköz detektálva. Szeretné engedélyezni az adatbázis biometrikus feloldását?</string>
<string name="post_notifications_dialog_title">Értesítések engedélyezése</string>
<string name="post_notifications_dialog_message">A Keepass2Android képes értesítéseket megjeleníteni, ami lehetővé teszi, hogy többször vagy egyszer használatos jelszavakat másoljon a vágólapra, vagy aktiválja a beépített billentyűzetet. Ez hasznos többféle érték más alkalmazásokba történő átviteléhez, úgy, hogy ne kelljen többször is alkalmazást váltani. Szeretné engedélyezni az ilyen értesítéseket?</string>
<string name="post_notifications_dialog_allow">Értesítések engedélyezése</string>
<string name="post_notifications_dialog_disable">A lehetőség kikapcsolása</string>
<string name="post_notifications_dialog_notnow">Ne most</string>
<string name="understand">Értem</string>
<string name="dont_show_again">Ne mutassa többet</string>
<string name="masterkey_infotext_head">Emlékszik a főkulcsra (jelszó)?</string>
@@ -819,8 +766,5 @@
<string name="AutofillWarning_Intro">A(z) \"%1$s\" tartományhoz tartozó azonosítókat készül a(z) \"%2$s\" alkalmazás számára elérhetővé tenni.</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Ha megbízik abban, hogy a(z) \"%1$s\" tartomány a(z) \"%2$s\" alkalmazáshoz tartozik, vagy megbízik abban, hogy az alkalmazás nem él vissza a titkos adatokkal (mert például egy megbízható böngészőprogram), folytassa. Ha nem, szakítsa meg a folyamatot.</string>
<string name="AutofillWarning_trustAsBrowser">Mindig fogadja el itt: \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Visszakapcsolás, ha végzett</string>
<string name="kp2a_switch_on_sendgodone_summary">Visszaváltás a Küldés/Ugrás/Kész gombok megnyomásakor</string>
<string name="qr_scanning_error_no_google_play_services">A QR-kód beolvasásához szükséges a Google Play Service. Kérjük, telepítse vagy frissítse a szolgáltatást a készülékén.</string>
<string name="english_ime_settings">Keepass2Android billentyűzetbeállítások</string>
</resources>

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (cartella KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Se non vuoi dare a KP2A accesso completo al tuo Dropbox, puoi selezionare questa opzione. Richiederà solo l\'accesso alla cartella Applicazioni/Keepass2Android. Ciò è particolarmente indicato quando si crea un nuovo database. Se hai già un database, fai click su questa opzione per creare la cartella, poi spostaci dentro il file (dal PC), quindi seleziona di nuovo questa opzione per aprire il file.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Nota: Google sta limitando l\'accesso a Google Drive dalle app per un numero sempre maggiore di utenti. Se la funzione integrata di Google Drive non funziona, si prega di utilizzare il selettore di file di sistema e selezionare Google Drive!</string>
<string name="filestoragename_gdriveKP2A">Google Drive (file KP2A)</string>
<string name="filestoragehelp_gdriveKP2A">Se non vuoi dare a KP2A accesso completo al tuo Google Drive completo, puoi selezionare questa opzione. Nota che è necessario prima creare un file di database, i file esistenti non sono visibili per l\'app. Scegli questa opzione dalla schermata Crea database o, se hai già aperto un database, esportando il database scegliendo questa opzione.</string>
<string name="filestoragename_pcloud">PCloud (KP2A folder)</string>
@@ -673,22 +672,6 @@
<string name="Continue">Continua</string>
<string name="NoFilenameWarning">L\'URI inserito non sembra il nome di un file. Sei sicuro che sia un file valido?</string>
<string name="FirstInvalidCompositeKeyError">Chiave composita non valida! Riprova.</string>
<string name="RepeatedInvalidCompositeKeyHelp">Chiave composta non valida! Per favore prova la seguente procedura per sbloccare il database: \n
• assicurati di aver inserito la password corretta. Usa l\'icona che rappresenta un occhio per vedere la password immessa.\n
• assicurati di aver selezionato il tipo di password corretto. Assicurati che coincida con il tipo usato quando hai creato il database.\n
• assicurati di aver selezionato il file del database corretto.</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
• Suggerimento: se pensi che il tuo file di database possa essere danneggiato oppure non ricordi la password principale dopo averla modificata, puoi provare con l\'ultima versione di file aperta correttamente facendo clic su \"%1$s\" e selezionando il backup locale.</string>
<string name="HintLocalBackupOtherError"> \n
• Suggerimento: Keepass2Android ha archiviato l\'ultima versione del file aperta correttamente nella memoria interna. È possibile aprirla facendo clic su \"%1$s\" e selezionando il backup locale.
</string>
<string name="CorruptDatabaseHelp">Il file è corrotto.\n
Ecco alcuni suggerimenti che ti potrebbero aiutare a diagnosticare il problema:\n
• se hai copiato il file tramite USB (MTP-Mode), riprova usando uno strumento come MyPhoneExplorer. (MTP a volte tronca i file.)\n
• se non puoi aprire il file dallo stesso percorso sul tuo PC, è molto probabile che il file sia effettivamente danneggiato. Per favore usa un backup del database. Se credi che Keepass2Android abbia corrotto il file, contatta il supporto.\n
• se puoi ancora aprire il file sul tuo PC, contatta il supporto. Puoi provare a salvarlo con impostazioni differenti (es: non compresso) sul PC e, poi, riprovare ad aprirlo in Keepass2Android. </string>
<string name="open_other_db">Apri un altro database…</string>
<string name="select_database">Seleziona il database</string>
<string name="configure_child_dbs">Configura i database figli…</string>
@@ -716,20 +699,6 @@ Ecco alcuni suggerimenti che ti potrebbero aiutare a diagnosticare il problema:\
<string name="EntryChannel_desc">Notifica per semplificare l\'accesso alla voce attualmente selezionata.</string>
<string name="CloseDbAfterFailedAttempts">Chiudi il database dopo tre tentativi di sblocco biometrici falliti.</string>
<string name="WarnFingerprintInvalidated">Attenzione! L\'autenticazione biometrica può essere invalidata da Android, ad es. dopo aver aggiunto una nuova impronta digitale nelle impostazioni del dispositivo. Assicurati di sapere sempre come sbloccare con la tua password principale!</string>
<string-array name="ChangeLog_1_12">
<item>Aggiornato da Xamarin Android a .net 8</item>
<item>Aggiornato a Target SDK 34</item>
<item>Aggiornato all\'interfaccia utente Material 3</item>
<item>Migliora l\'autofill per funzionare con le app Compose</item>
<item>Corretta la corrispondenza con l\' hostname in riempimento automatico e ricerca</item>
<item>Corretto problema con il generatore di password</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Aggiornato OneDrive SDK alla versione 5.68</item>
<item>Aggiornato Dropbox SDK alla versione 7.0.0</item>
<item>Aggiornati Gradle , NewtonsoftJson, FluentFTP, MegaApiClient e okhttp</item>
<item>Bugfix nella selezione dei file WebDav</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Aggiunti pulsanti di azione fluttuanti per la ricerca e TOTP panoramica (se sono presenti voci TOTP).</item>
<item>Vista migliorata dei campi TOTP aggiungendo un indicatore di tempo limite e mostrandolo in modo più evidente.</item>
@@ -933,153 +902,7 @@ Ecco alcuni suggerimenti che ti potrebbero aiutare a diagnosticare il problema:\
* Puoi installare altri pacchetti di icone (le vecchie icone in stile Windows sono disponibili sul Play Store)\n
* Aggiunta richiesta di conferma prima di eliminare voci senza passare dal cestino\n
* Correzione errori (errata visualizzazione dell\'OTP-secret, icona dell\'app errata in certi posti)\n </string>
<string name="ChangeLog_0_9_8b">Versione 0.9.8b\n
* correzione di errori (il salvataggio di alcuni database fallisce, l\'esportazione su periferica locale non funziona, la selezione di alcune opzioni manda l\'app in crash)\n</string>
<string name="ChangeLog_0_9_8">Versione 0.9.8\n
* supporto per Storage Access Framework (permette a KP2A Offline di scrivere su scheda SD e Google Drive)\n
* tenta di rilevare errori dell\'utente nell\'inserimento degli URL di WebDAV (cartella al posto di file)\n
* cambiato il font della password\n
* consente di modificare l\'account di Dropbox\n
* bugfix: ora ricorda la password OTP</string>
<string name="ChangeLog_0_9_7b">Versione 0.9.7b\n
* aggiornate le traduzioni\n
* bugfix: font Password mancante nella versione 0.9.7; ordina per nome non ordinava i gruppi\n</string>
<string name="ChangeLog_0_9_7"> Versione 0.9.\n
* scrivere il supporto per i database di Keepass 1 (kdb) (beta!\n
* meglio tornare alla tastiera precedente (funziona anche su dispositivi non rootati)\n
* supporto per KeeChallenge con sfide di lunghezza variabile\n
* evitare di prendere screenshot dalle schermate di QuickUnlock e password\n
* ordine inverso per Ordina per Modifica Data (ora discendente)\n
* correzioni di bug: Note ora aggiornate correttamente dopo le modifiche, Viste password ora nascondere correttamente la password su (si spera) tutti i dispositivi, problema fisso che ha permesso di aggiungere una voce due volte, problema fisso con la visualizzazione di un avviso UUID duplicato anche dopo aver risolto il database\n
</string>
<string name="ChangeLog_0_9_6"> Versione 0.9.\n
* consente di importare file chiave e/o file di database locale nella directory interna dell\'app (vedi impostazioni)\n
* consente diverse opzioni di ordinamento\n
* preferenze migliorate per il cambio automatico della tastiera\n
* logo e design di notifica aggiornati, design di Stefano Pignataro (http://www. pstudio. t)\n
* generatore di password ricorda le ultime impostazioni\n
* imposta visibilità di notifica per Android 5 schermata di blocco\n
* ora cancellare il campo password principale quando esce dall\'app senza toccare OK\n
* problema fisso con i linguaggi di input mancanti nell\'impostazione della tastiera su alcuni dispositivi\n
* problema fisso con l\'accensione automatica della tastiera su dispositivi radicati\n
* aggiunto controllo per database corrotti (UUID duplicati)\n
* ricaricare automaticamente il database quando è stato rilevato, risolve i timori di sicurezza per la rivelazione della master password\n
* migliore lucido piccolo layout della tastiera, tema impostazioni tastiera fissa (grazie a Wiktor Ławski)\n
</string>
<string name="ChangeLog_0_9_5"><b>Versione 0.9.5</b>\n
* corregge i problemi con la navigazione delle cartelle (in particolare su Android 4.4)\n
* risolve il problema con il caricamento dei file .kdb (Keepass 1) su Nexus 5 con Android Lollipop\n
* aggiunge un\'opzione per impedire la cattura delle schermate e nascondere KP2A dalla lista delle App Recenti\n
* risolve il problema con l\'archiviazione su Google Drive (edizione normale)\n
* permette i file chiave sui tipi di storage voluti (edizione normale)\n
* aggiornato SDK di Dropbox per includere un aggiornamento di sicurezza (edizione normale)\n
* aggiornati i tool di sviluppo --&gt; aumentata dimensione apk :-(\n
Avevo promesso alcune altre modifiche. Arriveranno con la prossima release - scusate. Ho voluto pubblicare queste correzioni il più presto possibile.</string>
<string name="ChangeLog_0_9_4"><b>Versione 0.9.4</b>\n
* aggiunto supporto ai plug-in: guarda nelle impostazioni per scoprire come ottenerli!\n
* pubblicato QR plug-in (scansiona password, mostra password come QR-code, trasferisci voci ad altri dispositivi KP2A)\n
* pubblicato InputStick plug-in (trasferisci credenziali al PC via bluetooth - richiede chiavetta InputStick USB)\n
* le applicazioni di terze parti ora possono interrogare facilmente KP2A per ottenere le credenziali. Sei uno sviluppatore? Per favore aggiungi il supporto alle tue applicazioni se ti sembra conveniente!\n
* aggiunto supporto a TOTP (compatibile con KeeOTP e TrayTotp)\n
* l\'app non dovrebbe più essere chiusa da Android quando il database è aperto\n
* il database non viene più chiuso quando si abbandona l\'app tramite il pulsante \"indietro\" (vedi impostazioni)\n
* mostra i nomi dei gruppi nei risultati di ricerca (*)\n
* aggiungo un menu contestuale nei risultati di ricerca con l\'opzione \"Passa al gruppo superiore\" (*)\n
* aggiunta un\'opzione per mostrare, nella visualizzazione di una voce, il nome del gruppo a cui la voce appartiene (*)\n
* (*) un grazie a Matthieu per aver implementato queste funzioni!\n
* aggiunto supporto a KeeChallenge (con Yubikey NEO). Grazie a Ben Rush per l\'implementazione del connettore!\n
* migliorata l\'interfaccia utente\n
* corretto un bug nell\'interfaccia di Google Drive\n
* aggiunta un\'opzione per disabilitare la funzione \"donazione\"\n
* l\'icona QuickUnlock ora è nascosta di default su dispositivi Android 4.2+\n</string>
<string name="ChangeLog_0_9_3_r5"><b>Versione 0.9.3 r5</b>\n
* Incorporate correzioni da Xamarin: Keepass2Android è ora compatibile con ART su Android 4.4.2. Finalmente!\n
* Correzioni di errori: errori in sincronizzazione (aggiornamento visualizzazione, corretto controllo per modifiche in http), errori su dispositivi Android 2.x, errori nelle implementazioni di archiviazione con Google Drive e OneDrive, pulizia degli appunti alla chiusura del database, errori in apertura allegati, problemi di visualizzazione della tastiera\n</string>
<string name="ChangeLog_0_9_3"><b>Versione 0.9.3</b>\n
* Nuova tastiera con molti miglioramenti. Vedi le Impostazioni.\n
* Supporto in sola lettura per file kdb (Keepass 1). Sperimentale!\n
* Aggiunto supporto SFTP\n
* Aggiunto soluzione temporanea per il bug con ART (Android 4.4.2)\n
* Bugfix\n</string>
<string name="ChangeLog_0_9_2"><b>Versione 0.9.2</b>\n
* Aggiunto supporto OTP (compatibile con il plugin OtpKeyProv)\n
* Integrato supporto NFC per le OTP dal NEO YubiKey\n
* Aggiornata l\'interfaccia utente\n
* Integrata la libreria di Keepass 2.24\n
* Aggiunta un\'opzione per terminare il processo dell\'app (vedi le Impostazioni)\n
* Migliorata la validazione del certificato SSL\n
* Corretti alcuni errori\n</string>
<string name="ChangeLog_0_9_1"><b>Versione 0.9.1</b>\n
* Aggiunto il supporto per SkyDrive (solo nell\'edizione normale di Keepass2Android)\n
* Corretti i problemi di integrazione con Google Drive\n
* Aggiunto supporto NTLM</string>
<string name="ChangeLog_0_9"><b>Versione 0.9</b> \n
* integrato supporto per Dropbox e Google Drive (database in lettura/scrittura; solo per Keepass2Android edizione regolare)\n
* integrata la selezione dei file (basata su android-filechooser di HBA)\n
* migliorata l\'interfaccia per la creazione di nuovi database\n
* incluso il font DejaVu Sans Mono per la visualizzazione passwords\n
* corretti alcuni errori</string>
<string name="ChangeLog_0_8_6"><b>Versione 0.8.6</b>\n
* Supporto per cifratura Twofish\n
* Consentita la modifica dei gruppi\n
* Consentito lo spostamento di voci e gruppi\n
* L\'icona QuickUnlock può essere resa trasparente (vedi le impostazioni)\n
* Correzioni di errori</string>
<string name="ChangeLog_0_8_5"><b>Versione 0.8.5</b>\n
* i file remoti vengono mantenuti nella cache locale dell\'applicazione per permetterne l\'uso offline (compresa la modifica e la successiva sincronizzazione). Vedi le impostazioni. \n
* Icona di notifica per visualizzare lo stato del blocco del database (vedi Impostazioni)\n
* Migliorato il rilevamento dello stato del blocco del database in alcune circostanze \n
* I file dei database vengono caricati in memoria mentre stai digitando la password per aumentare la velocità di caricamento (vedi Impostazioni) \n
* Le voci possono essere aggiunte al gruppo principale \n
* Correzione di errori (risoluzione campi con riferimenti, problemi con la tastiera su dispositivi italiani e cinesi)</string>
<string name="ChangeLog_0_8_4"><b>Versione 0.8.4</b>\n
* Le modifiche al database esterno vengono rilevate ed unite durante il salvataggio\n
* Migliorate le performance durante il caricamento\n
* Migliorata la barra di ricerca con suggerimenti\n
* Nuovo logo dell\'App!\n
* Aggiunto supporto al formato .kdbp per apertura e salvataggio più veloci\n
* Migliorata la modifica delle stringhe aggiuntive e la visualizzazione nascosta quando sono protette\n
Grazie ad Alex Vallat per il suo contributo al codice!\n
Grazie a Niki Hüttner (www.close-cut.de) per il logo!\n</string>
<string name="ChangeLog_0_8_3"><b> Versione 0.8.3 </b>\n
* Le voci nome utente e indice TAN vengono visualizzati nella lista delle voci di immissione (vedi le impostazioni)\n
* Le voci possono essere create se la ricerca da browser non restituisce alcun risultato\n
* La tastiera KP2A offre possibilità di ricercare le credenziali per l\'applicazione attuale\n
* L\'applicazione si chiude automaticamente dopo aver selezionato una voce per l\'uso dalla tastiera\n
* La finestra di selezione della tastiera si apre automaticamente dopo la ricerca di URL (vedi le impostazioni)\n
* I segnaposto nei campi di immissione vengono sostituiti prima della copia (la maggior parte dei segnaposto sono supportati)\n
* Correzioni di errori minori </string>
<string name="ChangeLog_0_8_2"><b>Versione 0.8.2</b>\n
* Supporto per la Digest Authentication in WebDAV\n
* Correzione di errori (OI File manager, Open URL)</string>
<string name="ChangeLog_0_8_1"><b>Versione 0.8.1</b>\n
* KP2A Offline e \"Online\" possono di nuovo essere installati insieme\n
* Aggiunte nuove traduzioni (grazie a tutti i collaboratori!)</string>
<string name="ChangeLog_0_8"><b>Versione 0.8</b>\n
* Migliorata l\'interfaccia utente in particolare per i dispositivi con Android 4.x\n
* Consentito l\'utilizzo di gestori di file personali per selezionare file esistenti\n
* Aggiunto un modo più sicuro per l\'apertura degli allegati (tramite cartella di cache)\n
* sistemati alcuni errori nella finestra di modifica\n
* probabilmente aggiunti nuovi errori :-)</string>
<string name="ChangeLog_keptDonate">Estesa la possibilità di donare una birra o qualcos\'altro</string>
<string name="ChangeLog_0_7"><b>Versione 0.7</b>\n
* Aumentata la velocità di caricamento: l\'elaborazione delle chiavi ora è 10 volte più veloce!\n
* Aggiunta la tastiera virtuale di Keepass2Android: usa questa tastiera quando inserisci le credenziali. Ti metterà al riparo dagli sniffer delle password basati sugli appunti (disabilita le vecchie notifiche degli appunti nelle impostazioni)\n
* Aggiunta l\'opzione per donare una birra o qualcos\'altro (vedi menu)</string>
<string name="ChangeLog"><b>Versione 0.6.2</b>\n
* Integrazione con Google Drive/Dropbox/... : usa l\'app ufficiale di Google Drive o Dropbox App e apri un qualunque file \".kdbx\". In questo modo si aprirà KP2A.\n
* Migliorato il dialogo di ricerca\n
* Migliorati i risultati di ricerca per le URL condivise con sottodomini\n
* Aggiunte al menu le opzioni per inviare feedback, valutazioni e per tradurre l\'app\n
\n
<b>Versione 0.6.1</b>\n
* Aggiunto il rilevamento di modifiche in background (es.: dovute ad un\'app di sincronizzazione)\n
* Migliorata la ricerca delle URL dal browser\n
* Aggiunta una richiesta di conferma prima di annullare le modifiche\n
\n
<b>Versione 0.6</b>\n
Prima release pubblica
  </string>
<string-array name="clipboard_timeout_options">
<item>30 secondi</item>
<item>1 minuto</item>
@@ -1128,8 +951,8 @@ Prima release pubblica
</string-array>
<string-array name="sftp_auth_modes">
<item>Password</item>
<item>Chiave privata/pubblica di KP2A</item>
<item>Chiave privata personalizzata</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
<item>Ignora gli errori di convalida del certificato</item>
@@ -1147,10 +970,6 @@ Prima release pubblica
<string name="autofill_enable_for">Attiva Compilazione automatica per %1$s</string>
<string name="invalid_link_association">Non è possibile associare il dominio web %1$s con l\'app %2$s</string>
<string name="enable_fingerprint_hint">Keepass2Android ha rilevato il sensore biometrico. Desideri attivare lo sblocco biometrico per questo database?</string>
<string name="post_notifications_dialog_title">Consenti le notifiche</string>
<string name="post_notifications_dialog_message">Keepass2Android può mostrare le notifiche con i pulsanti per copiare valori come password e TOTP negli appunti, o per far apparire la tastiera integrata. Questo è utile per trasferire i valori in altre applicazioni senza passare a Keepass2Android ripetutamente. Vuoi abilitare tali notifiche?</string>
<string name="post_notifications_dialog_allow">Consenti le notifiche</string>
<string name="post_notifications_dialog_disable">Disabilita questa funzione</string>
<string name="post_notifications_dialog_notnow">Non ora</string>
<string name="understand">Ho capito</string>
<string name="dont_show_again">Non mostrare più</string>
@@ -1170,11 +989,5 @@ Prima release pubblica
<string name="AutofillWarning_Intro">Stai per inserire le credenziali per il dominio \"%1$s\" nell\'app \"%2$s\"</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Se ti fidi di \"%2$s\" ad appartenere a \"%1$s\" o se ti fidi dell\'app \"%2$s\" a non abusare delle credenziali (es. perché si tratta di un\'applicazione sicura), è possibile continuare. Altrimenti si prega di annullare.</string>
<string name="AutofillWarning_trustAsBrowser">Accetta sempre in \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Cambia tastiera quando terminato</string>
<string name="kp2a_switch_on_sendgodone_summary">Torna indietro quando premi invia/vai/fatto</string>
<string name="qr_scanning_error_no_google_play_services">La scansione del codice QR richiede Google Play Services. Installa o aggiorna Google Play Services sul tuo dispositivo.</string>
<string name="english_ime_settings">Impostazioni tastiera Keepass2Android</string>
<string name="autoswitch_enabled_but_not_setup">Nota: Hai abilitato App - Impostazioni - Accesso password - Cambio di tastiera - Tastiera automatica, ma non sembra essere configurata correttamente.</string>
<string name="switch_keyboard_for_totp_enabled">Nota: Hai abilitato App - Accesso password - Servizio di autocompilazione - Autocompilazione per le voci TOTP. Questo può causare la visualizzazione di questa finestra quando si apre una voce con un TOTP.</string>
<string name="switch_keyboard_inside_kp2a_enabled">Nota: Hai abilitato App - Sicurezza - Usa la tastiera integrata all\'interno di Keepass2Android. Questo può causare la visualizzazione di questa finestra quando si apre l\'app o si modifica una voce.</string>
</resources>

View File

@@ -718,20 +718,6 @@
<string name="EntryChannel_desc">選択中のエントリーへ簡単にアクセスするための通知</string>
<string name="CloseDbAfterFailedAttempts">生体認証ロック解除に 3 回失敗すると、データベースを閉じます。</string>
<string name="WarnFingerprintInvalidated">警告! 生体認証は、例えば、新たな指紋をデバイスに追加したときなどに Android によって無効にされる可能性があります。常にマスターパスワードによる解除方法を覚えておいてください!</string>
<string-array name="ChangeLog_1_12">
<item>Xamarin Android から .net 8 にアップグレード</item>
<item>ターゲットを SDK 34 にアップグレード</item>
<item>ユーザーインターフェイスを Material 3 にアップグレード</item>
<item>Compose アプリでの自動入力機能を改善</item>
<item>自動入力と検索でホスト名の一致条件を修正</item>
<item>Fix issue with password generator</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>OneDrive SDK をバージョン 5.68 にアップグレード</item>
<item>Dropbox SDK をバージョン 7.0.0 にアップグレード</item>
<item>Gradle、NewtonsoftJson、FluentFTP、MegaApiClient、okhttp をアップグレード</item>
<item>WebDav ファイル選択のバグを修正</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>検索と TOTP 一覧 (TOTP エントリーが存在する場合) のフローティングアクションボタンを追加</item>
<item>タイムアウト表示を追加し、より目立つように TOTP フィールドの表示を改善</item>

View File

@@ -548,7 +548,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (pasta KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Se você não quiser dar acesso KP2A para o seu Dropbox completo, você pode selecionar esta opção. Ele irá solicitar somente acesso para a pasta Apps/Keepass2Android. Isto é especialmente adequado ao criar um novo banco de dados. Se você já tiver um banco de dados, clique nesta opção para criar a pasta, em seguida, colocar o arquivo dentro da pasta (a partir de seu PC) e em seguida, selecione esta opção novamente para abrir o arquivo.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Observação: o Google está restringindo o acesso ao Google Drive a partir de aplicativos para cada vez mais usuários. Se a implementação integrada do Google Drive não funcionar, use o seletor de arquivos do sistema e selecione o Google Drive lá!</string>
<string name="filestoragename_gdriveKP2A">Google Drive (Arquivos KP2A)</string>
<string name="filestoragehelp_gdriveKP2A">Se você não quiser dar acesso KP2A ao seu Google Drive completo, você pode selecionar esta opção. Observe que você precisa criar um arquivo de banco de dados primeiro, os arquivos existentes não são visíveis para o aplicativo. Escolha esta opção na tela Criar banco de dados ou, se você já abriu um banco de dados, exportando o banco de dados escolhendo esta opção.</string>
<string name="filestoragename_pcloud">PCloud (Pasta KP2A)</string>
@@ -722,20 +721,6 @@
<string name="EntryChannel_desc">Notificação para simplificar o acesso à entrada selecionada.</string>
<string name="CloseDbAfterFailedAttempts">Fechar banco de dados após três tentativas de desbloqueio biométrico falhadas.</string>
<string name="WarnFingerprintInvalidated">Alerta! Autenticação biométrica pode ser invalidada pelo Android, por exemplo: depois de adicionar uma nova digital nas configurações do seu dispositivo. Esteja certo de sempre saber como desbloquear com sua senha mestra!</string>
<string-array name="ChangeLog_1_12">
<item>Atualizado de Xamarin Android para .NET 8</item>
<item>Atualizado para o Target SDK 34</item>
<item>Atualizado para a interface de usuário Material 3</item>
<item>Melhorado o preenchimento automático para trabalhar com aplicativos Compose</item>
<item>Corrigido a correspondência do nome do host em preenchimento automático e pesquisa</item>
<item>Corrigido um problema com gerador de senhas</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Atualizado o OneDrive SDK para a versão 5.68</item>
<item>Dropbox SDK atualizado para a versão 7.0.0</item>
<item>Atualizado Gradle, Newtonsoftjson, Fluentftp, Megaapiclient e okhttp</item>
<item>Correção na seleção de arquivo WebDav</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Adicionados botões de ação flutuantes para pesquisa e visão geral do TOTP (se entradas TOTP estiverem presentes).</item>
<item>Exibição aprimorada de campos TOTP adicionando um indicador de tempo limite e mostrando-o com mais destaque.</item>
@@ -1199,12 +1184,5 @@
<string name="AutofillWarning_Intro">Você esta prestes a inserir credenciais do domínio \"%1$s\" no app \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Se você confia em \"%2$s\" para pertencer \"%1$s\" ou se você confia no app \"%2$s\" a não mal-usar as credenciais (ex. por causa de um app de navegador confiável), é ok para continuar. Se não, por favor cancele.</string>
<string name="AutofillWarning_trustAsBrowser">Aceitar sempre em \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Voltar quando terminar</string>
<string name="kp2a_switch_on_sendgodone_summary">Voltar ao pressionar enviar/ir/concluído</string>
<string name="qr_scanning_error_no_google_play_services">A leitura de código QR requer o Google Play Services. Instale ou atualize o Google Play Services no seu dispositivo.</string>
<string name="english_ime_settings">Configurações do teclado Android</string>
<string name="autoswitch_enabled_but_not_setup">Nota: Você ativou o Aplicativo - Configurações - Acesso por senha - Troca de teclado - Troca automática de teclado, mas não parece estar configurado corretamente.</string>
<string name="switch_keyboard_for_totp_enabled">Nota: você ativou o Aplicativo - Acesso por senha - Serviço de preenchimento automático - Preenchimento automático para entradas TOTP. Isso pode fazer com que essa janela seja exibida quando você abre uma entrada com um TOTP.</string>
<string name="switch_keyboard_inside_kp2a_enabled">Nota: Você ativou o Aplicativo - Segurança - Usar o teclado embutido dentro do Keepass2Android. Isso pode fazer com que essa janela seja exibida quando você abre o aplicativo ou edita uma entrada.</string>
<string name="switch_keyboard_on_search_enabled">Nota: Você ativou o Aplicativo - Segurança - Acesso por senha - Troca de teclado - Alternar teclado. Isso pode fazer com que essa janela seja exibida quando você pesquisar uma entrada no navegador.</string>
</resources>

View File

@@ -5,11 +5,11 @@
<string name="CreditsText">Interfaţa cu utilizatorul este bazată pe un port al KeepassDroid dezvoltat de Brian Pellin. Codul pentru operaţiunile cu baza de date este bazat pe KeePass de Dominik Reichl. Robotul Android este reprodus sau modificate din materiale create şi împărtăşite de Google şi utilizate în conformitate cu condiţiile descrise de licenţa Creative Commons Attribution 3.0.</string>
<string name="CreditsTextSFTP">Suportul pentru SFTP este implementat folosind librăria JSch sub licență BDS, creată de JCraft, Inc.</string>
<string name="CreditsIcons">Iconița cu un ciocan este creată de John Caserta de la proiectul Noun. Cea cu un pinguin este realizată de Jon Testa de la același proiect. Iconița cu un măr este creată de Ava Rowell de la proiectul Noun fiind și ea. Iconița-imagine este de pe https://icons8.com/icon/5570/Picture.</string>
<string name="accept">Acceptă</string>
<string name="accept">Accepta</string>
<string name="deny">Interzice</string>
<string name="add_entry">Adăugă o înregistrare</string>
<string name="edit_entry">Editează înregistrarea</string>
<string name="add_url_entry">Creare intrare pentru URL</string>
<string name="edit_entry">Editeaza inregistrare</string>
<string name="add_url_entry">Creați înregistrare pentru URL</string>
<string name="add_group">Adăugă un grup</string>
<string name="add_group_title">Adăugare grup</string>
<string name="edit_group_title">Editează Grupul</string>
@@ -31,7 +31,7 @@
<string name="NavigationToGroupCompleted_message">Grupul afișat este acum: %1$s</string>
<string name="AutofillDisabledQueriesPreference_title">Obiective de completare automată dezactivate</string>
<string name="AutofillDisabledQueriesPreference_summary">Vizualizează o listă de aplicații și site-uri pentru care completarea automată a fost dezactivată</string>
<string name="OfferSaveCredentials_summary">Dacă este activat, Android va întreba dacă vrei să salvezi acreditările după ce ai introdus manual datele în câmpurile care pot fi completate automat.</string>
<string name="OfferSaveCredentials_summary">Dacă este activat, Android va întreba dacă vrei să salvezi credențialele după ce ai introdus manual datele în câmpurile care pot fi completate automat.</string>
<string name="OfferSaveCredentials_title">Oferă salvarea datelor de autentificare</string>
<string name="ShowGroupInEntry_title">Arată numele grupului în vizualizarea înregistrărilor</string>
<string name="unknown_uri_scheme">Scuze! Keepass2Android nu poate interpreta URI-ul returnat %1$s. Te rog să contactezi producătorul!</string>
@@ -47,15 +47,15 @@
<string name="keyboard_prefs">Tastatură</string>
<string name="export_prefs">Exportă baza de date...</string>
<string name="fingerprint_prefs">Deblocare biometrică</string>
<string name="import_db_prefs">Importă baza de date în dosarul intern</string>
<string name="import_keyfile_prefs">Importă fișierul cheie în dosarul intern</string>
<string name="import_db_prefs">Importă baza de date în folderul intern</string>
<string name="import_keyfile_prefs">Importă fișierul cheie în folderul intern</string>
<string name="export_keyfile_prefs">Importă fișierul cheie din folderul intern</string>
<string name="keyboardswitch_prefs">Comutare tastaturi</string>
<string name="OnlyAvailableForLocalFiles">Valabil doar pentru fișiere locale.</string>
<string name="FileIsInInternalDirectory">Fișierul este stocat în dosarul intern.</string>
<string name="DatabaseFileMoved">Baza de date a fost copiată în dosarul intern. Apasă Ok pentru a o deschide din noua locație. Notă: Nu uita să exporți periodic baza de date pe un spațiu de stocare sigur!</string>
<string name="KeyfileMoved">Fișierul-cheie a fost copiat în dosarul intern. Asigură-te că ai o copie de rezervă înainte de al șterge din locația curentă!</string>
<string name="KeyfileMoveRequiresRememberKeyfile">Imposibil de folosit dosarul intern când locația fișierului cheie nu este memorară. Schimbă preferințele de securitate.</string>
<string name="FileIsInInternalDirectory">Fișierul este stocat în folderul intern.</string>
<string name="DatabaseFileMoved">Baza de date a fost copiată în folderul intern. Apasă Ok pentru a o deschide din noua locație. Notă: Nu uita să exporți periodic baza de date pe un spațiu de stocare sigur!</string>
<string name="KeyfileMoved">Fișierul-cheie a fost copiat în folderul intern. Asigură-te că ai o copie de rezervă înainte de al șterge din locația curentă!</string>
<string name="KeyfileMoveRequiresRememberKeyfile">Imposibil de folosit folderul intern când locația fișierului cheie nu este memorară. Schimbă preferințele de securitate.</string>
<string name="unlock_database_button">Deblocare</string>
<string name="unlock_database_title">Deblocarea bazei de date</string>
<string name="brackets">Paranteze</string>
@@ -83,22 +83,22 @@
<string name="ellipsis">\u2026</string>
<string name="copy_to_clipboard">Copiază în clipboard</string>
<string name="SystemLanguage">Limba sistemului</string>
<string name="fingerprint_description">Autentifică-te pentru a continua</string>
<string name="fingerprint_fatal">Nu se poate configura Deblocarea biometrică:</string>
<string name="fingerprint_description">Vă rugăm să vă autentificați pentru a continua</string>
<string name="fingerprint_fatal">Nu se poate seta deblocarea prin amprentă:</string>
<string name="fingerprint_not_recognized">Autentificare biometrică eșuată. Încearcă din nou</string>
<string name="fingerprint_success">Autentificarea biometrică a reușit</string>
<string name="fingerprint_success">Autentificarea cu amprentă a reușit.</string>
<string name="fingerprint_os_error">Deblocarea biometrică necesită Android 6.0 sau mai nou.</string>
<string name="fingerprint_hardware_error">Nici un hardware biometric detectat.</string>
<string name="fingerprint_no_enrolled">Nu ai configurat autentificarea biometrică pe acest dispozitiv. Accesează mai întâi setările sistemului.</string>
<string name="fingerprint_hardware_error">Nu s-a detectat dispozitiv pentru recunoaștere a amprentei.</string>
<string name="fingerprint_no_enrolled">Nu ați configurat autentificarea biometrică pe acest dispozitiv. Vă rugăm să mergeți mai întâi la setările sistemului.</string>
<string name="disable_fingerprint_unlock">Dezactivează deblocarea biometrică</string>
<string name="enable_fingerprint_unlock">Activează deblocarea biometrică completă</string>
<string name="enable_fingerprint_quickunlock">Activează deblocarea biometrică pentru QuickUnlock</string>
<string name="fingerprint_unlock_failed">Deblocarea biometrică a eșuat. Cheia de decriptare a fost invalidată de Android OS. Acest lucru se întâmplă de obicei dacă o autentificare biometrică sau setările de securitate au fost modificate. </string>
<string name="fingerprint_disabled_wrong_masterkey">Deblocarea bazei de date a eșuat: Cheie compozită invalidă. Deblocarea biometrică a fost dezactivată deoarece aparent parola principală stocată nu mai este validă. </string>
<string name="fingerprint_reenable">Vă rugăm reactivați deblocarea biometrică pentru noua parolă principală.</string>
<string name="fingerprint_reenable2">Deblochează cu parola și apoi reactivează deblocarea biometrică în setările bazei de date.</string>
<string name="fingerprint_reenable2">Vă rugăm să deblocați cu parola dvs. și apoi reactivați deblocarea biometrică în setările bazei de date.</string>
<string name="FingerprintInitFailed">Inițializarea autentificării biometrice a eșuat. </string>
<string name="FingerprintSetupFailed">Criptarea datelor a eșuat. Acest lucru se poate întâmpla dacă adaugi sau elimini amprentele din setările de sistem în timp ce Keepass2Android așteaptă amprenta.</string>
<string name="FingerprintSetupFailed">Criptarea datelor a eșuat. Acest lucru se poate întâmpla dacă adăugi sau elimini amprentele din setările de sistem în timp ce Keepass2Android așteaptă amprenta.</string>
<string name="enable_fingerprint_unlock_Info">Aceasta va stoca parola principală pe acest dispozitiv, criptată cu Keystore Android și protejată folosind autentificarea biometrică. Permite deblocarea bazei de date doar folosind biometria.</string>
<string name="enable_fingerprint_quickunlock_Info">Permite utilizarea autentificării biometrice în locul codului QuickUnlock. Nu stochează nicio informație legată de parola principală.</string>
<string name="enter_filename">Alegeți numele bazei de date</string>
@@ -131,7 +131,7 @@
<string name="error_filename_required">Este necesar un nume fișier.</string>
<string name="error_file_not_create">Nu s-a putut crea fișierul</string>
<string name="error_invalid_db">Bază de date invalidă.</string>
<string name="error_invalid_path">Cale incorectă.</string>
<string name="error_invalid_path">Cale invalidă.</string>
<string name="error_no_name">Este necesar un nume.</string>
<string name="error_nopass">Este necesară o parolă sau un fișier cheie.</string>
<string name="error_pass_gen_type">Trebuie selectat cel puțin un tip de generare de parole</string>
@@ -139,7 +139,7 @@
<string name="error_rounds_not_number">Etapele trebuie să fie un număr.</string>
<string name="error_param_not_number">Parametru trebuie să fie un număr.</string>
<string name="error_title_required">Este necesar un titlu.</string>
<string name="error_wrong_length">Introdu un număr întreg pozitiv în câmpul de lungime</string>
<string name="error_wrong_length">Introduceți un număr întreg pozitiv în câmpul de lungime</string>
<string name="FileNotFound">Fișierul nu s-a găsit.</string>
<string name="file_browser">Browser fișiere</string>
<string name="generate_password">Generare parolă</string>
@@ -151,7 +151,6 @@
<string name="hint_keyfile">fişier cheie</string>
<string name="hint_length">lungime</string>
<string name="hint_pass">parola</string>
<string name="hint_keyfile_path">Calea cheii private SSH</string>
<string name="hint_login_pass">Parolă</string>
<string name="hint_title">nume</string>
<string name="hint_url">URL</string>
@@ -172,15 +171,11 @@
<string name="MaskedPassword">*****</string>
<string name="maskpass_title">Maschează parola</string>
<string name="maskpass_summary">Ascunde parolele în mod implicit</string>
<string name="masktotp_title">Mascare câmp TOTP</string>
<string name="masktotp_summary">Ascunde câmpul TOTP în mod implicit</string>
<string name="NoAutofillDisabling_title">Nicio opțiune pentru a dezactiva autocompletarea</string>
<string name="NoAutofillDisabling_summary">Dacă este activat, aplicația nu va afișa opțiunea de a dezactiva completarea automată pentru înregistrări specifice.</string>
<string name="menu_about">Despre</string>
<string name="menu_change_key">Schimbă cheia principală</string>
<string name="menu_copy_pass">Copiază parola</string>
<string name="menu_copy_user">Copiază nume utilizator</string>
<string name="menu_copy_totp">Copiază TOTP</string>
<string name="menu_create">Crează</string>
<string name="menu_app_settings">Setări</string>
<string name="menu_db_settings">Setări bază de date</string>
@@ -208,8 +203,8 @@
<string name="no_keys">Nu sunt înregistrări în baza de date sau grup.</string>
<string name="no_results">Nici un rezultat de căutare</string>
<string name="no_url_handler">Niciun handler pentru acest URL.</string>
<string name="open_recent">Deschide baza de date recentă (apasă pentru a deschide)</string>
<string name="omitbackup_title">Nu căuta înregistrări în backup și coșul de gunoi</string>
<string name="open_recent">Deschideți baza de date recentă (apăsați pentru a deschide)</string>
<string name="omitbackup_title">Nu căuta înregistrări în backup şi coşul de gunoi</string>
<string name="omitbackup_summary">Omite grupurile \'Backup\' şi \'Coş de gunoi\' din toate căutările</string>
<string name="pass_filename">Nume fişier bază de date KeePass</string>
<string name="password_title">Introduceţi parola bazei de date</string>
@@ -224,12 +219,12 @@
<string name="rijndael">Rijndael (AES)</string>
<string name="root">Root</string>
<string name="AutoReturnFromQuery_title">Revino în automat din ecranul de interogare</string>
<string name="AutoReturnFromQuery_summary">Când cauți o intrare pentru o aplicație sau o pagină web: revine automat de pe ecranul de interogare dacă există o singură intrare potrivită în baza de date.</string>
<string name="AutoReturnFromQuery_summary">Când căutați o intrare pentru o aplicație sau un sit în linie: reveniți automat de pe ecranul de interogare dacă există o singură înregistrare potrivită în baza de date.</string>
<string name="KeyDerivFunc">Funcția de derivare a cheii</string>
<string name="rounds">Etape de criptare</string>
<string name="rounds_explaination">Mai multe etape de criptare oferă protecție împotriva atacurilor prin forță brută, dar pot încetini semnificativ încărcarea și salvarea.</string>
<string name="rounds_explaination">Mai multe etape de criptare oferă protecţie împotriva atacurilor prin forță brută, dar pot încetini semnificativ încărcarea şi salvarea.</string>
<string name="rounds_hint">etape</string>
<string name="argon2memory">Memorie pentru Argon 2 (octeți)</string>
<string name="argon2memory">Memorie pentru Argon 2 (octeţi)</string>
<string name="argon2parallelism">Paralelismul pentru Argon 2</string>
<string name="database_name">Numele bazei de date</string>
<string name="default_username">Nume utilizator implicit pentru intrări noi</string>
@@ -250,7 +245,7 @@
<string name="at_least_one_from_each_group">Cel puțin unul din fiecare grup</string>
<string name="exclude_lookalike">Exclude caractere asemănătoare</string>
<string name="password_generation_profile">Profil</string>
<string name="save_password_generation_profile_text">Introdu numele profilului pentru a fi salvat. Introdu un nume existent pentru suprascrie.</string>
<string name="save_password_generation_profile_text">Introduceți numele profilului pentru a fi salvat. Introduceți un nume existent pentru suprascrie.</string>
<string name="hint_wordcount">Numărul de cuvinte din expresia de acces</string>
<string name="hint_wordseparator">Separator cuvinte</string>
<string-array name="PasswordGeneratorModes">
@@ -270,18 +265,18 @@
<string name="search_in">Căutare în</string>
<string name="select_other_entry">Selectaţi o altă înregistrare</string>
<string name="select_group_then_add">Deschideți grupul dorit, apoi apăsaţi \"%1$s\"!</string>
<string name="insert_element_here">Introdu aici</string>
<string name="insert_element_here">Introduceţi aici</string>
<string name="twofish">Twofish</string>
<string name="underline">Subliniere</string>
<string name="unsupported_db_version">Versiunea bazei de date nesuportată.</string>
<string name="uppercase">Litere mari</string>
<string name="warning_read_only">Cardul SD este momentan doar în citire. Nu vei putea salva modificările la baza de date.</string>
<string name="warning_unmounted">Cardul SD nu este montat momentan. Nu vei putea încărca sau crea baza de date.</string>
<string name="warning_read_only">Cardul sd este momentan read-only. Nu veți putea salva modificările la baza de date.</string>
<string name="warning_unmounted">Cardul sd nu este montat momentan. Nu veți putea încărca sau crea baza de date.</string>
<string name="version_label">Versiune</string>
<string name="version_history">Istoric versiuni</string>
<string name="author">Keepass2Android este creat de către Philipp Crocoll.</string>
<string name="further_authors">Mulțumită contribuţiilor de cod de către %1$s.</string>
<string name="designers">Pictogramă și design mulțumită contribuțiilor făcute de %1$s.</string>
<string name="designers">Icoană și design mulțumită contribuțiilor făcute de %1$s.</string>
<string name="supporters">Mulțumită sprijinului financiar din partea %1$s.</string>
<string name="credit_plugin1">Plugin-ul pentru cifrul Twofish a fost creat de Scott Greenberg şi este inclus în KP2A.</string>
<string name="credit_android_filechooser">android-filechooser a fost creat de Hai Bison</string>
@@ -289,13 +284,11 @@
<string name="please_note">Vă rugăm să reţineţi</string>
<string name="contributors">Contribuitori</string>
<string name="regular_expression">Regular expression</string>
<string name="AlwaysMergeOnConflict_title">Se îmbină întotdeauna la conflict</string>
<string name="AlwaysMergeOnConflict_summary">Când KeepAss2Android detectează că fișierul de la distanță a fost modificat, contopește întotdeauna modificările locale cu modificările de la distanță.</string>
<string name="TanExpiresOnUse_title">TAN expiră la utilizare</string>
<string name="TanExpiresOnUse_summary">Marchează înregistrările TAN ca expirate la utilizarea lor</string>
<string name="ShowUsernameInList_title">Afișează numele utilizatorului în listă</string>
<string name="ShowUsernameInList_summary">Afișează numele utilizatorului sub înregistrări. Util pentru conturi sau TAN-uri multiple.</string>
<string name="RememberRecentFiles_title">Memorizează bazele de date</string>
<string name="ShowUsernameInList_title">Afişează numele utilizatorului în listă</string>
<string name="ShowUsernameInList_summary">Afişează numele utilizatorului sub înregistrări. Util pentru conturi sau TAN-uri multiple.</string>
<string name="RememberRecentFiles_title">Reţine bazele de date</string>
<string name="RememberRecentFiles_summary">Reţine baze de date deschise recent si afişează-le în ecranul de deschidere a bazelor de date.</string>
<string name="NoDalVerification_title">Fără verificare DAL</string>
<string name="NoDalVerification_summary">Dezactivează verificarea dacă domeniul și pachetul aplicației se potrivesc</string>
@@ -305,16 +298,16 @@
<string name="kp2a_findUrl">Găsește parola</string>
<string name="excludeExpiredEntries">Exclude înregistrările expirate</string>
<string name="search_options">Opţiuni</string>
<string name="caseSensitive">Sensibil la majuscule</string>
<string name="start_open_file">Deschide un fișier...</string>
<string name="caseSensitive">Case sensitive</string>
<string name="start_open_file">Deschide fişier...</string>
<string name="start_create">Creează bază de date nouă...</string>
<string name="start_open_url">Deschide URL...</string>
<string name="start_create_import">Importă fișier în bază de date nouă...</string>
<string name="start_create_import">Importă fişier în bază de date nouă...</string>
<string name="enter_filename_details_url">Trebuie specificat URL-ul complet inclusiv protocolul, de exemplu http://.</string>
<string name="enter_filename_details_create_import">Fișierul de importat va fi selectat la pasul următor.</string>
<string name="enter_filename_details_create_import">Fişierul de importat va fi selectat la pasul următor.</string>
<string name="enable_quickunlock">Activare QuickUnlock</string>
<string name="QuickUnlock_label">Introdu ultimele %1$d caractere ale parolei.:</string>
<string name="QuickUnlock_label_secure">Introdu codul QuickUnlock:</string>
<string name="QuickUnlock_label">Introduceţi ultimele %1$d caractere ale parolei dvs.:</string>
<string name="QuickUnlock_label_secure">Introduceți codul QuickUnlock:</string>
<string name="QuickUnlock_button">QuickUnlock!</string>
<string name="QuickUnlock_lockButton">Închide baza de date</string>
<string name="QuickUnlockDefaultEnabled_title">Activează QuickUnlock implicit</string>
@@ -329,8 +322,6 @@
<string name="QuickUnlockLength_summary">Numărul maxim de caractere utilizate ca şi parolă QuickUnlock.</string>
<string name="QuickUnlockHideLength_title">Ascunde lungimea QuickUnlock</string>
<string name="QuickUnlockHideLength_summary">Dacă este activat, lungimea codului QuickUnlock nu este afișat pe ecranul QuickUnlock.</string>
<string name="QuickUnlockKeyFromDatabase_title">Cheie QuickUnlock din intrarea bazei de date</string>
<string name="QuickUnlockKeyFromDatabase_summary">Dacă baza de date activă conține o intrare cu titlul QuickUnlock în grupul său rădăcină, parola acestei intrări este utilizată ca cod QuickUnlock.</string>
<string name="QuickUnlock_fail">QuickUnlock a eşuat: parolă incorectă!</string>
<string name="SaveAttachmentDialog_title">Salvaţi ataşament</string>
<string name="SaveAttachmentDialog_text">Selectaţi unde se salvează ataşamentul.</string>
@@ -349,14 +340,9 @@
<string name="protection">Câmp protejat</string>
<string name="add_binary">Ataşează fişier...</string>
<string name="add_extra_string">Adaugă câmp adiţional</string>
<string name="configure_totp">Configurare TOTP</string>
<string name="totp_secret_key">Cheie secretă</string>
<string name="totp_encoding_rfc6238">Setări implicite pentru jetonul RFC6238</string>
<string name="totp_encoding_steam">Setări pentru jetonul Steam</string>
<string name="totp_encoding_custom">Setări jeton personalizat</string>
<string name="totp_time_step">Pas temporal</string>
<string name="totp_length">Lungime cod</string>
<string name="totp_scan">Scanare cod QR</string>
<string name="delete_extra_string">Şterge câmp adiţional</string>
<string name="database_loaded_quickunlock_enabled">%1$s: Blocat. QuickUnlock activat.</string>
<string name="database_loaded_unlocked">%1$s: Deblocat.</string>
@@ -399,37 +385,18 @@
<string name="ShowSeparateNotifications_summary">Arată notificări separate pentru copierea numelui utilizatorului și a parolei în clipboard și activarea tastaturii.</string>
<string name="AccServiceAutoFill_prefs">Serviciu de accesibilitate de completare automată</string>
<string name="AutoFill_prefs">Serviciu de completare automată</string>
<string name="AutoFillTotp_prefs_ShowNotification_summary">Când se completează automat o înregistrare cu TOTP, afișează notificarea cu un buton Copiere TOTP</string>
<string name="AutoFillTotp_prefs_ShowNotification_title">Arată notificarea introducerii</string>
<string name="AutoFillTotp_prefs_title">Autocompletare pentru intrările TOTP</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_title">Copiază TOTP în clipboard</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_summary">Atunci când se completează automat o intrare cu TOTP, se copiază TOTP în clipboard</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_summary">Atunci când se completează automat o intrare cu TOTP, se activează tastatura încorporată. Tastatura are un buton TOTP.</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_title">Activare tastatură încorporată</string>
<string name="TotpCopiedToClipboard">TOTP copiat în clipboard</string>
<string name="ShowKp2aKeyboardNotification_title">Notificare tastatură KP2A</string>
<string name="ShowKp2aKeyboardNotification_summary">Oferă întreaga înregistrare folosind tastatura KP2A (recomandat).</string>
<string name="OpenKp2aKeyboardAutomatically_title">Comută tastatura</string>
<string name="OpenKp2aKeyboardAutomatically_summary">Deschide fereastra de selecție a tastaturii când o înregistrare este disponibilă prin tastatura KP2A după căutarea din browser.</string>
<string name="kp2a_switch_rooted">Schimbare automată a tastaturii</string>
<string name="kp2a_switch_rooted_summary">Comutare automată la tastatura KP2A la deschiderea intrării. Necesită plugin-ul KeyboardSwap corect configurat sau unu dispozitiv cu access la root și a aplicației Secure Settings cu System+.</string>
<string name="get_keyboardswap">Instalare Plugin KeyboardSwap</string>
<string name="get_keyboardswap_summary">Acest plugin permite comutarea la tastatura KP2A fără root. Necesită ADB. </string>
<string name="OpenKp2aKeyboardAutomaticallyOnlyAfterSearch_title">Comută automat tastatura doar după căutare</string>
<string name="OpenKp2aKeyboardAutomaticallyOnlyAfterSearch_summary">Comută automat la tastatura KP2A doar după utilizarea funcției Share URL (și nu când se deschide o înregistrare în alt fel)</string>
<string name="AutoSwitchBackKeyboard_title">Comutare înapoi la tastatură</string>
<string name="AutoSwitchBackKeyboard_summary">Comută la tastatura precedentă când nici o înregistrare este deschisă.</string>
<string name="ShowUnlockedNotification_title">Notificare cât timp e deblocat</string>
<string name="ShowUnlockedNotification_summary">Afişează o notificare în timp ce baza de date este deblocată.</string>
<string name="IconVisibilityInfo_Android8_text">Android 8 a introdus un nou comportament pentru notificări. Dacă dorești să ascunzi pictograma pentru notificările KeepAss2android, configurează acest lucru în setările sistemului. Setează importanța categoriei de notificări la minimum.</string>
<string name="IconVisibilityInfo_Android8_btnSettings">Deschide setările</string>
<string name="PostNotificationsPermissionInfo_text">Keepass2Android poate afișa o notificare de sistem în timp ce baza ta de date nu este blocată. Pentru ca acest lucru să funcționeze, acordă permisiunea.</string>
<string name="DontCare">Nu-mi pasă</string>
<string name="DocumentAccessRevoked">Fișierul nu mai este accesibil pentru KeepAss2android. Fie a fost eliminat, fie permisiunile de acces au fost revocate. Utilizează redeschiderea fișierului, de ex. folosind Schimbarea bazei de date.</string>
<string name="PreloadDatabaseEnabled_title">Pre-încarcă fişierul bază de date</string>
<string name="PreloadDatabaseEnabled_summary">Începe încărcarea sau descărcarea în fundal în timp ce se introduce parola.</string>
<string name="SyncAfterQuickUnlock_title">Sincronizare după QuickUnlock</string>
<string name="SyncAfterQuickUnlock_summary">Sincronizează baza de date cu fișierul de la distanță după deblocarea cu QuickUnlock.</string>
<string name="AskOverwriteBinary">Doriţi să suprascrieţi binarul existent folosind acelaşi nume?</string>
<string name="AskOverwriteBinary_title">Suprascrieţi binarul existent?</string>
<string name="AskOverwriteBinary_yes">Suprascrie</string>
@@ -466,32 +433,16 @@
<string name="SynchronizingDatabase">Se îmbină modificările…</string>
<string name="YesSynchronize">Da, îmbină</string>
<string name="NoOverwrite">Nu, suprascrie</string>
<string name="UseOfflineMode">Funcționare doar cu cache intern</string>
<string name="UseOnlineMode">Sincronizează copia cache cu sursa</string>
<string name="UseOfflineMode_Info">Baza de date este încărcată din memoria cache internă. Modificările sunt stocate doar în cache-ul intern și vor fi sincronizate numai atunci când selectezi Sincronizare copie cache cu sursa.</string>
<string name="InOfflineMode">Funcționare doar cu cache intern.</string>
<string name="SynchronizingCachedDatabase">Sincronizează baza de date din cache…</string>
<string name="DownloadingRemoteFile">Se încarcă fișierul sursă…</string>
<string name="UploadingFile">Salvează fișierul…</string>
<string name="RestoringRemoteFile">Se restaurează fișierul sursă…</string>
<string name="FilesInSync">Fişierele sunt sincronizate.</string>
<string name="SynchronizedDatabaseSuccessfully">Baza de date s-a sincronizat cu succes!</string>
<string name="CheckingDatabaseForChanges">Se verifică baza de date pentru modificări…</string>
<string name="CouldNotSaveToRemote">Nu s-a putut salva în fișierul sursă: %1$s. Salvează din nou sau utilizează meniul Sincronizare atunci când fișierul este accesibil din nou.</string>
<string name="CouldNotLoadFromRemote">Nu s-a putut accesa fișierul sursă: %1$s. Fișier încărcat din cache-ul intern. Poți face în continuare modificări în baza de date și să le sincronizezi mai târziu.</string>
<string name="UpdatedRemoteFileOnLoad">Fișier sursă actualizat.</string>
<string name="NotifyOpenFromLocalDueToConflict">S-a deschis fișierul cache intern din cauza conflictului cu modificările din fișierul sursă. Utilizează meniul Sincronizare pentru a fuziona.</string>
<string name="LoadedFromRemoteInSync">Fișierul sursă și cache-ul sunt sincronizate.</string>
<string name="UpdatedCachedFileOnLoad">S-a actualizat copia internă a cache-ului %1$s.</string>
<string name="RemoteDatabaseUnchanged">Nu s-au detectat modificări.</string>
<string name="ResolvedCacheConflictByUsingRemoteOtpAux">S-a actualizat fișierul auxiliar OTP din cache : Contorul sursă a fost mai mare.</string>
<string name="ResolvedCacheConflictByUsingLocalOtpAux">S-a actualizat fișierul auxiliar OTP sursă: Contorul local a fost mai mare.</string>
<string name="SynchronizingOtpAuxFile">Se sincronizează fișierul auxiliar OTP…</string>
<string name="database_file">fișier bază de date</string>
<string name="otp_aux_file">Fişier auxiliar OTP</string>
<string name="ErrorOcurred">A apărut o eroare:</string>
<string name="DuplicateUuidsError">Baza de date este coruptă: ID-uri duplicate au fost găsite. (Ai salvat cu Minikeepass?) Te rog să reimporți o bază de date nouă cu Keepass 2 pentru PC selectând \'Create new IDs\'.</string>
<string name="DuplicateUuidsErrorAdditional">Poți dezactiva acest mesaj de eroare în Setări/Setările aplicației/Gestionare fișiere/Verificare duplicat UUID-uri. Reține că este posibil te confrunți cu un comportament neașteptat. Este recomandat să repari baza de date.</string>
<string name="synchronize_database_menu">Sincronizează baza de date…</string>
<string name="CannotMoveGroupHere">Nu se poate muta grupul în acest grup.</string>
<string name="donate_question">Astăzi este Oktoberfest! Dacă vă place Keepass2Android: nu ar fi azi o zi potrivită să-mi cumpăraţi o bere?</string>
@@ -508,24 +459,9 @@
<string name="hint_sftp_host">host (ex: 192.168.0.1)</string>
<string name="hint_sftp_port">port</string>
<string name="initial_directory">Folder inițial (opțional):</string>
<string name="connect_timeout">Secunde expirare conexiune (opțional)</string>
<string name="enter_sftp_login_title">Introduceţi datele de conectare SFTP:</string>
<string name="sftp_auth_mode">Mod autentificare</string>
<string name="send_public_key">Trimite cheia publică...</string>
<string name="select_private_keyfile">Selectează cheia privată...</string>
<string name="hint_sftp_key_name">Nume cheie nouă</string>
<string name="hint_sftp_key_content">Conținut cheie nouă</string>
<string name="private_key_saved">Cheie privată salvată</string>
<string name="private_key_save_failed">Salvarea cheii private a eșuat: %1$s</string>
<string name="private_key_info">Introduc numele cheii și conținutul pentru a salva</string>
<string name="private_key_delete">Cheie privată ștearsă: %1$s</string>
<string name="private_key_delete_failed">Ștergerea cheii private a eșuat: %1$s</string>
<string name="save_key">Salvează cheia privată</string>
<string name="delete_key">Ștergere cheie privată</string>
<string name="private_key_select">Selectează cheia privată</string>
<string name="private_key_create_new">[Adaugă nou...]</string>
<string name="hint_sftp_key_passphrase">Frază de acces pentru cheie (opțională)</string>
<string name="sftp_kex_title">Algoritmi de schimb de chei (KEX) (opțional)</string>
<string name="enter_ftp_login_title">Introdu datele de conectare FTP:</string>
<string name="select_storage_type">Selectaţi tipul de stocare:</string>
<string name="filestoragename_file">Fişier local</string>
@@ -540,15 +476,12 @@
<string name="filestoragename_dropboxKP2A">Dropbox (folder KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Dacă nu doriți să dați KP2A acces la Dropbox-ul complet, puteți selecta această opțiune. Va solicita acces doar la directorul Apps/Keepass2Android. Acest lucru este potrivit în special atunci când se creează o bază de date nouă. Dacă aveţi deja o bază de date, selectaţi această opţiune pentru a crea directorul, apoi plasați fișierul în director (de la PC) și apoi selectați din nou această opțiune pentru deschiderea fișierului.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragename_gdriveKP2A">Google Drive (fișiere KP2A)</string>
<string name="filestoragename_pcloudall">PCloud (Acces complet)</string>
<string name="filestoragename_onedrive">OneDrive</string>
<string name="filestoragename_onedrive2">OneDrive</string>
<string name="filestoragename_onedrive2_full">Toate fișierele și fișierele partajate</string>
<string name="filestoragename_onedrive2_myfiles">Fișierele mele</string>
<string name="filestoragename_onedrive2_appfolder">Directorul Keepass2Android App</string>
<string name="filestoragename_sftp">SFTP (SSH File Transfer)</string>
<string name="filestoragename_mega">MEGA</string>
<string name="filestoragename_content">Selector de fisiere sistem</string>
<string name="filestorage_setup_title">Iniţializare acces fişier</string>
<string name="database_location">Locaţie bază de date</string>
@@ -575,8 +508,6 @@
<string name="OtpKeyError">Imposibil de creat cheia OTP! Asigură-te că ai introdus OTP-urile corecte.</string>
<string name="ErrorUpdatingOtpAuxFile">Eroare în actualizare fișier auxiliar OTP!</string>
<string name="SavingOtpAuxFile">Se salvează fișierul auxiliar OTP…</string>
<string name="PleaseInstallApp">Instalează %1$s de pe Google Play.</string>
<string name="AppOutdated">%1$s nu mai este suportat.</string>
<string name="bad_resp">Răspunsul la provocare este incorect.</string>
<string name="CouldntLoadChalAuxFile">Nu se poate încărca fișierul auxiliar de provocare!</string>
<string name="CouldntLoadChalAuxFile_Hint">Vă rugăm să folosiți plugin-ul KeeChallenge în KeePass 2,x (PC) pentru a configura data de baze cu răspunsuri-provocare!</string>
@@ -595,7 +526,6 @@
<string name="plugin_disabled">dezactivat</string>
<string name="plugin_web">Caută plugin-uri online</string>
<string name="plugin_scopes">Domenii</string>
<string name="not_enabled">nu este activat</string>
<string name="query_credentials_for_url">%1$s solicită date de login pentru %2$s.</string>
<string name="query_credentials">%1$s solicită date de login. Selectează o înregistrare.</string>
<string name="plugin_enabled_checkbox">Activat</string>
@@ -616,9 +546,7 @@
<string name="CopyFileRequired">Pentru a-l folosi, trebuie copiat într-o altă locație.</string>
<string name="CopyFileRequiredForEditing">Pentru a-l edita, trebuie copiat fișierul într-o altă locație.</string>
<string name="FileReadOnlyTitle">Baza de date permite doar citirea</string>
<string name="FileReadOnlyMessagePre">Keepass2Android a deschis baza de date curentă în modul doar pentru citire.</string>
<string name="ReadOnlyReason_PreKitKat">Se pare ca ai deschis fişierul dintr-o aplicaţie externă. În acest fel nu se acceptă modificări. Dacă doriţi să faceţi modificări în baza de date, închideţi baza de date şi selectaţi Schimbare bază de date. Apoi deschide fisierul folosind una dintre opţiunile disponibile.</string>
<string name="ReadOnlyReason_ReadOnlyFlag">Steagul doar-în-citire este setat. Elimină-l dacă dorești să faci modificări în baza de date.</string>
<string name="ReadOnlyReason_ReadOnlyKitKat">Modificarea nu este posibilă din cauza restricţiilor introduse în Android KitKat. Dacă doriţi să faceţi modificări în baza de date, închideți baza de date şi selectaţi Schimbare bază de date. Apoi deschide fisierul folosind selectorul de fisiere al sistemului.</string>
<string name="AddCustomIcon">Adaugă pictogramă din file...</string>
<string name="CopyingFile">Se copiază fișierul...</string>
@@ -642,12 +570,10 @@
<string name="TemplateTitle_Membership">Apartenenta</string>
<string name="ChangeLog_title">Jurnal modificări</string>
<string name="AskAddTemplatesTitle">Adauga template-uri?</string>
<string name="AskAddTemplatesMessage">Keepass2Android conține șabloane de intrare pentru conturi de e-mail, parole wireless-LAN, note sigure și multe altele. Dorești să le adaugi în baza de date? Dacă alegi Nu, le poți adăuga mai târziu în setările bazei de date.</string>
<string name="AddTemplates_pref">Adauga template-uri in baza de date</string>
<string name="Continue">Continuare</string>
<string name="NoFilenameWarning">URI introdus nu arata ca un nume de file. Sunteţi sigur că acesta este un file valid?</string>
<string name="FirstInvalidCompositeKeyError">Cheie compusă invalidă! Vă rugăm să încercaţi din nou.</string>
<string name="open_other_db">Deschide o altă bază de date…</string>
<string name="select_database">Selectați baza de date</string>
<string name="unspecified">nespecificat</string>
<string name="child_db_enabled_on_this_device">Activat pe acest dispozitiv</string>
@@ -659,34 +585,8 @@
<string name="child_db_Enabled_title">Deschide automat</string>
<string name="database_file_heading">Fișier bază de date</string>
<string name="if_device_text">Activează pentru %1$s</string>
<string name="restore_history">Restaurează această versiune</string>
<string name="remove_history">Elimină această versiune</string>
<string name="DbUnlockedChannel_name">Bază de date deblocată</string>
<string name="DbUnlockedChannel_desc">Notificare despre deblocarea bazei de date</string>
<string name="DbQuicklockedChannel_name">QuickUnlock</string>
<string name="DbQuicklockedChannel_desc">Notificare despre blocarea bazei de date cu QuickUnlock</string>
<string name="EntryChannel_name">Notificări intrare</string>
<string name="EntryChannel_desc">Notificare pentru simplificarea accesului la intrarea selectată în prezent.</string>
<string name="CloseDbAfterFailedAttempts">Închide baza de date după trei încercări de deblocare biometrică eșuate.</string>
<string name="WarnFingerprintInvalidated">Avertizare! Autentificarea biometrică poate fi invalidată de Android, de ex. după adăugarea unei amprente noi în setările dispozitivului. Asigură-te că știi întotdeauna cum să deblochezi cu parola principală!</string>
<string-array name="ChangeLog_1_12">
<item>Upgraded from Xamarin Android to .net 8</item>
<item>Upgraded to Target SDK 34</item>
<item>Upgraded to Material 3 user interface</item>
<item>Improve autofill to work with Compose apps</item>
<item>Fix hostname matching in autofill and search</item>
<item>S-a reparat problema cu generatorul de parole</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Added floating action buttons for search and TOTP overview (if TOTP entries are present).</item>
<item>Improved display of TOTP fields by adding a timeout indicator and showing it more prominently.</item>
<item>TOTP can now be seen from the group view.</item>
<item>Copy text value to clipboard on long-press in entry view.</item>
<item>Make TOTP more easily accessible on the built-in keyboard.</item>
<item>Show entry notification when autofilling a TOTP entry. This allows to copy the TOTP to clipboard. See preferences to configure the behavior.</item>
<item>Updated TOTP implementation to resolve compatibility issues with KeePass2 and TrayTOTP</item>
<item>Îmbunătățiri minore</item>
</string-array>
<string name="ChangeLog_keptDonate">Posibilitate extinsă de a dona o bere sau altceva</string>
<string-array name="clipboard_timeout_options">
<item>30 de secunde</item>
@@ -711,14 +611,9 @@
<string-array name="design_options">
<item>Luminoasă</item>
<item>Întunecată</item>
<item>Setări de sistem</item>
<item>System settings</item>
</string-array>
<string name="design_title">Design</string>
<string-array name="ftp_encryption_modes">
<item>Fără criptare (FTP)</item>
<item>Criptare implicită (FTP peste TLS, FTPS)</item>
<item>Criptare explicită (FTP prin TLS, FTPS)</item>
</string-array>
<string-array name="cred_remember_modes">
<item>Nu reține numele utilizator și parola</item>
<item>Reține doar numele de utilizator</item>
@@ -731,55 +626,28 @@
<item>Parolă + OTP secret (modul de recuperare)</item>
<item>Parolă + Challenge-Response</item>
<item>Parolă + Challenge-Response secret (modul de recuperare)</item>
<item>Parolă + provocare-răspuns pentru Keepass XC</item>
<item>Parolă + fișier cheie + provocare-răspuns pentru Keepass XC</item>
<item>Password + Challenge-Response for Keepass XC</item>
<item>Password + Key file + Challenge-Response for Keepass XC</item>
</string-array>
<string-array name="sftp_auth_modes">
<item>Parolă</item>
<item>Cheie Privată/Publică KP2A</item>
<item>Cheie privată personalizată</item>
<item>KP2A Private/Public key</item>
<item>Custom Private key</item>
</string-array>
<string-array name="AcceptAllServerCertificates_options">
<item>Ignoră eșecuri de validare a certificatului</item>
<item>Avertizează când validarea eșuează</item>
<item>Nu accepta certificate invalide</item>
</string-array>
<string name="ClearClipboardWarning">Asigură-te că aceasta funcționează pe sistemul tău, dacă nu, ia în considerare folosirea tastaturii încorporate.</string>
<string name="PluginDescription">Descrierea furnizată de plugin:</string>
<string name="autofill_hint">Keepass2Android suportă caracteristica de completare automată a Android, dar se pare că nu ai activat-o încă.</string>
<string name="autofill_enable">Activare autocompletare</string>
<string name="autofill_enable_failed">Ne pare rău, se pare că dispozitivul nu acceptă deschiderea setărilor din interiorul aplicației. Accesează manual setările de sistem pentru completare automată pentru a activa serviciul.</string>
<string name="show_autofill_help">Afișează ajutorul pentru completarea automată</string>
<string name="autofill_sign_in_prompt">Completează cu Keepass2Android</string>
<string name="autofill_disable">Dezactivează completarea automată pentru %1$s</string>
<string name="autofill_enable_for">Activează completare automată pentru %1$s</string>
<string name="invalid_link_association">Domeniul web %1$s nu a putut fi asociat cu aplicația %2$s</string>
<string name="enable_fingerprint_hint">Keepass2Android a detectat dispozitive biometrice. Doriţi să activaţi deblocarea biometrică pentru această bază de date?</string>
<string name="post_notifications_dialog_title">Permite notificări</string>
<string name="post_notifications_dialog_message">Keepass2Android poate afișa notificări cu butoane pentru a copia valori cum ar fi parole și coduri TOTP în clipboard, sau pentru a aduce tastatura integrată. Acest lucru este util pentru a transfera valori în alte aplicații fără a trece la Keepass2Android în mod repetat. Doriești să activezi astfel de notificări?</string>
<string name="post_notifications_dialog_allow">Permite notificări</string>
<string name="post_notifications_dialog_disable">Dezactivează această caracteristică</string>
<string name="post_notifications_dialog_notnow">Nu acum</string>
<string name="understand">Am înțeles</string>
<string name="dont_show_again">Nu mai afișa</string>
<string name="masterkey_infotext_head">Îți amintești parola principală?</string>
<string name="masterkey_infotext_main">Reține că nu vei putea deschide baza de date fără cheia principală. Nu există nici o modalitate de a \"reseta\" parola principală.</string>
<string name="masterkey_infotext_fingerprint_note">De asemenea, rețineți că Deblocarea biometrică funcționează prin stocarea cheii principale în spațiul de stocare securizat Android. Această stocare poate fi ștearsă de Android în orice moment, de ex. dacă adăugați o nouă amprentă în setările sistemului. Așa că nu vă bazați pe deblocarea biometrică ci retineți parola principală, vă rog!</string>
<string name="backup_infotext_head">S-a creat o copie de rezervă pentru baza de date?</string>
<string name="backup_infotext_main">Keepass2Android stochează parolele într-un fișier într-o locație la alegerea ta. Ești sigur că încă poți accesa acest fișier atunci când telefonul este pierdut sau furat sau când fișierul este distrus sau șters? Asigură-te că ai întotdeauna o copie de rezervă actualizată într-un loc sigur!</string>
<string name="backup_infotext_note">Pentru a crea o copie de rezervă acum, accesează %1$s &gt; %2$s &gt; %3$s.</string>
<string name="emergency_infotext_head">Ești pregătit pentru cazuri de urgență?</string>
<string name="emergency_infotext_main">Te-ai gândit vreodată ce se întâmplă dacă nu mai poți accesa baza de date a parolelor? Ce se întâmplă dacă ai un accident? Este o bună practică să transmiți cheia principală unei persoane de încredere pentru cazuri de urgență. În caz contrar, nimeni nu va avea acces la parole.</string>
<string name="no_secure_display">Afișajul valabil în prezent nu este marcat ca fiind sigur. Aceasta înseamnă că capturile de ecran ar putea fi luate de alte aplicații. Keepass2Android este configurat pentru a afișa informații sensibile doar pe afișaje securizate. Schimbă la un afișaj securizat (de exemplu, detașând un monitor HDMI) sau modifică setările aplicației.</string>
<string name="disable_secure_screen_check">Dezactivează acest mesaj</string>
<string name="switch_ime_text">Activează tastatura Keepass2Android.</string>
<string name="switch_ime_reopen">Reîncercați</string>
<string name="AutofillWarning_title">Alertă de securitate: Link nerecunoscut domeniu/aplicație</string>
<string name="AutofillWarning_Intro">Sunteți pe cale de a insera datele de autentificare pentru domeniul \"%1$s\" în aplicația \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Dacă aveți încredere că \"%2$s\" aparține la \"%1$s\" sau dacă aveți încredere în aplicația \"%2$s\" să nu abuzeze de datele de autentificare (de ex. deoarece este o aplicație de încredere pentru browser), este in regulă să continuați. Dacă nu, vă rugăm să anulați.</string>
<string name="AutofillWarning_trustAsBrowser">Acceptați întotdeauna în \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Comută înapoi când ai terminat</string>
<string name="kp2a_switch_on_sendgodone_summary">Comută înapoi după apăsarea trimitere/înainte/terminat</string>
<string name="qr_scanning_error_no_google_play_services">Scanarea codului QR necesită servicii Google Play. Instalează sau actualizează serviciile Google Play de pe dispozitiv.</string>
<string name="english_ime_settings">Setările tastaturii Keepass2Android</string>
</resources>

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (priečinok KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Túto voľbu môžete aktivovať ak udelíte KP2A prístup do celého Dropboxu. Vyžaduje sa prístup iba do priečinka Apps/Keepass2Android. Je to osobitne vhodné pri vytváraní novej databázy. Ak už máte databázu, tak aktivovaním tejto voľby vytvoríte priečinok, potom premiestnite súbor do priečinka (zo svojho PC) a potom znovu aktivujte voľbu, pre otvorenie súboru.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Pamätajte na to, že: Google čoraz viac obmedzuje prístup ku Google Drive z aplikácií. Ak vám nefunguje zabudovaná integrácia s Google Drive, použite výber súboru priamo v systéme a vyberte Google Drive tam!</string>
<string name="filestoragename_gdriveKP2A">Google Drive (súbory KP2A)</string>
<string name="filestoragehelp_gdriveKP2A">Ak nechcete poskytnúť KP2A prístup k celému úložisku Google Drive, môžete vybrať túto možnosť. Pamätajte na to, že najskôr musíte vytvoriť súbor s databázou, existujúce súbory aplikácia neuvidí. Buď vyberte takúto možnosť z obrazovky pre vytvorenie databázy, alebo už otvorenú databázu exportujte vybratím tejto možnosti.</string>
<string name="filestoragename_pcloud">PCloud (priečinok KP2A)</string>
@@ -673,26 +672,6 @@
<string name="Continue">Pokračovať</string>
<string name="NoFilenameWarning">Zadaná URI pravdepodobne nie je názvom súboru. Ste si istí, že ide o platný súbor?</string>
<string name="FirstInvalidCompositeKeyError">Neplatný kompozitný kľúč! Prosím skúste to ešte raz.</string>
<string name="RepeatedInvalidCompositeKeyHelp"> Neplatný kompozitný kľúč! Na odomknutie databázy skúste urobiť toto:\n
• Uistite sa, že ste zadali správne heslo. Na zobrazenie zadaného hesla kliknite na ikonu s okom.\n
• Uistite sa, že je vybraný správny typ hesla a že sa zhoduje s typom použitým pri vytváraní databázy.\n
• Uistite sa, že ste vybrali správny databázový súbor.
</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
• Pomôcka: Ak si myslíte, že je súbor s databázou poškodený alebo si nepamätáte primárny kľúč po jeho úprave, môžete skúsiť použiť poslednú úspešne otvorenú verziu súboru (ťuknite na \"%1$s\") a vybrať lokálnu zálohu.
</string>
<string name="HintLocalBackupOtherError"> \n
• Pomôcka: Keepass2Android uložil poslednú úspešne otvorenú verziu súboru do interného úložiska. Môžete ju otvoriť ťuknutím na \"%1$s\" a výberom lokálnej zálohy.
</string>
<string name="CorruptDatabaseHelp"> Súbor je poškodený. \n
Tu je niekoľko tipov, ktoré vám môžu pomôcť odhaliť problém:\n
• ak ste súbor skopírovali cez USB (režim MTP), skúste to ešte raz s použitím takého nástroja, ako je napr. MyPhoneExplorer. Režim MTP v niektorých prípadoch skracuje súbory.\n
• Ak nemôžete otvoriť súbor z rovnakého umiestnenia vo svojom PC, je veľmi pravdepodobné, že je poškodený. V takom prípade použite zálohu databázy. Ak predpokladáte, že súbor porušila aplikácia Keepass2Android, prosím kontaktujte tím podpory.\n
• Ak sa dá súbor otvoriť v PC, kontaktujte tím podpory. Môžete tiež skúsiť uložiť ho s odlišnými nastaveniami (napríklad nekomprimovane) na PC a potom ho opäť skúsiť otvoriť v aplikácii Keepass2Android.
</string>
<string name="open_other_db">Otvoriť inú databázu…</string>
<string name="select_database">Vybrať databázu</string>
<string name="configure_child_dbs">Konfigurovať sekundárne databázy…</string>
@@ -720,20 +699,6 @@
<string name="EntryChannel_desc">Notifikácia na zjednodušenie prístupu k práve vybranému záznamu.</string>
<string name="CloseDbAfterFailedAttempts">Zavrieť databázu po troch neúspešných odomykaniach s biometriou</string>
<string name="WarnFingerprintInvalidated">Varovanie! Biometrická autentifikácia môže byť zneplatnená systémom Android, nap. po pridaní nového odtlačku prsta do nastavení zariadenia. Vždy sa uistite, že viete ako odomknúť zariadenia primárnym heslom.</string>
<string-array name="ChangeLog_1_12">
<item>Aktualizácia z Xamarin Android na .net 8</item>
<item>Aktualizované na Target SDK 34</item>
<item>Aktualizované na používateľské rozhranie Material 3</item>
<item>Vylepšené automatické dopĺňanie kvôli fungovaniu s aplikáciami Compose</item>
<item>Oprava zhody mena hostiteľa v automatickom dopĺňaní a vyhľadávaní</item>
<item>Oprava problému s generátorom hesiel</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Aktualizované na OneDrive SDK, verziu 5.68</item>
<item>Aktualizované SDK na verziu 7.0.0</item>
<item>Aktualizácia Gradle, NewtonsoftJson, FluentFTP, MegaApiClient a okhttp</item>
<item>Oprava chyby pri výbere súboru vo WebDav</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Pridané plávajúce tlačidlá pre vyhľadávanie a prehľad o TOTP (ak sú prítomné záznamy s TOTP).</item>
<item>Zlepšené zobrazenie polí pre TOTP, pridaním časového limitu a vyraznejšieho zobrazenia.</item>
@@ -1199,12 +1164,5 @@
<string name="AutofillWarning_Intro">Chcete vložiť prihlas. údaje pre doménu \"%1$s\" do aplikácie \"%2$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Ak dôverujete aplikácii \"%2$s\", že patrí \"%1$s\" alebo ak dôverujete, že aplikácia \"%2$s\" nezneužíva prihlasovacie údaje (ak je to napríklad dôveryhodný prehliadač), môžete pokračovať. Ak nie, prosím zrušte túto akciu.</string>
<string name="AutofillWarning_trustAsBrowser">Vždy súhlasiť v \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Po dokončení prepnúť späť</string>
<string name="kp2a_switch_on_sendgodone_summary">Po stlačení Odoslať/Prejsť/Hotovo prejsť späť</string>
<string name="qr_scanning_error_no_google_play_services">Na skenovanie QR kódov sú potrebné služby Google Play. Nainštalujte alebo aktualizujte si ich vo vašom zariadení.</string>
<string name="english_ime_settings">Nastavenia klávesnice Keepass2Android</string>
<string name="autoswitch_enabled_but_not_setup">Poznámka: aktivovali ste automatické prepínanie klávesnice v sekcii Nastavenia aplikácie - Prístup k záznamu s heslom - Prepínanie klávesnice, ale zdá sa, že táto funkcia nie je správne nakonfigurovaná.</string>
<string name="switch_keyboard_for_totp_enabled">Poznámka: aktivovali ste automatické dopĺňanie pre záznamy TOTP, v sekcii Apl. - Prístup k záznamu s heslom - Služba automatického dopĺňania. Môže to spôsobiť zobrazenie tohto okna pri otvorení záznamu s TOTP.</string>
<string name="switch_keyboard_inside_kp2a_enabled">Poznámka: aktivovali ste použitie klávesnice integrovanej v Keepass2Android, v sekcii Apl. - Zabezpečenie. Môže to spôsobiť zobrazenie tohto okna pri otvorení aplikácie alebo pri úprave záznamu.</string>
<string name="switch_keyboard_on_search_enabled">Poznámka: aktivovali ste prepínanie klávesnice v sekcii Apl. - Zabezpečenie - Prístup k záznamu s heslom - Prepínanie klávesnice. Môže to spôsobovať zobrazenie tohto okna pri vyhľadávaní nejakého záznamu z prehliadača.</string>
</resources>

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (mapa KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Če dostopa KP2A ne želite dati celemu Dropboxu, lahko izberete to možnost. Zahtevala bo samo dostop do mape Apps/Keepass2Android. To je posebej primerno ob ustvarjanju nove podatkovne zbirke. Če jo že imate, tapnite na to možnost, da ustvarite mapo, v njo vstavite svojo datoteko (iz računalnika) in ponovno izberete to možnost, da datoteko odprete.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Opomba: Google omejuje dostop do storitve Google Drive iz aplikacij za vse več uporabnikov. Če vgrajena implementacija Googlovega pogona ne deluje, uporabite sistemski izbirnik datotek in tam izberite Googlov pogon!</string>
<string name="filestoragename_gdriveKP2A">Google Drive (KP2A datoteke)</string>
<string name="filestoragehelp_gdriveKP2A">Če KP2A ne želite omogočiti dostopa do celotnega Google Drive, lahko izberete to možnost. Upoštevajte, da morate najprej ustvariti novo datoteko baze podatkov, obstoječe datoteke niso vidne aplikaciji. To možnost izberite na zaslonu Ustvari bazo podatkov ali, če ste že odprli bazo podatkov, izvozite bazo podatkov in izberete to možnost.</string>
<string name="filestoragename_pcloud">PCloud (KP2A mapa)</string>
@@ -720,20 +719,6 @@
<string name="EntryChannel_desc">Obvestilo o enostavnem dostopu do trenutno izbranega vnosa.</string>
<string name="CloseDbAfterFailedAttempts">Zaprite bazo podatkov po treh neuspelih poskusih biometričnega odklepanja.</string>
<string name="WarnFingerprintInvalidated">Opozorilo! Biometrično overjanje lahko Android razveljavi, npr. po dodajanju novega prstnega odtisa v nastavitvah naprave. Poskrbite, da boste vedno vedeli odkleniti z glavnim geslom!</string>
<string-array name="ChangeLog_1_12">
<item>Nadgradnja z Xamarin Android na .net 8</item>
<item>Nadgrajeno na SDK 34</item>
<item>Nadgrajen na uporabniški vmesnik Material 3</item>
<item>Izboljšanje samodejnega izpolnjevanja za delovanje z aplikacijami Compose</item>
<item>Popravek ujemanja gostiteljskega imena v samodejnem izpolnjevanju in iskanju</item>
<item>Odpravljena težava z generatorjem gesel</item>
</string-array>
<string-array name="ChangeLog_1_12_net">
<item>Nadgradnja OneDrive SDK na različico 5.68</item>
<item>Nadgrajen Dropbox SDK na različico 7.0.0</item>
<item>Nadgrajeni Gradle, NewtonsoftJson, FluentFTP, MegaApiClient in okhttp</item>
<item>Popravek napake pri izbiri datotek WebDav</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>Dodani so plavajoči gumbi za iskanje in pregled TOTP (če so prisotni vnosi TOTP).</item>
<item>Izboljšanje prikaza polj TOTP z dodajanjem kazalnika časovne omejitve in njegovim vidnejšim prikazom.</item>
@@ -1197,12 +1182,5 @@
<string name="AutofillWarning_Intro">V aplikacijo \"%2$s\" vstavite poverilnice za domeno \"%1$s\".</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">Če zaupate, da \"%2$s\" pripada \"%1$s\" ali da zaupate aplikaciji \"%2$s\" in ne boste zlorabljali poverilnic (npr. ker gre za zaupanja vredno aplikacijo brskalnika), je v redu, če nadaljujete . V nasprotnem primeru prekličite postopek.</string>
<string name="AutofillWarning_trustAsBrowser">Sprejmi vedno v \"%1$s\"</string>
<string name="kp2a_switch_on_sendgodone">Preklopi nazaj, ko je končano</string>
<string name="kp2a_switch_on_sendgodone_summary">Preklopi nazaj, ko pritisnete gumb za pošiljanje/prehajanje/končano</string>
<string name="qr_scanning_error_no_google_play_services">Za optično branje kode QR so potrebne storitve Google Play. V svojo napravo namestite ali posodobite storitve Google Play.</string>
<string name="english_ime_settings">Nastavitve tipkovnice Keepass2Android</string>
<string name="autoswitch_enabled_but_not_setup">Opomba: Omogočili ste Aplikacije - Nastavitve - Dostop z geslom - Preklop tipkovnice - Samodejni preklop tipkovnice, vendar se zdi, da ta ni pravilno konfigurirana.</string>
<string name="switch_keyboard_for_totp_enabled">Opomba: Omogočili ste Aplikacije - Dostop do gesla - Storitev samodejnega izpolnjevanja - Samodejno izpolnjevanje za vnose TOTP. To lahko povzroči, da se to okno prikaže, ko odprete vnos s TOTP.</string>
<string name="switch_keyboard_inside_kp2a_enabled">Opomba: Omogočili ste Aplikacije - Varnost - Uporabi vgrajeno tipkovnico znotraj Keepass2Android. To lahko povzroči, da se to okno prikaže, ko odprete aplikacijo ali urejate vnos.</string>
<string name="switch_keyboard_on_search_enabled">Opomba: Omogočili ste možnost Aplikacija - Varnost - Dostop z geslom - Preklop tipkovnice - Preklop tipkovnice. To lahko povzroči, da se to okno prikaže, ko iščete vnos v brskalniku.</string>
</resources>

View File

@@ -151,7 +151,6 @@
<string name="hint_keyfile">Anahtar dosyası</string>
<string name="hint_length">Uzunluk</string>
<string name="hint_pass">parola</string>
<string name="hint_keyfile_path">SSH özel anahtar yolu</string>
<string name="hint_login_pass">Parola</string>
<string name="hint_title">Başlık</string>
<string name="hint_url">URL</string>
@@ -301,8 +300,6 @@
<string name="NoDalVerification_summary">Etki alanı ve uygulama paketinin eşleşip eşleşmediğini kontrol etmeyi devre dışı bırakır</string>
<string name="InlineSuggestions_title">Klavye ile entegre et</string>
<string name="InlineSuggestions_summary">Otomatik doldurma önerilerini klavyede satır içi seçenekler olarak gösterir (giriş yöntemi tarafından destekleniyorsa)</string>
<string name="LogAutofillView_title">Günlük otomatik doldurma görünümü</string>
<string name="LogAutofillView_summary">Otomatik doldurma görünümü hakkında ayrıntıları hata ayıklama günlüğüne yaz (eğer hata ayıklama günlüğü etkinse). Eğer otomatik doldurma beklendiği gibi çalışmıyorsa bu ayrıntılar geliştiriciye gönderilebilir.</string>
<string name="requires_android11">Android 11 veya sonraki bir sürümünü gerektirir</string>
<string name="kp2a_findUrl">Parola bul</string>
<string name="excludeExpiredEntries">Hızlı aramalara süresi dolmuş kayıtlar katılmasın</string>
@@ -401,11 +398,6 @@
<string name="ShowSeparateNotifications_summary">Kullanıcı adıyla parolayı panoya kopyalamak ve klavyeyi etkinleştirmek için bildirimleri göster.</string>
<string name="AccServiceAutoFill_prefs">Otomatik Doldurma Erişilebilirlik Hizmeti</string>
<string name="AutoFill_prefs">Otomatik Doldurma Hizmeti</string>
<string name="AutoFillTotp_prefs_ShowNotification_summary">Bir girişi TOTP ile otomatik doldururken, giriş bildirimini TOTP Kopyala düğmesiyle göster</string>
<string name="AutoFillTotp_prefs_ShowNotification_title">Giriş bildirimlerini göster</string>
<string name="AutoFillTotp_prefs_CopyTotpToClipboard_title">TOTP \'yi panoya kopyala</string>
<string name="AutoFillTotp_prefs_ActivateKeyboard_title">Yerleşik klavyeyi etkinleştir</string>
<string name="TotpCopiedToClipboard">TOTP panoya kopyalandı</string>
<string name="ShowKp2aKeyboardNotification_title">KP2A klavye bildirimi</string>
<string name="ShowKp2aKeyboardNotification_summary">Tam girişi KP2A klavyesinden erişilebilir yapın (önerilir).</string>
<string name="OpenKp2aKeyboardAutomatically_title">Klavyeyi değiştir</string>
@@ -422,7 +414,6 @@
<string name="ShowUnlockedNotification_summary">Veritabanı kilitli değilken devam eden bir bildirim gösterir.</string>
<string name="IconVisibilityInfo_Android8_text">Android 8, bildirimler için yeni davranışlar getirdi. Keepass2Android\'in bildirimleri için simgeyi gizlemek istiyorsanız, lütfen bunu sistem ayarlarından yapılandırın. Bildirim kategorisinin önemini Minimum olarak ayarlayın.</string>
<string name="IconVisibilityInfo_Android8_btnSettings">Ayarları</string>
<string name="PostNotificationsPermissionInfo_text">Keepass2Android bilgi bankanız kilitli değilken size bir sistem uyarısı görüntüler. Bunun çalışması için lütfen izin verin.</string>
<string name="DontCare">Umrumda değil</string>
<string name="DocumentAccessRevoked">Keepass2Android artık dosyaya erişemiyor. Dosya ya silindi yada erişim izinleri iptal edildi. Lütfen Veritabanını değiştir seçeneğiyle dosyayı yeniden açın.</string>
<string name="PreloadDatabaseEnabled_title">Veritabanı dosyasını önceden yükleme</string>
@@ -507,15 +498,9 @@
<string name="hint_sftp_host">sunucu (ör: 192.168.0.1)</string>
<string name="hint_sftp_port">bağlantı noktası</string>
<string name="initial_directory">Başlangıç dizini (isteğe bağlı):</string>
<string name="connect_timeout">Bağlantı zaman aşımı saniyesi (isteğe bağlı)</string>
<string name="enter_sftp_login_title">SFTP oturum açma verilerini girin:</string>
<string name="sftp_auth_mode">Kimlik doğrulama modu</string>
<string name="send_public_key">Ortak anahtar gönder...</string>
<string name="select_private_keyfile">Özel anahtarı seç...</string>
<string name="hint_sftp_key_name">Yeni anahtar adı</string>
<string name="hint_sftp_key_content">Yeni anahtar içeriği</string>
<string name="private_key_saved">Özel anahtar kaydedildi</string>
<string name="private_key_save_failed">Özel anahtar kayıt edilemedi: %1$s</string>
<string name="enter_ftp_login_title">FTP oturum açma verilerini girin:</string>
<string name="enter_mega_login_title">MEGA hesap bilgilerinizi girin:</string>
<string name="select_storage_type">Depolama türünü seçin:</string>

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">Dropbox (thư mục KP2A)</string>
<string name="filestoragehelp_dropboxKP2A">Nếu bạn không muốn cấp cho KP2A quyền truy cập vào Dropbox đầy đủ của mình, bạn có thể chọn tùy chọn này. Nó sẽ chỉ yêu cầu quyền truy cập vào thư mục Apps/Keepass2Android. Điều này đặc biệt phù hợp khi tạo cơ sở dữ liệu mới. Nếu bạn đã có cơ sở dữ liệu, hãy chọn tùy chọn này để tạo thư mục, sau đó đặt tệp của bạn bên trong thư mục (từ PC của bạn) và sau đó chọn lại tùy chọn này để mở tệp.</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">Xin lưu ý: Google ngày càng giới hạn quyền truy cập Google Drive của các ứng dụng đối với nhiều người dùng hơn. Nếu mục Google Drive không dùng được, hãy chọn Trình chọn tập tin của hệ thống sau đó chọn mục Google Drive!</string>
<string name="filestoragename_gdriveKP2A">Google Drive (tệp KP2A)</string>
<string name="filestoragehelp_gdriveKP2A">Nếu bạn không muốn cấp cho KP2A quyền truy cập vào Google Drive đầy đủ của mình, bạn có thể chọn tùy chọn này. Lưu ý rằng trước tiên bạn cần tạo tệp cơ sở dữ liệu, các tệp hiện có sẽ không hiển thị với ứng dụng. Chọn tùy chọn này từ màn hình Tạo cơ sở dữ liệu hoặc, nếu bạn đã mở cơ sở dữ liệu, bằng cách xuất cơ sở dữ liệu chọn tùy chọn này.</string>
<string name="filestoragename_pcloud">PCloud (thư mục KP2A)</string>
@@ -673,26 +672,6 @@
<string name="Continue">Tiếp tục</string>
<string name="NoFilenameWarning">URI bạn đã nhập không có dạng tên tập tin. Bạn có chắc chắn đây là tập tin hợp lệ không?</string>
<string name="FirstInvalidCompositeKeyError">Khoá hỗn hợp không hợp lệ. Xin thử lại.</string>
<string name="RepeatedInvalidCompositeKeyHelp"> Khoá tổng hợp không hợp lệ! Hãy thử các bước sau để mở khoá cơ sở dữ liệu của bạn:\n
• Nhập đúng mật khẩu. Ấn vào biểu tượng con mắt để hiện mật khẩu đã nhập.\n
• Chọn đúng loại mật khẩu. Loại mật khẩu phải giống với loại mật khẩu đã chọn khi tạo cơ sở dữ liệu.\n
• Chọn đúng tập tin cơ sở dữ liệu.
</string>
<string name="HintLocalBackupInvalidCompositeKey"> \n
• Gợi ý: Nếu bạn nghĩ rằng tập tin cơ sở dữ liệu bị hỏng hoặc bạn đã quên khoá chính sau khi thay đổi nó, bạn có thể nhấn \"%1$s\" và chọn bản sao lưu cục bộ để mở phiên bản tập tin được mở thành công gần đây nhất.
</string>
<string name="HintLocalBackupOtherError"> \n
• Gợi ý: Keepass2Android đã lưu trữ phiên bản tập tin được mở thành công gần đây nhất trên bộ nhớ trong. Bạn có thể mở nó bằng cách nhấn vào \"%1$s\" và chọn bản sao lưu cục bộ.
</string>
<string name="CorruptDatabaseHelp"> Tập tin bị hỏng. \n
Có một số mẹo giúp chẩn đoán vấn đề như sau:\n
• Nếu bạn sao chép tập tin qua USB (sử dụng chế độ MTP), hãy thử sao chép lại bằng một phần mềm như MyPhoneExplorer. Trong một số trường hợp, MTP có thể cắt bớt nội dung tập tin.\n
• Nếu không mở được tập tin ở cùng một vị trí trên máy tính, rất có thể tập tin đó thực sự bị hỏng. Trong trường hợp này, hãy sử dụng một bản sao lưu cơ sở dữ liệu. Nếu bạn nghi ngờ rằng Keepass2Android làm hỏng tập tin, hãy liên hệ với bộ phận hỗ trợ.\n
• Nếu tập tin vẫn mở được bằng máy tính, hãy liên hệ với bộ phận hỗ trợ. Bạn có thể thử lưu lại tập tin trên máy tính với cài đặt khác (ví dụ như không nén) sau đó thử mở lại bằng Keepass2Android.
</string>
<string name="open_other_db">Mở cơ sở dữ liệu khác…</string>
<string name="select_database">Chọn cơ sở dữ liệu</string>
<string name="configure_child_dbs">Định cấu hình cơ sở dữ liệu con…</string>

View File

@@ -546,7 +546,6 @@
<string name="filestoragename_dropboxKP2A">DropboxKP2A 文件夹)</string>
<string name="filestoragehelp_dropboxKP2A">如果您不想让 KP2A 访问整个 Dropbox您可以选中此选项。它将只有访问 Apps/Keepass2Android 文件夹的权限。特别适合创建一个新的数据库。如果您已经有一个数据库,触击此选项将创建该新文件夹,然后将您在电脑上的数据库文件放在此文件夹内,然后再选该选项,以打开该文件。</string>
<string name="filestoragename_gdrive">Google Drive</string>
<string name="filestoragehelp_gdrive">请注意谷歌正在限制越来越多的用户从应用程序访问Google Drive。 如果内置的 Google Drive 实现无法正常工作,请使用系统文件选择器并在那里选择 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>
@@ -720,14 +719,6 @@
<string name="EntryChannel_desc">选定条目快速进入通知</string>
<string name="CloseDbAfterFailedAttempts">三次失败的生物识别解锁后关闭数据库。</string>
<string name="WarnFingerprintInvalidated">警告!生物识别认证可能会被Android系统作废例如在你的设备设置中添加一个新的指纹后。确保你总是知道如何用你的主密码解锁</string>
<string-array name="ChangeLog_1_12">
<item>Upgraded from Xamarin Android to .net 8</item>
<item></item>
<item>Upgraded to Material 3 user interface</item>
<item>Improve autofill to work with Compose apps</item>
<item>Fix hostname matching in autofill and search</item>
<item>Fix issue with password generator</item>
</string-array>
<string-array name="ChangeLog_1_11">
<item>添加了用于搜索和概览 TOTP 的浮动按钮如果存在TOTP条目</item>
<item>通过添加超时指示器并突出显示,改进 TOTP 字段的显示效果</item>
@@ -1165,12 +1156,5 @@ Initial public release
<string name="AutofillWarning_Intro">您将要将域名\"%1$s\"的凭据插入应用“%2$s”。</string>
<string name="AutofillWarning_FillDomainInUntrustedApp">如果你相信“%2$s”属于\"%1$s\",或者你相信应用“%2$s”不会滥用凭据例如它是受信任的浏览器应用所以可以继续。如果不是请取消。</string>
<string name="AutofillWarning_trustAsBrowser">总是在 \"%1$s 中接受</string>
<string name="kp2a_switch_on_sendgodone">完成后切换回来</string>
<string name="kp2a_switch_on_sendgodone_summary">按下发送/转到/完成时切换回来</string>
<string name="qr_scanning_error_no_google_play_services">二维码扫描需要 Google Play 服务。请在您的设备上安装或更新 Google Play 服务。</string>
<string name="english_ime_settings">键盘设置</string>
<string name="autoswitch_enabled_but_not_setup">注意:您已启用应用-设置-密码访问-键盘切换-自动切换键盘,但它似乎配置不正确。</string>
<string name="switch_keyboard_for_totp_enabled">注意:您已启用应用 - 密码访问-自动填充服务 - TOTP 条目自动填充。 当您打开一条有TOTP的条目时这会导致此窗口显示。</string>
<string name="switch_keyboard_inside_kp2a_enabled">注意:您已经启用了应用 - 安全性 - 使用 Keepass2Android 中的内置键盘。 当您打开应用或编辑条目时,这会导致此窗口显示。</string>
<string name="switch_keyboard_on_search_enabled">注意: 您已经启用了应用-安全性-密码访问-键盘切换-切换键盘。当您从浏览器搜索条目时,这会导致此窗口显示。</string>
</resources>

View File

@@ -1,162 +0,0 @@
using Android.OS;
using Android.Views;
using Google.Android.Material.Snackbar;
namespace keepass2android.Utils
{
public struct Message
{
public Message()
{
Text = null;
Severity = MessageSeverity.Info;
}
public string Text { get; set; }
public MessageSeverity Severity { get; set; }
public bool ShowOnSubsequentScreens { get; set; } = true;
}
public interface IMessagePresenter
{
void ShowMessage(Message message);
List<Message> PendingMessages
{
get;
}
}
internal class NonePresenter : IMessagePresenter
{
public void ShowMessage(Message message)
{
PendingMessages.Add(message);
}
public List<Message> PendingMessages
{
get;
set;
} = new List<Message>();
}
internal class ToastPresenter : IMessagePresenter
{
public void ShowMessage(Message message)
{
Toast.MakeText(App.Context, message.Text, ToastLength.Long).Show();
}
public List<Message> PendingMessages => new();
}
internal class ChainedSnackbarPresenter: IMessagePresenter
{
internal ChainedSnackbarPresenter(View anchorView)
{
this.AnchorView = anchorView;
}
private DateTime nextSnackbarShowTime = DateTime.Now;
private List<Message> queuedMessages = new List<Message>();
public View AnchorView { get; set; }
private TimeSpan chainingTime = TimeSpan.FromSeconds(1.5);
private Snackbar snackbar;
private Message lastMessage;
public void ShowMessage(Message message)
{
if (DateTime.Now <= nextSnackbarShowTime)
{
var waitDuration = nextSnackbarShowTime - DateTime.Now;
nextSnackbarShowTime = nextSnackbarShowTime.Add(chainingTime);
if (!queuedMessages.Any())
{
if (Looper.MainLooper != null)
{
new Handler(Looper.MainLooper).PostDelayed(ShowNextSnackbar,
(long)waitDuration.TotalMilliseconds);
}
else
{
Kp2aLog.Log("Currently cannot show message");
}
}
queuedMessages.Add(message);
return;
}
ShowSnackbarNow(message);
nextSnackbarShowTime = DateTime.Now.Add(chainingTime);
}
public List<Message> PendingMessages
{
get
{
List<Message> pendingMessages = new List<Message>();
if (snackbar?.IsShown == true)
{
pendingMessages.Add(lastMessage);
}
pendingMessages.AddRange(queuedMessages);
return pendingMessages;
}
}
private void ShowNextSnackbar()
{
if (!queuedMessages.Any())
{
return;
}
ShowSnackbarNow(queuedMessages.First());
queuedMessages.RemoveAt(0);
if (!queuedMessages.Any())
{
new Handler().PostDelayed(() => { ShowNextSnackbar(); }, (long)chainingTime.TotalMilliseconds);
}
}
private void ShowSnackbarNow(Message message)
{
snackbar = Snackbar
.Make(AnchorView, message.Text,
Snackbar.LengthLong);
snackbar.SetTextMaxLines(10);
if ((int)Build.VERSION.SdkInt >= 23)
{
if (message.Severity == MessageSeverity.Error)
{
snackbar.SetBackgroundTint(App.Context.GetColor(Resource.Color.md_theme_errorContainer));
snackbar.SetTextColor(App.Context.GetColor(Resource.Color.md_theme_onErrorContainer));
}
else if (message.Severity == MessageSeverity.Warning)
{
snackbar.SetBackgroundTint(App.Context.GetColor(Resource.Color.md_theme_inverseSurface));
snackbar.SetTextColor(App.Context.GetColor(Resource.Color.md_theme_inverseOnSurface));
}
else
{
snackbar.SetBackgroundTint(App.Context.GetColor(Resource.Color.md_theme_secondaryContainer));
snackbar.SetTextColor(App.Context.GetColor(Resource.Color.md_theme_onSecondaryContainer));
}
}
snackbar.Show();
lastMessage = message;
}
}
}

View File

@@ -1,880 +0,0 @@
/*
This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file is based on Keepassdroid, Copyright Brian Pellin.
Keepass2Android is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Keepass2Android is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Keepass2Android. If not, see <http://www.gnu.org/licenses/>.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using Android.App;
using Android.Content;
using Android.Database;
using Android.OS;
using Android.Preferences;
using Android.Provider;
using Android.Views;
using Android.Widget;
using Android.Content.PM;
using Android.Content.Res;
using Android.Graphics;
using Android.Graphics.Drawables;
using Android.Hardware.Display;
using Android.Util;
using Android.Views.InputMethods;
using AndroidX.Core.View.InputMethod;
using Google.Android.Material.Dialog;
using KeePass.Util;
using keepass2android;
using KeePassLib;
using KeePassLib.Security;
using KeePassLib.Serialization;
using Org.Apache.Http.Util;
using Uri = Android.Net.Uri;
namespace keepass2android
{
public class LocaleManager
{
public static Context LocalizedAppContext
{
get
{
//the standard way of setting locale on the app context is through Application.AttachBaseContext,
//but because of https://bugzilla.xamarin.com/11/11182/bug.html this doesn't work
return setLocale(Application.Context);
}
}
public static Context setLocale(Context c)
{
return setNewLocale(c, getLanguage(c));
}
public static Context setNewLocale(Context c, String language)
{
return updateResources(c, language);
}
static string _language;
public static string Language
{
get { return _language; }
set { _language = value;languageLoaded = true;
}
}
static bool languageLoaded = false;
public static String getLanguage(Context c)
{
if (!languageLoaded)
{
var langPref = PreferenceManager.GetDefaultSharedPreferences(c).GetString(c.GetString(Resource.String.app_language_pref_key), null);
Language = LanguageEntry.PrefCodeToLanguage(langPref);
}
return Language;
}
private static Context updateResources(Context context, String language)
{
if (language == null)
return context;
Java.Util.Locale locale = new Java.Util.Locale(language);
Java.Util.Locale.Default = locale;
Resources res = context.Resources;
Configuration config = new Configuration(res.Configuration);
if ((int)Build.VERSION.SdkInt >= 17)
{
config.SetLocale(locale);
context = context.CreateConfigurationContext(config);
}
else
{
config.Locale = locale;
res.UpdateConfiguration(config, res.DisplayMetrics);
}
return context;
}
}
/// <summary>
/// A small container/wrapper that helps with the building and sorting of the
/// Language Preference list, and interoperability between it and LocaleManager
/// </summary>
class LanguageEntry
{
// "System language" preference code; maps to LocaleManager.Language = null
private const string SYS_LANG_CODE = "SysLang";
// Preference code (2-char lowercase, or SYS_LANG_CODE)
public readonly string Code;
// Localized display name
public readonly string Name;
// True if this LanguageEntry is the "System language", false otherwise
public readonly bool IsSystem;
/// <summary>
/// Creates a LanguageEntry from a Locale
/// </summary>
/// <param name="from"></param>
/// <returns></returns>
public static LanguageEntry OfLocale(Java.Util.Locale from)
{
return new LanguageEntry(from.Language, from.DisplayLanguage, false);
}
/// <summary>
/// Creates the "System language" LanguageEntry with the given localized display name,
/// special preference code, marked as a System entry.
/// </summary>
/// <param name="displayName"></param>
/// <returns></returns>
public static LanguageEntry SystemDefault(string displayName)
{
return new LanguageEntry(SYS_LANG_CODE, displayName, true);
}
private LanguageEntry(string code, string name, bool isSystem)
{
this.Code = code;
this.Name = name;
this.IsSystem = isSystem;
}
/// <summary>
/// Converts a language preference code to a code that is compatible with LocaleManager.Language
/// </summary>
/// <param name="code"></param>
/// <returns>A converted code, possibly null</returns>
public static string PrefCodeToLanguage(string code)
{
return string.IsNullOrEmpty(code) || SYS_LANG_CODE.Equals(code) ? null : code;
}
public override string ToString()
{
return "{" + this.Code + ":" + this.Name + "}";
}
}
public class Util
{
public const String KeyFilename = "fileName";
public const String KeyServerusername = "serverCredUser";
public const String KeyServerpassword = "serverCredPwd";
public const String KeyServercredmode = "serverCredRememberMode";
public static void PutIoConnectionToIntent(IOConnectionInfo ioc, Intent i, string prefix = "")
{
i.PutExtra(prefix + KeyFilename, ioc.Path);
i.PutExtra(prefix + KeyServerusername, ioc.UserName);
i.PutExtra(prefix + KeyServerpassword, ioc.Password);
i.PutExtra(prefix + KeyServercredmode, (int)ioc.CredSaveMode);
}
public static void SetIoConnectionFromIntent(IOConnectionInfo ioc, Intent i, string prefix = "")
{
ioc.Path = i.GetStringExtra(prefix + KeyFilename);
ioc.UserName = i.GetStringExtra(prefix + KeyServerusername) ?? "";
ioc.Password = i.GetStringExtra(prefix + KeyServerpassword) ?? "";
ioc.CredSaveMode = (IOCredSaveMode)i.GetIntExtra(prefix + KeyServercredmode, (int)IOCredSaveMode.NoSave);
}
public static string GetErrorMessage(Exception e)
{
return ExceptionUtil.GetErrorMessage(e);
}
public static Bitmap DrawableToBitmap(Drawable drawable)
{
Bitmap bitmap = null;
if (drawable is BitmapDrawable)
{
BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;
if (bitmapDrawable.Bitmap != null)
{
return bitmapDrawable.Bitmap;
}
}
if (drawable.IntrinsicWidth <= 0 || drawable.IntrinsicHeight <= 0)
{
bitmap = Bitmap.CreateBitmap(1, 1,
Bitmap.Config.Argb8888); // Single color bitmap will be created of 1x1 pixel
}
else
{
bitmap = Bitmap.CreateBitmap(drawable.IntrinsicWidth, drawable.IntrinsicHeight, Bitmap.Config.Argb8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.SetBounds(0, 0, canvas.Width, canvas.Height);
drawable.Draw(canvas);
return bitmap;
}
public static Bitmap ChangeImageColor(Bitmap sourceBitmap, Color color)
{
Bitmap temp = Bitmap.CreateBitmap(sourceBitmap, 0, 0,
sourceBitmap.Width, sourceBitmap.Height);
Bitmap resultBitmap = temp.Copy(Bitmap.Config.Argb8888, true);
Paint p = new Paint();
ColorFilter filter = new LightingColorFilter(color.ToArgb(), 0);
p.SetColorFilter(filter);
Canvas canvas = new Canvas(resultBitmap);
canvas.DrawBitmap(resultBitmap, 0, 0, p);
return resultBitmap;
}
public static float convertDpToPixel(float dp, Context context)
{
Resources resources = context.Resources;
DisplayMetrics metrics = resources.DisplayMetrics;
float px = dp * metrics.Density;
return px;
}
public static String GetClipboard(Context context)
{
Android.Content.ClipboardManager clipboardManager =
(ClipboardManager)context.GetSystemService(Context.ClipboardService);
var clip = clipboardManager.PrimaryClip;
if (clip != null && clip.ItemCount > 0)
{
return clip.GetItemAt(0).CoerceToText(context);
}
return "";
}
public static void CopyToClipboard(Context context, String text, bool isProtected)
{
Android.Content.ClipboardManager clipboardManager =
(ClipboardManager)context.GetSystemService(Context.ClipboardService);
ClipData clipData = Android.Content.ClipData.NewPlainText("KP2A", text);
if (isProtected)
{
//ClipDescription.Extras is only available since 24
if ((int)Build.VERSION.SdkInt >= 24)
{
var extras = clipData.Description.Extras ?? new Android.OS.PersistableBundle();
extras.PutBoolean("android.content.extra.IS_SENSITIVE", true);
clipData.Description.Extras = extras;
}
}
clipboardManager.PrimaryClip = clipData;
if (text == "")
{
//on some devices, adding empty text does not seem to work. Try again with some garbage.
clipData = Android.Content.ClipData.NewPlainText("KP2A", "***");
clipboardManager.PrimaryClip = clipData;
//seems to work better on some devices:
try
{
clipboardManager.Text = text;
}
catch (Exception exception)
{
Kp2aLog.LogUnexpectedError(exception);
}
}
}
private static readonly Regex ARC_DEVICE_PATTERN = new Regex(".+_cheets|cheets_.+");
public static bool IsChromeOS(Context context)
{
return
context.PackageManager.HasSystemFeature(
"org.chromium.arc.device_management") // https://stackoverflow.com/a/39843396/292233
|| (Build.Device != null && ARC_DEVICE_PATTERN.IsMatch(Build.Device))
;
}
public static void GotoUrl(Context context, String url)
{
if (!string.IsNullOrEmpty(url))
{
if (url.StartsWith("androidapp://"))
{
string packageName = url.Substring("androidapp://".Length);
Intent startKp2aIntent = context.PackageManager.GetLaunchIntentForPackage(packageName);
if (startKp2aIntent != null)
{
startKp2aIntent.AddCategory(Intent.CategoryLauncher);
startKp2aIntent.AddFlags(ActivityFlags.NewTask);
context.StartActivity(startKp2aIntent);
}
}
else
{
Uri uri = Uri.Parse(url);
context.StartActivity(new Intent(
url.StartsWith("tel:") ? Intent.ActionDial : Intent.ActionView,
uri));
}
}
}
public static void GotoUrl(Context context, int resId)
{
GotoUrl(context, context.GetString(resId));
}
public static void GotoMarket(Context context)
{
GotoUrl(context, context.GetString(Resource.String.MarketURL) + context.PackageName);
}
public static bool GotoDonateUrl(Context context)
{
string donateUrl = context.GetString(Resource.String.donate_url,
new Java.Lang.Object[]
{
context.Resources.Configuration.Locale.Language,
context.PackageName
});
try
{
GotoUrl(context, donateUrl);
return true;
}
catch (ActivityNotFoundException)
{
App.Kp2a.ShowMessage(context, Resource.String.error_failed_to_launch_link, MessageSeverity.Error);
return false;
}
}
public static String GetEditText(Activity act, int resId)
{
TextView te = (TextView)act.FindViewById(resId);
System.Diagnostics.Debug.Assert(te != null);
if (te != null)
{
return te.Text;
}
else
{
return "";
}
}
public static void SetEditText(Activity act, int resId, String str)
{
TextView te = (TextView)act.FindViewById(resId);
System.Diagnostics.Debug.Assert(te != null);
if (te != null)
{
te.Text = str;
}
}
/**
* Indicates whether the specified action can be used as an intent. This
* method queries the package manager for installed packages that can
* respond to an intent with the specified action. If no suitable package is
* found, this method returns false.
*
* @param context The application's environment.
* @param action The Intent action to check for availability.
*
* @return True if an Intent with the specified action can be sent and
* responded to, false otherwise.
*/
static bool IsIntentAvailable(Context context, String action, String type, List<String> categories)
{
PackageManager packageManager = context.PackageManager;
Intent intent = new Intent(action);
if (type != null)
intent.SetType(type);
if (categories != null)
categories.ForEach(c => intent.AddCategory(c));
IList<ResolveInfo> list =
packageManager.QueryIntentActivities(intent,
PackageInfoFlags.MatchDefaultOnly);
foreach (ResolveInfo i in list)
Kp2aLog.Log(i.ActivityInfo.ApplicationInfo.PackageName);
return list.Count > 0;
}
/// <summary>
/// Opens a browse dialog for selecting a file.
/// </summary>
/// <param name="activity">context activity</param>
/// <param name="requestCodeBrowse">requestCode for onActivityResult</param>
/// <param name="forSaving">if true, the file location is meant for saving</param>
/// <param name="tryGetPermanentAccess">if true, the caller prefers a location that can be used permanently
/// This means that ActionOpenDocument should be used instead of ActionGetContent (for not saving), as ActionGetContent
/// is more for one-time access, but therefore allows possibly more available sources.</param>
public static void ShowBrowseDialog(Activity activity, int requestCodeBrowse, bool forSaving,
bool tryGetPermanentAccess)
{
//even though GetContent is not well supported (since Android 7, see https://commonsware.com/Android/previews/appendix-b-android-70)
//we still offer it.
var loadAction = (tryGetPermanentAccess && IsKitKatOrLater)
? Intent.ActionOpenDocument
: Intent.ActionGetContent;
if ((!forSaving) &&
(IsIntentAvailable(activity, loadAction, "*/*", new List<string> { Intent.CategoryOpenable })))
{
Intent i = new Intent(loadAction);
i.SetType("*/*");
i.AddCategory(Intent.CategoryOpenable);
activity.StartActivityForResult(i, requestCodeBrowse);
}
else
{
if ((forSaving) && (IsKitKatOrLater))
{
Intent i = new Intent(Intent.ActionCreateDocument);
i.SetType("*/*");
i.AddCategory(Intent.CategoryOpenable);
activity.StartActivityForResult(i, requestCodeBrowse);
}
else
{
string defaultPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
ShowInternalLocalFileChooser(activity, requestCodeBrowse, forSaving, defaultPath);
}
}
}
public static bool IsKitKatOrLater
{
get { return (int)Build.VERSION.SdkInt >= 19; }
}
public static PendingIntentFlags AddMutabilityFlag(PendingIntentFlags flags, PendingIntentFlags mutability)
{
if ((int)Build.VERSION.SdkInt >= 31)
return flags | mutability;
else return flags;
}
private static void ShowInternalLocalFileChooser(Activity act, int requestCodeBrowse, bool forSaving,
string defaultPath)
{
#if !EXCLUDE_FILECHOOSER
string fileProviderAuthority = act.PackageName + ".android-filechooser.localfile";
Intent i = Keepass2android.Kp2afilechooser.Kp2aFileChooserBridge.GetLaunchFileChooserIntent(act,
fileProviderAuthority,
defaultPath);
if (forSaving)
i.PutExtra("group.pals.android.lib.ui.filechooser.FileChooserActivity.save_dialog", true);
act.StartActivityForResult(i, requestCodeBrowse);
#else
App.Kp2a.ShowMessage(act, "File Chooser excluded!", MessageSeverity.Error);
#endif
}
/// <summary>
/// Tries to extract the filename from the intent. Returns that filename or null if no success
/// (e.g. on content-URIs in Android KitKat+).
/// Guarantees that the file exists.
/// </summary>
public static string IntentToFilename(Intent data, Context ctx)
{
string s = GetFilenameFromInternalFileChooser(data, ctx);
if (!String.IsNullOrEmpty(s))
return s;
try
{
Uri uri = data.Data;
if ((uri != null) && (uri.Scheme == "content"))
{
String[] col = new String[] { MediaStore.MediaColumns.Data };
ICursor c1 = ctx.ContentResolver.Query(uri, col, null, null, null);
c1.MoveToFirst();
var possibleFilename = c1.GetString(0);
if (File.Exists(possibleFilename))
return possibleFilename;
}
}
catch (Exception e)
{
Kp2aLog.LogUnexpectedError(e);
}
String filename = data.Data.Path;
if ((String.IsNullOrEmpty(filename) || (!File.Exists(filename))))
filename = data.DataString;
if (File.Exists(filename))
return filename;
//found no valid file
return null;
}
public static string GetFilenameFromInternalFileChooser(Intent data, Context ctx)
{
#if !EXCLUDE_FILECHOOSER
string EXTRA_RESULTS = "group.pals.android.lib.ui.filechooser.FileChooserActivity.results";
if (data.HasExtra(EXTRA_RESULTS))
{
IList uris = data.GetParcelableArrayListExtra(EXTRA_RESULTS);
Uri uri = (Uri)uris[0];
{
return Group.Pals.Android.Lib.UI.Filechooser.Providers.BaseFileProviderUtils.GetRealUri(ctx, uri)
.ToString();
}
}
#endif
return null;
}
public static bool HasActionBar(Activity activity)
{
//Actionbar is available since 11, but the layout has its own "pseudo actionbar" until 13
return ((int)Android.OS.Build.VERSION.SdkInt >= 14) && (activity.ActionBar != null);
}
public delegate bool FileSelectedHandler(string filename);
public class DismissListener : Java.Lang.Object, IDialogInterfaceOnDismissListener
{
private readonly Action _onDismiss;
public DismissListener(Action onDismiss)
{
_onDismiss = onDismiss;
}
public void OnDismiss(IDialogInterface dialog)
{
_onDismiss();
}
}
class CancelListener : Java.Lang.Object, IDialogInterfaceOnCancelListener
{
private readonly Action _onCancel;
public CancelListener(Action onCancel)
{
_onCancel = onCancel;
}
public void OnCancel(IDialogInterface dialog)
{
_onCancel();
}
}
public static void ShowFilenameDialog(Activity activity, Func<string, Dialog, bool> onOpen,
Func<string, Dialog, bool> onCreate, Action onCancel, bool showBrowseButton, string defaultFilename,
string detailsText, int requestCodeBrowse)
{
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity);
builder.SetView(activity.LayoutInflater.Inflate(Resource.Layout.file_selection_filename, null));
if (onCancel != null)
builder.SetOnCancelListener(new CancelListener(onCancel));
Dialog dialog = builder.Create();
dialog.Show();
Button openButton = (Button)dialog.FindViewById(Resource.Id.open);
Button createButton = (Button)dialog.FindViewById(Resource.Id.create);
TextView enterFilenameDetails = (TextView)dialog.FindViewById(Resource.Id.label_open_by_filename_details);
openButton.Visibility = onOpen != null ? ViewStates.Visible : ViewStates.Gone;
createButton.Visibility = onCreate != null ? ViewStates.Visible : ViewStates.Gone;
// Set the initial value of the filename
EditText editFilename = (EditText)dialog.FindViewById(Resource.Id.file_filename);
editFilename.Text = defaultFilename;
enterFilenameDetails.Text = detailsText;
enterFilenameDetails.Visibility = enterFilenameDetails.Text == "" ? ViewStates.Gone : ViewStates.Visible;
// Open button
if (onOpen != null)
openButton.Click += (sender, args) =>
{
String fileName = ((EditText)dialog.FindViewById(Resource.Id.file_filename)).Text;
if (onOpen(fileName, dialog))
dialog.Dismiss();
};
// Create button
if (onCreate != null)
createButton.Click += (sender, args) =>
{
String fileName = ((EditText)dialog.FindViewById(Resource.Id.file_filename)).Text;
if (onCreate(fileName, dialog))
dialog.Dismiss();
};
Button cancelButton = (Button)dialog.FindViewById(Resource.Id.fnv_cancel);
cancelButton.Click += delegate
{
dialog.Dismiss();
if (onCancel != null)
onCancel();
};
ImageButton browseButton = (ImageButton)dialog.FindViewById(Resource.Id.browse_button);
if (!showBrowseButton)
{
browseButton.Visibility = ViewStates.Invisible;
}
browseButton.Click += (sender, evt) =>
{
string filename = ((EditText)dialog.FindViewById(Resource.Id.file_filename)).Text;
Util.ShowBrowseDialog(activity, requestCodeBrowse,
onCreate != null, /*TODO should we prefer ActionOpenDocument here?*/ false);
};
}
public static void QueryCredentials(IOConnectionInfo ioc, Action<IOConnectionInfo> afterQueryCredentials,
Activity activity)
{
//Build dialog to query credentials:
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(activity);
builder.SetTitle(activity.GetString(Resource.String.credentials_dialog_title));
builder.SetPositiveButton(activity.GetString(Android.Resource.String.Ok), (dlgSender, dlgEvt) =>
{
Dialog dlg = (Dialog)dlgSender;
string username = ((EditText)dlg.FindViewById(Resource.Id.cred_username)).Text;
string password = ((EditText)dlg.FindViewById(Resource.Id.cred_password)).Text;
int credentialRememberMode =
((Spinner)dlg.FindViewById(Resource.Id.cred_remember_mode)).SelectedItemPosition;
ioc.UserName = username;
ioc.Password = password;
ioc.CredSaveMode = (IOCredSaveMode)credentialRememberMode;
afterQueryCredentials(ioc);
});
builder.SetView(activity.LayoutInflater.Inflate(Resource.Layout.url_credentials, null));
builder.SetNeutralButton(activity.GetString(Android.Resource.String.Cancel),
(dlgSender, dlgEvt) => { });
Dialog dialog = builder.Create();
dialog.Show();
((EditText)dialog.FindViewById(Resource.Id.cred_username)).Text = ioc.UserName;
((EditText)dialog.FindViewById(Resource.Id.cred_password)).Text = ioc.Password;
((Spinner)dialog.FindViewById(Resource.Id.cred_remember_mode)).SetSelection((int)ioc.CredSaveMode);
}
public static void FinishAndForward(Activity activity, Intent i)
{
i.SetFlags(ActivityFlags.ForwardResult);
activity.StartActivity(i);
activity.Finish();
}
public static void PrepareDonateOptionMenu(IMenu menu, Context ctx)
{
var donateItem = menu.FindItem(Resource.Id.menu_donate);
if (donateItem != null)
{
donateItem.SetVisible(
!PreferenceManager.GetDefaultSharedPreferences(ctx)
.GetBoolean(ctx.GetString(Resource.String.NoDonateOption_key), false)
);
}
}
public static bool GetCloseDatabaseAfterFailedBiometricQuickUnlock(Context ctx)
{
return (PreferenceManager.GetDefaultSharedPreferences(ctx).GetBoolean(
ctx.GetString(Resource.String.CloseDatabaseAfterFailedBiometricQuickUnlock_key), true));
}
public static void MoveBottomBarButtons(int btn1Id, int btn2Id, int bottomBarId, Activity context)
{
var btn1 = context.FindViewById<Button>(btn1Id);
var btn2 = context.FindViewById<Button>(btn2Id);
var rl = context.FindViewById<RelativeLayout>(bottomBarId);
rl.ViewTreeObserver.GlobalLayout += (sender, args) =>
{
if (btn1.Width + btn2.Width > rl.Width)
{
btn2.SetPadding(btn2.PaddingLeft, (int)Util.convertDpToPixel(40, context), btn2.PaddingRight,
btn2.PaddingBottom);
}
};
}
public static MemoryStream StreamToMemoryStream(Stream stream)
{
var memoryStream = stream as MemoryStream;
if (memoryStream == null)
{
// Read the stream into memory
int capacity = 4096; // Default initial capacity, if stream can't report it.
if (stream.CanSeek)
{
capacity = (int)stream.Length;
}
memoryStream = new MemoryStream(capacity);
stream.CopyTo(memoryStream);
stream.Close();
memoryStream.Seek(0, SeekOrigin.Begin);
}
return memoryStream;
}
public static Bitmap MakeLargeIcon(Bitmap unscaled, Context context)
{
int height =
(int)(0.9 * context.Resources.GetDimension(Android.Resource.Dimension.NotificationLargeIconHeight));
int width = (int)(0.9 *
context.Resources.GetDimension(Android.Resource.Dimension.NotificationLargeIconWidth));
return Bitmap.CreateScaledBitmap(unscaled, width, height, true);
}
public static string GetProtocolId(IOConnectionInfo ioc)
{
string displayPath = App.Kp2a.GetFileStorage(ioc).GetDisplayName(ioc);
int protocolSeparatorPos = displayPath.IndexOf("://", StringComparison.Ordinal);
string protocolId = protocolSeparatorPos < 0 ? "file" : displayPath.Substring(0, protocolSeparatorPos);
return protocolId;
}
public static void MakeSecureDisplay(Activity context)
{
if (SecureDisplayConfigured(context) && !PreferenceManager.GetDefaultSharedPreferences(context)
.GetBoolean("no_secure_display_check", false))
{
var hasUnsecureDisplay = HasUnsecureDisplay(context);
if (hasUnsecureDisplay)
{
Kp2aLog.Log("Display is not secure");
var intent = new Intent(context, typeof(NoSecureDisplayActivity));
intent.AddFlags(ActivityFlags.SingleTop | ActivityFlags.ClearTop);
context.StartActivityForResult(intent, 9999);
}
Kp2aLog.Log("Setting FLAG_SECURE.");
context.Window.SetFlags(WindowManagerFlags.Secure, WindowManagerFlags.Secure);
}
else Kp2aLog.Log("Secure display disabled by user preference.");
}
public static bool SecureDisplayConfigured(Activity context)
{
return PreferenceManager.GetDefaultSharedPreferences(context).GetBoolean(
context.GetString(Resource.String.ViewDatabaseSecure_key), true);
}
public static bool HasUnsecureDisplay(Activity context)
{
bool hasUnsecureDisplay = false;
if ((int)Build.VERSION.SdkInt >= 17)
{
foreach (var display in ((DisplayManager)context.GetSystemService(Context.DisplayService))
.GetDisplays())
{
if ((display.Flags & DisplayFlags.Secure) == 0)
{
hasUnsecureDisplay = true;
}
}
}
return hasUnsecureDisplay;
}
public static void SetNoPersonalizedLearning(EditText editText)
{
if (editText == null)
return;
if ((int)Build.VERSION.SdkInt >= 26)
editText.ImeOptions = (ImeAction)EditorInfoCompat.ImeFlagNoPersonalizedLearning;
;
}
public static void SetNoPersonalizedLearning(View view)
{
if (view is ViewGroup vg)
{
for (int i = 0; i < vg.ChildCount; i++)
{
SetNoPersonalizedLearning(vg.GetChildAt(i));
}
}
if (view is EditText editText)
{
SetNoPersonalizedLearning(editText);
}
}
public static void SetNextFreeUrlField(PwEntry entry, string url)
{
string prefix = url.StartsWith(KeePass.AndroidAppScheme) ? "AndroidApp" : "KP2A_URL_";
int c = 1;
while (entry.Strings.Get(prefix + c) != null)
{
c++;
}
entry.Strings.Set(prefix + c, new ProtectedString(false, url));
}
}
}

View File

@@ -59,7 +59,7 @@ namespace keepass2android
}
catch (ActivityNotFoundException)
{
App.Kp2a.ShowMessage(Context, Resource.String.no_url_handler, MessageSeverity.Error);
Toast.MakeText(Context, Resource.String.no_url_handler, ToastLength.Long).Show();
}
};
@@ -71,7 +71,7 @@ namespace keepass2android
}
catch (ActivityNotFoundException)
{
App.Kp2a.ShowMessage(Context, Resource.String.no_url_handler, MessageSeverity.Error);
Toast.MakeText(Context, Resource.String.no_url_handler, ToastLength.Long).Show();
}
};
FindViewById(Resource.Id.translate).Click += delegate
@@ -82,7 +82,7 @@ namespace keepass2android
}
catch (ActivityNotFoundException)
{
App.Kp2a.ShowMessage(Context, Resource.String.no_url_handler, MessageSeverity.Error);
Toast.MakeText(Context, Resource.String.no_url_handler, ToastLength.Long).Show();
}
}; FindViewById(Resource.Id.donate).Click += delegate
{

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