Compare commits

...

412 Commits

Author SHA1 Message Date
Philipp Crocoll
ae2cfde897 change makefile to no longer use msbuild but always dotnet 2025-07-05 13:10:21 +02:00
Philipp Crocoll
42c66670b8 release process: make find calls to run in bash 2025-07-05 12:12:49 +02:00
Philipp Crocoll
288539b902 make output more verbose 2025-07-05 11:09:55 +02:00
Philipp Crocoll
61fd32f121 avoid building the "full" apk when calling apk_split 2025-07-05 09:39:54 +02:00
Philipp Crocoll
43108ec4a6 remove ls step in release 2025-07-05 08:35:58 +02:00
Philipp Crocoll
51089c6b98 change build artifact release paths. make archive name depend on matrix variables. 2025-07-05 08:16:30 +02:00
Philipp Crocoll
cf18fcf91c remove distclean from build 2025-07-05 08:15:58 +02:00
Philipp Crocoll
da0513c768 don't create release but only list files to test the release workflow without polluting github releases 2025-07-05 07:49:39 +02:00
Philipp Crocoll
37f520cdbe manifest for r9c 2025-07-05 07:40:21 +02:00
Philipp Crocoll
c98572bee0 fix wildcard for selecting files to upload to release 2025-07-05 07:39:44 +02:00
Philipp Crocoll
b1774ffc4b increase version number ot r9b 2025-07-05 07:19:26 +02:00
Philipp Crocoll
57aaa0c4cd start release action by pushing version tags instead of when release is created on Github 2025-07-05 07:18:21 +02:00
Philipp Crocoll
b961ae1b33 make sure AndroidManifest.xml exists before running nuget 2025-07-05 07:12:17 +02:00
Philipp Crocoll
5e418e2b1b run workload update before any dotnet/nuget calls in github actions 2025-07-05 06:57:00 +02:00
Philipp Crocoll
6d22a213f3 add build target apk_split; build all combinations in a Github action when creating the release 2025-07-05 06:44:28 +02:00
Philipp Crocoll
a76addc43f manifest for 1.12-r9 2025-07-05 06:43:39 +02:00
Philipp Crocoll
1d96217713 remove GooglePlayServices Auth and Base from apk in NoNet build 2025-07-05 06:42:42 +02:00
Philipp Crocoll
d2b8fdcfff allow using Dropbox secrets from environment (better suited for Github action builds) 2025-07-05 06:34:23 +02:00
Philipp Crocoll
507b671448 exclude Mega and OneDrive from NoNet build. Manifest for 1.12-r8c 2025-07-02 21:39:37 +02:00
Philipp Crocoll
3118ffaeb5 update version code and name => r8b (to distinguish from previously incorrect r8 build) 2025-07-02 21:04:22 +02:00
Philipp Crocoll
0abe29bd77 restore NoNet build, including removal of MLKit for that Flavor as it adds internet permission 2025-07-02 21:03:20 +02:00
Philipp Crocoll
f3a7831390 upload release artifacts before rebuilding 2025-06-30 22:29:31 +02:00
Philipp Crocoll
37cd58f7ba Merge branch 'v1.12' 2025-06-30 21:59:46 +02:00
Philipp Crocoll
7dd80a8ef7 remove "net" where no longer appropriate from workflow file 2025-06-30 16:16:55 +02:00
Philipp Crocoll
c78636264b align net and nonet manifests 2025-06-30 16:05:02 +02:00
Philipp Crocoll
035506a5a3 add nonet to release workflow 2025-06-30 16:04:38 +02:00
PhilippC
4cf46ef062 Merge pull request #2933 from PhilippC/v1.12
several updates for V1.12
2025-06-30 15:48:57 +02:00
Philipp Crocoll
c7b8063171 add previously forgotten changes 2025-06-30 14:36:59 +02:00
Philipp Crocoll
0a8b149c9a fix failing AutofillTest by adjusting to changed policy 2025-06-30 14:05:26 +02:00
Philipp Crocoll
9240a27791 run workload update before running tests, otherwise dotnet test can fail 2025-06-30 13:38:54 +02:00
PhilippC
e90d5b903c Merge pull request #2932 from PhilippC/2915-bug-exporting-the-key-file-broken-android-file-browser-doesnt-open
Fix crash when exporting key file
2025-06-30 12:43:08 +02:00
Philipp Crocoll
50b4a9f1b9 add missing Theme attributes 2025-06-30 12:42:05 +02:00
Philipp Crocoll
9783c3b5fe manifest for 1.12-r7 2025-06-24 17:12:22 +02:00
Philipp Crocoll
7a837e3237 show autofill more often without requiring manual requests, might mitigate issues in https://github.com/PhilippC/keepass2android/issues/2898 2025-06-24 17:10:50 +02:00
Philipp Crocoll
c8f6714373 refactoring: simplify autofill code 2025-06-24 17:10:08 +02:00
Philipp Crocoll
bc0313aa6a remove no-longer-needed step in release workflow 2025-06-24 15:41:46 +02:00
Philipp Crocoll
0f98668bcd improve app stability and refactor to get better logs 2025-06-24 15:41:11 +02:00
Philipp Crocoll
8d1195ac96 manifest for v1.12-r6b. Same as v1.12-r6, but need a new version code for Google Play release based on github-action built apk 2025-06-18 03:00:52 +02:00
Philipp Crocoll
df731ac1b3 add checksum to releases; cleanup workflow 2025-06-18 02:40:03 +02:00
Philipp Crocoll
bd784fa13d fix file path for apk to upload 2025-06-18 02:29:47 +02:00
Philipp Crocoll
a6bc5e657c remove no longer needed installation of sdk 26 2025-06-18 02:09:36 +02:00
Philipp Crocoll
56c4cdb321 add Configuration=Release 2025-06-18 02:04:52 +02:00
Philipp Crocoll
42a4a83c7d add upload apk to release in workflow 2025-06-17 22:20:56 +02:00
Philipp Crocoll
fe3933e154 try escape keystore env for building apk 2025-06-17 22:02:21 +02:00
Philipp Crocoll
3efe130ee8 remove unescaped test 2025-06-17 21:59:46 +02:00
Philipp Crocoll
5808857749 fix quoting for shell 2025-06-17 21:12:51 +02:00
Philipp Crocoll
a7397c3316 explicitly set shell=bash 2025-06-17 21:08:13 +02:00
Philipp Crocoll
d12f936898 next attempt 2025-06-17 20:51:10 +02:00
Philipp Crocoll
67f7d74bb9 and more debugging 2025-06-17 20:44:34 +02:00
Philipp Crocoll
b0d0f06073 more debug 2025-06-17 20:37:24 +02:00
Philipp Crocoll
67ee571c27 fix debugging signing 2025-06-17 20:32:15 +02:00
Philipp Crocoll
a360695271 debug signing 2025-06-17 20:28:05 +02:00
Philipp Crocoll
149857a516 make keystore path absolute 2025-06-17 18:45:17 +02:00
Philipp Crocoll
fb8ffb802f try to fix release workflow 2025-06-17 17:50:10 +02:00
Philipp Crocoll
e957073457 add workflow file for generating the "net" release apk 2025-06-17 17:30:16 +02:00
Philipp Crocoll
da86b0f50b manifest for 1.12-r6 2025-06-17 16:55:47 +02:00
PhilippC
0aa78ffd66 Merge pull request #2862 from Gian-Fr/fix-makefile
Fixed MakeFile for Linux
2025-06-17 16:52:04 +02:00
PhilippC
ce0087af99 Merge pull request #2850 from PhilippC/l10n_master3
New Crowdin updates
2025-06-17 16:46:16 +02:00
PhilippC
576bfeecfe Merge pull request #2918 from PhilippC/2869-fix-bad-behavior-when-starting-passwordactivity-twice
Fix bad behavior when starting passwordactivity twice
2025-06-17 16:45:12 +02:00
Philipp Crocoll
c0e2f34b79 use correct message severity when synchronizing 2025-06-17 16:42:30 +02:00
Philipp Crocoll
84d0c32610 fix issue with loading Yubikey aux file. closes #2880 2025-06-17 16:27:43 +02:00
Philipp Crocoll
40184dbd55 catch exception while sending log data. might throw if too much data is sent. 2025-06-17 14:58:06 +02:00
Philipp Crocoll
2d17bdde19 add more logging while loading database to get more info regarding #2868 2025-06-17 14:58:01 +02:00
Philipp Crocoll
e2babde1fa do not reset activity state in OnNewIntent if the activity hasn't even been initialized. closes #2869, closes #2888 2025-06-17 14:04:15 +02:00
Philipp Crocoll
e1f26fb045 cleanup and improve formatting 2025-06-17 13:58:29 +02:00
Philipp Crocoll
adbbfa0ac1 add more logging to diagnose #2891 2025-06-17 08:27:13 +02:00
PhilippC
37a013135e New translations strings.xml (French) 2025-06-05 23:19:38 +02:00
PhilippC
acc6ea7f85 New translations strings.xml (French) 2025-06-05 22:10:08 +02:00
PhilippC
62f012713a New translations strings.xml (Turkish) 2025-06-03 19:34:43 +02:00
PhilippC
0d726c1789 New translations strings.xml (Turkish) 2025-06-03 17:37:29 +02:00
Philipp Crocoll
f162e868b9 link libargon2.so for x86 and x86_64 to fix #2881 2025-06-03 17:07:17 +02:00
PhilippC
0a1f95653f New translations strings.xml (Spanish) 2025-06-01 16:19:37 +02:00
PhilippC
27451825c6 New translations strings.xml (Italian) 2025-05-29 10:32:52 +02:00
PhilippC
bdd6f1033e New translations strings.xml (Romanian) 2025-05-26 14:25:46 +02:00
PhilippC
c0413f9b74 New translations strings.xml (Turkish) 2025-05-26 12:52:41 +02:00
PhilippC
59d6fc8fdb New translations strings.xml (German) 2025-05-16 08:18:05 +02:00
PhilippC
c500245647 New translations strings.xml (German) 2025-05-16 06:50:12 +02:00
PhilippC
026a263f10 New translations strings.xml (German) 2025-05-13 10:41:52 +02:00
PhilippC
839e6d3cb4 New translations strings.xml (French) 2025-05-12 04:51:42 +02:00
PhilippC
735f4caf89 New translations strings.xml (French) 2025-05-12 03:33:02 +02:00
PhilippC
11af71ef82 New translations strings.xml (Slovak) 2025-05-12 00:26:40 +02:00
PhilippC
e09577d17f New translations strings.xml (Slovak) 2025-05-11 22:34:40 +02:00
Gian-Fr
c1dbf171f5 Fixed MakeFile for Linux 2025-05-01 16:21:02 +02:00
PhilippC
4ca4ec10be New translations strings.xml (Czech) 2025-04-24 11:00:27 +02:00
PhilippC
77fded4964 New translations strings.xml (Chinese Simplified) 2025-04-24 11:00:26 +02:00
PhilippC
578491b1c7 New translations strings.xml (Slovenian) 2025-04-24 08:40:12 +02:00
PhilippC
eee3ffd861 New translations strings.xml (Slovenian) 2025-04-24 07:18:52 +02:00
PhilippC
89696d7f0d New translations strings.xml (Portuguese, Brazilian) 2025-04-23 00:14:27 +02:00
Philipp Crocoll
e5d28f0979 only try to activate the keyboard once in password activity and entry edit activity; explain why the prompt shows up in SwitchImeActivity. closes #1400 2025-04-22 17:48:56 +02:00
Philipp Crocoll
0e581a66c5 treat server certificate failures as error by default, closes #1078 2025-04-22 16:02:02 +02:00
PhilippC
a202c76bf0 New translations strings.xml (Chinese Simplified) 2025-04-22 08:10:50 +02:00
PhilippC
c9936ab76b New translations strings.xml (Italian) 2025-04-16 21:31:25 +02:00
PhilippC
7ac6f7ed51 New translations strings.xml (Italian) 2025-04-16 21:31:24 +02:00
PhilippC
ceb31c54b1 Merge pull request #2847 from PhilippC/2430-remove-plain-storage-uri-from-logs
remove potential plain-text credentials for file storage from logs
2025-04-15 14:27:02 +02:00
Philipp Crocoll
42d8be593e remove potential plain-text credentials for file storage from logs 2025-04-15 14:00:31 +02:00
Philipp Crocoll
313adb6c3e manifest for 1.12-r5 2025-04-15 13:27:47 +02:00
PhilippC
668ba4cdee Merge pull request #2845 from PhilippC/2816-bug-yubikey-not-working-in-112
fix implementation of yubikey secret reading
2025-04-15 13:18:25 +02:00
PhilippC
a36bfa7ff5 Merge pull request #2833 from PhilippC/l10n_master3
New Crowdin updates
2025-04-15 12:45:48 +02:00
Philipp Crocoll
26c37bcd2a fix implementation of yubikey secret reading 2025-04-15 12:44:43 +02:00
PhilippC
1980f05a7c Merge pull request #2844 from PhilippC/2837-improve-error-reporting
Improve error reporting and fix crash
2025-04-15 12:17:18 +02:00
Philipp Crocoll
dbf10ba9fb Improve error reporting: Extract original message when showing "Java exception messages" consistently. Improve error handling in deprecated OneDrive API stub and avoid crash by no-longer throwing in Main-thread methods. 2025-04-15 11:45:16 +02:00
PhilippC
4be18d8373 Merge pull request #2830 from PhilippC/754-crash-when-using-fingerprint-before-otp
Fix crash when combining biometric unlock and KeeChallenge/OTP.
2025-04-15 11:42:59 +02:00
PhilippC
831b290d81 New translations strings.xml (Greek) 2025-04-13 20:35:49 +02:00
PhilippC
9d4c15f7bc New translations strings.xml (Greek) 2025-04-13 19:35:57 +02:00
PhilippC
4c4afa792d New translations strings.xml (Romanian) 2025-04-09 10:41:02 +02:00
Philipp Crocoll
8e256ac94d fix crash when combining biometric unlock and KeeChallenge/OTP. 2025-04-08 16:27:52 +02:00
Philipp Crocoll
65ff09f866 Manifest for 1.12-r4 2025-04-08 15:31:56 +02:00
Philipp Crocoll
8e9c2824cf add some files for building on Linux 2025-04-08 14:16:39 +02:00
PhilippC
92b8ff5c8d Merge pull request #2827 from PhilippC/2816-bug-yubikey-not-working-in-112
fix reading of cryptostream. Fixes Yubikey/KeeChallenge regression in 1.12-r1 .. 1.12-r3
2025-04-08 12:57:36 +02:00
PhilippC
223c3bfb8e Merge pull request #2826 from PhilippC/feature/snackbar-messages
use snackbars instead of toasts
2025-04-08 12:56:23 +02:00
PhilippC
b4e03a8374 Merge pull request #2797 from PhilippC/l10n_master3
New Crowdin updates
2025-04-08 12:41:50 +02:00
PhilippC
fb2df35d37 Merge pull request #2828 from PhilippC/2818-feat-new-color-scheme-too-beige-green
slightly adjust background color to become true gray.
2025-04-08 12:34:55 +02:00
Philipp Crocoll
345dad5d04 slightly adjust background color to become true gray. closes #2818 2025-04-08 12:34:07 +02:00
Philipp Crocoll
50d6598b02 fix reading of cryptostream. The implementation issue became a bug in .net8. Closes #2816 2025-04-08 12:25:29 +02:00
Philipp Crocoll
90f04b76f4 fix issue with MessagePresenter potentially crashing 2025-04-08 12:20:24 +02:00
Philipp Crocoll
8b4314c394 fix bug with messages not always showing as they should. 2025-04-08 11:25:43 +02:00
Philipp Crocoll
17241bc422 use snackbars instead of toasts (in most cases) 2025-04-08 10:37:40 +02:00
PhilippC
c4a73bf107 New translations strings.xml (Czech) 2025-04-04 15:32:59 +02:00
Philipp Crocoll
e76f3999b6 reduce logging verbosity of file provider 2025-04-01 15:36:39 +02:00
Philipp Crocoll
0567bfe645 fix wiki links 2025-04-01 12:42:43 +02:00
Philipp Crocoll
6043bdbc48 * restore some files which are link targets from within the app or the web. add links to the corresponding new wiki pages if possible. 2025-04-01 12:38:58 +02:00
PhilippC
4ba40ba24f New translations strings.xml (Slovenian) 2025-03-27 12:19:23 +01:00
PhilippC
e2711b709d New translations strings.xml (Portuguese, Brazilian) 2025-03-26 12:13:50 +01:00
PhilippC
4764b15e75 New translations strings.xml (Portuguese, Brazilian) 2025-03-26 09:06:54 +01:00
PhilippC
1b389ef12e New translations strings.xml (Japanese) 2025-03-26 09:06:43 +01:00
PhilippC
b32c2dbc7e New translations strings.xml (Czech) 2025-03-26 09:06:37 +01:00
PhilippC
f06937dab3 New translations strings.xml (French) 2025-03-26 09:06:32 +01:00
PhilippC
14efce62ff New translations strings.xml (Slovenian) 2025-03-26 09:06:29 +01:00
PhilippC
3c8b530e2e New translations strings.xml (Slovak) 2025-03-26 09:06:28 +01:00
PhilippC
9939e07b7d New translations strings.xml (Italian) 2025-03-26 09:06:27 +01:00
PhilippC
ecf416febc New translations strings.xml (German) 2025-03-26 09:06:25 +01:00
Philipp Crocoll
f949e6e389 add an item to the changelog for 1.12 2025-03-26 08:49:57 +01:00
Philipp Crocoll
15bf08f5e6 fix crash in NoSecureDisplayActivity by removing superfluous toolbar creation 2025-03-26 08:49:35 +01:00
Philipp Crocoll
fa69f38ab1 add some more error logging 2025-03-26 08:49:11 +01:00
Philipp Crocoll
d3b06080eb remove docs from repo. has been moved to https://github.com/PhilippC/keepass2android/wiki 2025-03-26 08:36:43 +01:00
PhilippC
749ab330ff Merge pull request #2815 from PhilippC/bugfix/list-onedrive-shares-failing
Improve OneDrive implementation
2025-03-25 17:01:01 +01:00
Philipp Crocoll
677c6555e8 this change fixes an issue with OneDrive: sometimes, the wrong DriveId was used to list the user's shares which was leading to an empty file browser screen. Also, files can be used if they are shared directly (not the parent folder) 2025-03-25 12:31:35 +01:00
PhilippC
c62f6ef139 Merge pull request #2814 from PhilippC/feature/otpauth-uris
Add support for otpauth:// URIs
2025-03-25 12:27:11 +01:00
Philipp Crocoll
0c34625782 Merge remote-tracking branch 'remotes/origin/master' into feature/otpauth-uris 2025-03-25 10:56:42 +01:00
Philipp Crocoll
e86fa6f9fa add support for otpauth:// URIs 2025-03-25 10:56:24 +01:00
PhilippC
e2e975f357 Merge pull request #2805 from PhilippC/feature/debug-improvements
Improve debugging experience
2025-03-25 10:53:02 +01:00
Philipp Crocoll
8eaf6d3f88 add comment in Makefile 2025-03-25 10:52:33 +01:00
PhilippC
1cb036941e New translations strings.xml (Vietnamese) 2025-03-23 09:12:18 +01:00
PhilippC
a53ff37e89 New translations strings.xml (Vietnamese) 2025-03-23 07:30:07 +01:00
PhilippC
dc3ee35c8b New translations strings.xml (Italian) 2025-03-21 14:54:31 +01:00
PhilippC
e05fe94650 New translations strings.xml (Italian) 2025-03-20 21:28:17 +01:00
PhilippC
b0cb0b06a2 New translations strings.xml (German) 2025-03-20 19:11:11 +01:00
PhilippC
a9fed1c203 Merge pull request #2804 from PhilippC/bugfix/gdrive-class-def-not-found
Bugfix/gdrive class def not found
2025-03-18 17:07:33 +01:00
Philipp Crocoll
6d8407676d add a custom "Kp2a debug" icon for distinguishability. remove an Assert we don't use and which should fire during debugging. 2025-03-18 16:43:47 +01:00
Philipp Crocoll
1157716c9c manifest for 1.12-r3 2025-03-18 16:35:58 +01:00
Philipp Crocoll
861615b7a4 update AndroidX packages and add missing dependencies to Guava and PlayServices.Auth. 2025-03-18 16:34:31 +01:00
Philipp Crocoll
e12d11264e switch to testing Google Drive 2025-03-18 16:32:55 +01:00
PhilippC
6d7b4810da New translations strings.xml (Hungarian) 2025-03-18 13:16:38 +01:00
PhilippC
585b747612 New translations strings.xml (Hungarian) 2025-03-18 11:35:13 +01:00
PhilippC
55887e1a89 New translations strings.xml (Slovak) 2025-03-17 18:31:07 +01:00
PhilippC
39a7a1298a New translations strings.xml (Romanian) 2025-03-14 09:08:28 +01:00
PhilippC
90059c5ae6 New translations strings.xml (Romanian) 2025-03-14 09:08:27 +01:00
PhilippC
ad63179484 New translations strings.xml (Romanian) 2025-03-14 07:51:48 +01:00
PhilippC
6eaba9d3a8 New translations strings.xml (Chinese Simplified) 2025-03-13 08:11:39 +01:00
PhilippC
11ce68902c New translations strings.xml (Slovenian) 2025-03-13 08:11:38 +01:00
PhilippC
70ca059e0f New translations strings.xml (Portuguese, Brazilian) 2025-03-12 00:48:40 +01:00
Philipp Crocoll
6588f40007 manifest for v1.12-r2 2025-03-11 18:31:06 +01:00
PhilippC
67aaba0656 Merge pull request #2787 from PhilippC/l10n_master3
New Crowdin updates
2025-03-11 16:59:24 +01:00
PhilippC
2d8eac4f12 Merge pull request #2796 from PhilippC/feature/improve-help-texts
improve help texts
2025-03-11 16:43:49 +01:00
Philipp Crocoll
00d822ad4b * show a toast when users without Play services are trying to scan a QR code (#2791)
* show a message informing that built-in Google Drive support is more and more restricted by Google (#2788)
2025-03-11 16:43:13 +01:00
PhilippC
5cf15b26b9 Merge pull request #2795 from PhilippC/bugfix/autofill-fixes
Autofill fixes
2025-03-11 16:37:31 +01:00
Philipp Crocoll
07f08a8851 autofill: avoid crash when looking up a null key.
closes https://github.com/PhilippC/keepass2android/issues/2362
2025-03-11 16:11:35 +01:00
Philipp Crocoll
d2e0ae6394 after updating to targetSdkVersion=34, an implicit mutable intent could lead to a crash.
closes https://github.com/PhilippC/keepass2android/issues/2790
2025-03-11 16:10:52 +01:00
PhilippC
cbae7c38cf New translations strings.xml (Romanian) 2025-03-07 12:55:01 +01:00
PhilippC
15656109bc New translations strings.xml (Romanian) 2025-03-07 11:03:36 +01:00
PhilippC
93e415120a New translations strings.xml (Slovak) 2025-03-06 13:19:21 +01:00
PhilippC
c47e7c03f9 New translations strings.xml (Portuguese, Brazilian) 2025-03-06 11:20:24 +01:00
PhilippC
125512d2c3 New translations strings.xml (French) 2025-03-05 23:47:24 +01:00
PhilippC
65b0d31762 New translations strings.xml (French) 2025-03-05 22:50:35 +01:00
PhilippC
9103529b64 New translations strings.xml (Japanese) 2025-03-05 15:46:39 +01:00
PhilippC
349952cb52 New translations strings.xml (Czech) 2025-03-05 15:46:38 +01:00
PhilippC
305cf6b050 New translations strings.xml (Slovenian) 2025-03-05 14:14:47 +01:00
PhilippC
78ff49a6d4 New translations strings.xml (Portuguese, Brazilian) 2025-03-04 15:38:10 +01:00
Philipp Crocoll
9cd8996aeb manifest and changelog for 1.12-r1 2025-03-04 15:01:19 +01:00
PhilippC
25232a4146 New translations strings.xml (Portuguese, Brazilian) 2025-03-04 14:29:54 +01:00
PhilippC
5266d2f985 New translations strings.xml (Romanian) 2025-03-04 13:19:32 +01:00
PhilippC
ae35d5873a Merge pull request #2785 from PhilippC/bugfix/webdav-fileselect-not-working-always
Bugfix: Webdav username and password could got lost during file selection
2025-03-04 12:25:26 +01:00
PhilippC
fe9aaa0d29 Merge pull request #2786 from PhilippC/bugfix/webdav-dialog-crashing
add a theme to SelectStorageLocationActivity
2025-03-04 12:16:08 +01:00
PhilippC
076bde7669 Merge pull request #2784 from PhilippC/l10n_master3
New Crowdin updates
2025-03-04 12:11:29 +01:00
Philipp Crocoll
592bee1ac1 Merge branch 'master' of https://github.com/PhilippC/keepass2android 2025-03-04 11:58:13 +01:00
Philipp Crocoll
c9a7d56da4 Webdav username and password could got lost during file selection (seems to depend on server behavior in PROPFIND request). Fix this for these cases. 2025-03-04 11:55:10 +01:00
PhilippC
2157cc8e4a New translations strings.xml (Romanian) 2025-03-04 11:54:51 +01:00
Philipp Crocoll
2cd11ba50e add a theme to SelectStorageLocationActivity. without, the webdav credential dialog was crashing. 2025-02-25 16:15:45 +01:00
Philipp Crocoll
eddcedd00b manifest and changelog for 1.12-r0. Fix changelog to adhere to theme. 2025-02-25 13:02:29 +01:00
PhilippC
0d4fe11cfb Merge pull request #2772 from PhilippC/l10n_master3
New Crowdin updates
2025-02-25 11:07:18 +01:00
PhilippC
ecbf4e511d New translations strings.xml (Spanish) 2025-02-24 14:24:35 +01:00
PhilippC
16bbae832e New translations strings.xml (Slovenian) 2025-02-17 08:34:55 +01:00
PhilippC
571da788d0 New translations strings.xml (Slovak) 2025-02-14 22:47:24 +01:00
PhilippC
f2eed5ece0 New translations strings.xml (Slovak) 2025-02-14 21:28:37 +01:00
PhilippC
2c5516310f New translations strings.xml (Chinese Simplified) 2025-02-12 12:55:34 +01:00
PhilippC
5550dffab8 New translations strings.xml (Portuguese, Brazilian) 2025-02-11 23:57:51 +01:00
PhilippC
b9744dd6b5 New translations strings.xml (German) 2025-02-11 18:28:15 +01:00
PhilippC
82fedb3526 Merge pull request #2771 from PhilippC/l10n_master3
New Crowdin updates
2025-02-11 17:16:10 +01:00
PhilippC
cc4f0a3dec Merge pull request #2768 from PhilippC/update/upgrade-dropbox-sdk-to-7-0-0
upgrade Dropbox SDK to 7.0.0.
2025-02-11 17:06:30 +01:00
PhilippC
cdfa48d942 New translations strings.xml (German) 2025-02-11 16:48:42 +01:00
PhilippC
c4edc871b3 New translations strings.xml (German) 2025-02-11 16:43:20 +01:00
PhilippC
ed6d1d2aaf New translations strings.xml (German) 2025-02-11 16:43:03 +01:00
PhilippC
b0f56dbb2c New translations strings.xml (German) 2025-02-11 16:42:44 +01:00
PhilippC
c794efe899 New translations strings.xml (Yoruba) 2025-02-11 16:19:20 +01:00
PhilippC
c2fb4f103d New translations strings.xml (Vietnamese) 2025-02-11 16:19:15 +01:00
PhilippC
18b192bc42 New translations strings.xml (Hebrew) 2025-02-11 16:19:08 +01:00
PhilippC
522fc9816d New translations strings.xml (German) 2025-02-11 16:19:06 +01:00
PhilippC
3be4fb8460 New translations strings.xml (Romanian) 2025-02-11 16:19:02 +01:00
PhilippC
7ca07814bb New translations strings.xml (Yoruba) 2025-02-11 16:19:01 +01:00
PhilippC
aaea8ed956 New translations strings.xml (Vietnamese) 2025-02-11 16:18:57 +01:00
PhilippC
822ccdc349 New translations strings.xml (German) 2025-02-11 16:18:49 +01:00
PhilippC
dbc1b9553a New translations strings.xml (Yoruba) 2025-02-11 16:18:45 +01:00
PhilippC
04c5f08f5f New translations strings.xml (Norwegian Bokmal) 2025-02-11 16:18:44 +01:00
PhilippC
5c10385246 New translations strings.xml (Sinhala) 2025-02-11 16:18:43 +01:00
PhilippC
90f9b6f414 New translations strings.xml (Malayalam) 2025-02-11 16:18:42 +01:00
PhilippC
b555194d8e New translations strings.xml (Azerbaijani) 2025-02-11 16:18:41 +01:00
PhilippC
0e7c4eced7 New translations strings.xml (Norwegian Nynorsk) 2025-02-11 16:18:41 +01:00
PhilippC
816a40d0ec New translations strings.xml (Croatian) 2025-02-11 16:18:40 +01:00
PhilippC
75a819b7b4 New translations strings.xml (Persian) 2025-02-11 16:18:39 +01:00
PhilippC
cf0e5be55c New translations strings.xml (Indonesian) 2025-02-11 16:18:38 +01:00
PhilippC
492fb404fe New translations strings.xml (Portuguese, Brazilian) 2025-02-11 16:18:37 +01:00
PhilippC
6453d215eb New translations strings.xml (Galician) 2025-02-11 16:18:36 +01:00
PhilippC
35f13eff53 New translations strings.xml (Vietnamese) 2025-02-11 16:18:34 +01:00
PhilippC
fe2c5185eb New translations strings.xml (Chinese Traditional) 2025-02-11 16:18:33 +01:00
PhilippC
f1429c0d0d New translations strings.xml (Chinese Simplified) 2025-02-11 16:18:32 +01:00
PhilippC
d6e30b805d New translations strings.xml (Ukrainian) 2025-02-11 16:18:31 +01:00
PhilippC
e8aeaf71d4 New translations strings.xml (Turkish) 2025-02-11 16:18:30 +01:00
PhilippC
1500d635e9 New translations strings.xml (Swedish) 2025-02-11 16:18:29 +01:00
PhilippC
27798ea073 New translations strings.xml (Serbian (Cyrillic)) 2025-02-11 16:18:28 +01:00
PhilippC
891918269e New translations strings.xml (Slovenian) 2025-02-11 16:18:28 +01:00
PhilippC
0cf8ec67da New translations strings.xml (Slovak) 2025-02-11 16:18:27 +01:00
PhilippC
217a3d107d New translations strings.xml (Russian) 2025-02-11 16:18:26 +01:00
PhilippC
38a229cb78 New translations strings.xml (Portuguese) 2025-02-11 16:18:24 +01:00
PhilippC
0598d49ba0 New translations strings.xml (Polish) 2025-02-11 16:18:24 +01:00
PhilippC
f8f2dbc7f4 New translations strings.xml (Dutch) 2025-02-11 16:18:22 +01:00
PhilippC
7449d5dbb1 New translations strings.xml (Korean) 2025-02-11 16:18:22 +01:00
PhilippC
a890b0f66e New translations strings.xml (Japanese) 2025-02-11 16:18:21 +01:00
PhilippC
1647ed455e New translations strings.xml (Italian) 2025-02-11 16:18:20 +01:00
PhilippC
a383847d5b New translations strings.xml (Hungarian) 2025-02-11 16:18:19 +01:00
PhilippC
3fb2a824cf New translations strings.xml (Hebrew) 2025-02-11 16:18:18 +01:00
PhilippC
dd7579ce7c New translations strings.xml (Finnish) 2025-02-11 16:18:17 +01:00
PhilippC
49c51ceea4 New translations strings.xml (Basque) 2025-02-11 16:18:16 +01:00
PhilippC
a5370793cb New translations strings.xml (Greek) 2025-02-11 16:18:15 +01:00
PhilippC
6f72020607 New translations strings.xml (German) 2025-02-11 16:18:14 +01:00
PhilippC
6a7c61ea3c New translations strings.xml (Danish) 2025-02-11 16:18:13 +01:00
PhilippC
46c1854481 New translations strings.xml (Czech) 2025-02-11 16:18:12 +01:00
PhilippC
72030a4749 New translations strings.xml (Catalan) 2025-02-11 16:18:11 +01:00
PhilippC
1c18884527 New translations strings.xml (Bulgarian) 2025-02-11 16:18:10 +01:00
PhilippC
1c5c695f4f New translations strings.xml (Belarusian) 2025-02-11 16:18:09 +01:00
PhilippC
a1cef1ccda New translations strings.xml (Arabic) 2025-02-11 16:18:08 +01:00
PhilippC
4dfcbbf62a New translations strings.xml (Spanish) 2025-02-11 16:18:07 +01:00
PhilippC
d0e1a15673 New translations strings.xml (French) 2025-02-11 16:18:06 +01:00
PhilippC
8fc9324be5 New translations strings.xml (Romanian) 2025-02-11 16:18:05 +01:00
PhilippC
4f4724804e Merge pull request #2769 from PhilippC/bugfix/crowdin-config-fix
fix crowdin.yml file: adjust to renamed folder
2025-02-11 16:04:17 +01:00
Philipp Crocoll
533d92509f fix crowdin.yml file: adjust to renamed folder 2025-02-11 16:03:53 +01:00
Philipp Crocoll
96960ef376 upgrade Dropbox SDK to 7.0.0. This is required before 01/2026 as described in https://dropbox.tech/developers/api-server-certificate-changes. 2025-02-11 16:00:59 +01:00
PhilippC
46194317a8 Merge pull request #2766 from PhilippC/bugfix/potential-crashes-when-registering-receivers
fix potential crashes
2025-02-11 13:54:23 +01:00
PhilippC
c4d6e18759 Merge pull request #2765 from PhilippC/bugfix/2371-autofill-not-working-with-compose-apps
Fix autofill with Compose apps
2025-02-11 13:21:11 +01:00
Philipp Crocoll
ee41a600b1 fix potential crashes on old Android versions when registering receivers (after upgrade to support target sdk 34) 2025-02-11 13:18:23 +01:00
PhilippC
07562cc5a9 Merge pull request #2744 from midnight-wonderer/bug/hostname-matching
Fix hostname matching logic. closes #1926
2025-02-11 12:33:49 +01:00
Philipp Crocoll
0f5b411dc7 Fix an issue that autofill didn't work with compose apps as described on #2371. Closes #2371. Closes #2590 which is a prototype for this commit. 2025-02-11 12:33:14 +01:00
PhilippC
7577e3064c Merge pull request #2764 from PhilippC/remove-unused-package
remove no-longer required package from dependencies
2025-02-11 12:07:21 +01:00
Philipp Crocoll
d33e1f266c remove no-longer required package from dependencies 2025-02-11 11:12:25 +01:00
PhilippC
aeda21f163 Merge pull request #2762 from PhilippC/i18n-fix
I18n fix for password hint
2025-02-11 08:19:05 +01:00
Philipp Crocoll
4d1142df4d Merge branch 'password-hint-fix' into i18n-fix 2025-02-06 13:03:22 +01:00
Philipp Crocoll
4c632d0c72 fix i18n of a password hint in entry edit 2025-02-06 13:02:28 +01:00
PhilippC
cd75d7cda8 Merge pull request #2761 from PhilippC/feature/target-sdk-34
upgrade to target sdk 34: mark OngoingNotificationsService as Use, register receivers as exported
2025-02-06 12:42:02 +01:00
Philipp Crocoll
deb3701ebf Merge branch 'master' into i18n-fix 2025-02-06 12:30:04 +01:00
PhilippC
2bd0d415b6 Merge pull request #2758 from jonalmeida/patch-1
Remove deprecated Firefox Nightly app ID from trusted browsers
2025-02-06 12:17:20 +01:00
Philipp Crocoll
0bd58bd51f upgrade to target sdk 34: mark OngoingNotificationsService as Special Use, register receivers as exported
(This is required because it is allowed that plugins send intents and also intents from system notifications are not received in NonExported mode)
2025-02-06 12:12:54 +01:00
Philipp Crocoll
d998e08b4f make CreateDatabaseActivity use the blue theme to be more consistent 2025-02-06 11:19:29 +01:00
PhilippC
60e5dc21f1 Merge pull request #2760 from PhilippC/update-onedrive-implementation
Update onedrive implementation
2025-02-06 11:17:28 +01:00
Philipp Crocoll
793341918b cleanup code and fix bug with "My files" variant 2025-02-06 10:40:36 +01:00
Jonathan Almeida
8759fe5346 Remove deprecated Firefox Nightly app ID from trusted browsers
This app ID has not been used for a few years now and can be safely removed. 

See the original PR for added context: https://github.com/PhilippC/keepass2android/pull/896
2025-02-03 18:05:10 -05:00
PhilippC
1b8c0b8a70 Merge pull request #2754 from anttiharju/fix-push-branch-name
Use the right branch name
2025-01-30 10:37:02 +01:00
Philipp Crocoll
087af49514 fix OneDrive implementation for app folder 2025-01-30 09:09:25 +01:00
anttiharju
05e270bde3 Use the right branch name 2025-01-28 22:19:56 +02:00
Philipp Crocoll
7c6ce14348 this is the first attempt to fix the currently broken OneDrive implemenation by upgrading to Graph SDK 5. Unfortunately, the SDK is much harder to use because of a missing abstraction for DriveItems on different places (regular folder, special folder, shared folder) and also doesn't work well, see e.g. https://stackoverflow.com/questions/79374963/list-shared-folders-with-graph-sdk or https://stackoverflow.com/questions/79374845/graph-sdk-c-missing-methods-for-working-with-app-folder. 2025-01-21 16:23:07 +01:00
PhilippC
fdfa2b0bf2 Merge pull request #2747 from dktapps/patch-1
fix readme logo
2025-01-21 07:53:18 +01:00
Dylan T.
3fde725657 fix readme logo 2025-01-15 00:16:52 +00:00
PhilippC
146f181682 Merge pull request #2745 from PhilippC/argon2-fix
fix issue with argon2 kdf
2025-01-14 16:50:08 +01:00
PhilippC
1094b43009 Merge pull request #2746 from PhilippC/bugfix/refresh-number-of-entries-in-group
fix: number of entries in group did not immediately update
2025-01-14 16:49:54 +01:00
Philipp Crocoll
379d43e2b8 Merge remote-tracking branch 'remotes/origin/update-libs-and-tools' 2025-01-14 15:30:46 +01:00
Philipp Crocoll
090bc6249a fix: number of entries in group did not immediately update when adding entries 2025-01-14 15:29:22 +01:00
Philipp Crocoll
73fc93ed96 fix issue with argon2 kdf (regression from .net8 migration) by
* including armeabi-v7 and arm64-v8 .so files
* switching to [LibraryImport] instead of [DllImport]
2025-01-14 13:55:21 +01:00
Sarun Rattanasiri
980df2b3a7 fix hostname matching logic 2025-01-14 17:24:48 +07:00
PhilippC
81b48a3ac2 Merge pull request #2743 from PhilippC/sdk-style-projects
Migrate to .net 8 and Material 3
2025-01-14 10:16:23 +01:00
Philipp Crocoll
29fc0fe5ae adjust Makefile to hardlink the appropriate Manifest file from the Manifests folder. Adjust build.yml for renamed test project. Add AndroidManifest.xml to .gitignore as this is only a link. 2025-01-14 08:40:13 +01:00
Philipp Crocoll
0cae15a219 port AutofillParser unit tests to .net 8 2025-01-07 13:16:54 +01:00
Philipp Crocoll
409f6b9981 rename folder keepass2android => keepass2android-app 2025-01-07 11:20:08 +01:00
Philipp Crocoll
738d59dbda remove old (pre-sdk-style) projects, rename sdk style projects to have the names of the old ones. adjust the .sln and .csproj files accordingly. This is a bit like a squash commit, as it shows the diff between the pre-sdk-style code with the updated code (sdk-style, Material3, Zxing=>GMS CodeScanner, Kdbp support removed) 2025-01-07 11:19:23 +01:00
Philipp Crocoll
63836de8aa add svgs for two custom icons 2025-01-07 10:38:14 +01:00
Philipp Crocoll
9a95691860 remove no-longe-used testing project 2025-01-07 10:37:47 +01:00
Philipp Crocoll
4d129c5e05 add filtered resources to java project files 2025-01-07 10:23:44 +01:00
Philipp Crocoll
a672e9bbd2 reactivate QR scanning capabilities by using GMS CodeScanner (instead of ZXing which is no longer compatible with new .net Android); copy resource string from KP2AKeyboard project to app such that it can be used in the manifest. 2025-01-07 10:22:19 +01:00
Philipp Crocoll
0e3ef76d6e recreate group activity when list text size was changed 2024-12-31 15:15:11 +01:00
Philipp Crocoll
2ad073c80f fix layout of password activity 2024-12-31 14:22:16 +01:00
Philipp Crocoll
33c1f5d6dd mask password textedit before assigning password. This ensures that there is not the fraction of a second where the password might be visible. 2024-12-31 14:00:24 +01:00
Philipp Crocoll
f0d9c8134e improve behavior when changing the theme 2024-12-31 13:04:37 +01:00
PhilippC
830494851d Merge pull request #2734 from anttiharju/prevent-duplicate-CI-runs
Prevent duplicate CI runs in PRs
2024-12-31 11:34:24 +01:00
anttiharju
6e30dd35ee Prevent duplicate runs in PRs 2024-12-20 08:11:26 +02:00
Philipp Crocoll
bf5411bdb8 minor modifications to improve Material UI. Change dialog to Material Dialogs. 2024-12-17 13:14:56 +01:00
Philipp Crocoll
e14cd62e75 changes to implement material design/fix flaws and issues in the major activities. More testing pending. 2024-12-10 18:35:02 +01:00
Philipp Crocoll
ed9cd7180c replace icons by vector drawables to fix color issues with day/night scheme 2024-12-10 15:06:37 +01:00
Philipp Crocoll
add8209f11 change encoding to utf8 2024-12-10 11:47:51 +01:00
Philipp Crocoll
9194436bc8 start replacing some icons 2024-12-10 11:22:55 +01:00
Philipp Crocoll
c3c1f1ecb7 add database filename on password activity again 2024-12-10 11:22:30 +01:00
Philipp Crocoll
83d076c9a7 fix bottom bar in QuickUnlock and Password activity 2024-12-07 08:12:11 +01:00
Philipp Crocoll
f974b0ffa0 remove bad named folder 2024-12-07 07:54:14 +01:00
Philipp Crocoll
95d7ecd066 first steps towards Material3 design
* updates themes and color definitions
 * removed many color attributes from views and special configurations
 * reworked settings completely to get rid of "settings toolsbar"
 * use DayNight theme instead of custom light/dark
Note that there are quite a few issues left.
2024-12-07 07:53:34 +01:00
Philipp Crocoll
b101bf8d5f rename apk of PluginSdk to avoid a weird binding error 2024-12-07 07:46:41 +01:00
Philipp Crocoll
52a62df97c migrate preferences to AndroidX, separate one large settings fragment into many smaller ones to get rid of "ToolbarPreference" workaround 2024-12-01 09:52:08 +01:00
Philipp Crocoll
e873ed466e + theme test for testing material design stuff (because old theming is broken after upgrading to sdk-style projects) 2024-11-19 14:25:11 +01:00
Philipp Crocoll
b153ea2cb4 remove unused stuff from PluginSDK project 2024-11-19 09:44:18 +01:00
Philipp Crocoll
c32a6eae7a make app-style app compilable
* switched from support library to androidx
 * disabled some code which will need to be fixed later (strings in manifest, zxing qr reader)
 * changes in styles need to be tested
still crashing when trying to use any code from the Keyboard binding.
2024-11-19 09:43:54 +01:00
Philipp Crocoll
43f6064faa towards sdk-style projects. As of now, all code/resources etc. is duplicated for new projects in new folders. this will be moved back to the original locations (and then squashed). App currently does not build. 2024-11-05 10:58:57 +01:00
快乐小牛
f001d1fa54 fix: entry_edit hint i18n 2024-10-30 11:48:23 +08:00
Philipp Crocoll
dad9b0e53f update minSdk of offline version to 21 (Android 5.0) to simplify the build. 2024-10-22 15:49:08 +02:00
Philipp Crocoll
b2b0b8ddc9 switch to Java 17 in build.yml 2024-10-22 15:23:27 +02:00
Philipp Crocoll
9494f28acf Merge branch 'anttiharju/master' into update-libs-and-tools 2024-10-22 15:11:36 +02:00
Philipp Crocoll
a98cd33cff updating OkHttp, okhttp-digest and dropbox sdk. Removing no longer needed onedrive aar.
I wasn't successful in binding the latest dropbox sdk (7.0) and therefor only updated to 5.4.6 which doesn't require an .aar.
2024-10-22 15:02:10 +02:00
anttiharju
65092dcccf Switch okhttp-digest source to github
as instructed at
https://github.com/rburgst/okhttp-digest?tab=readme-ov-file#use-via-gradle
2024-10-15 22:55:48 +03:00
anttiharju
e464c59796 Downgrade setup-gradle to v3
v3 is node20 and doesn't do validation by default like v4

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

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

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

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

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

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

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

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

first steps towards #803
2024-01-17 07:07:46 +01:00
PhilippC
a5ef4ccc7a Merge pull request #2514 from PhilippC/1942--fix-text-color-not-themed
Fix bad text color on autofill target preference dialog
2024-01-15 12:30:50 +01:00
Philipp Crocoll
dfd9c32251 Fixes bad text color, closes https://github.com/PhilippC/keepass2android/issues/1942 2024-01-15 11:51:59 +01:00
PhilippC
5397a1c88f New translations strings.xml (Polish) 2024-01-15 09:22:32 +01:00
PhilippC
fdcd4321e0 Merge pull request #2512 from PhilippC/2504--copy-on-longclick
fix merge issue
2024-01-15 08:27:57 +01:00
Philipp Crocoll
11013791ef revert another unintentionally commit change 2024-01-15 08:06:19 +01:00
Philipp Crocoll
6958a2d189 revert unintentionally commited changes to AutofillTest 2024-01-15 07:47:21 +01:00
Philipp Crocoll
94ec8cf1ac fix merge issue 2024-01-15 06:56:32 +01:00
Philipp Crocoll
63631fa81f Merge branch '2504--copy-on-longclick'
# Resolved Conflicts:
#	src/keepass2android/EntryActivity.cs
2024-01-14 21:55:23 +01:00
PhilippC
107d9c6235 Merge pull request #2500 from PhilippC/l10n_master2
New Crowdin updates
2024-01-14 21:52:47 +01:00
PhilippC
8e4ee4f588 Merge pull request #2508 from PhilippC/2507--dialog-behind-keyboard
making activity adjustResize to (hopefully) close #2507
2024-01-14 21:52:39 +01:00
Philipp Crocoll
f0a06faae1 copy text value to clipboard when long-clicking in Entry view. closes #2504 2024-01-14 21:34:19 +01:00
PhilippC
99db263833 Merge branch 'master' into 2507--dialog-behind-keyboard 2024-01-13 11:47:12 +01:00
Philipp Crocoll
e2e42cd177 making activity adjustResize to (hopefully) close #2507 (in some Android versions, it seems like the keyboard from autofill does not get hidden as it should, overlaying the dialog buttons) 2024-01-13 11:45:44 +01:00
PhilippC
a376c6ee0b New translations strings.xml (Japanese) 2024-01-11 14:40:23 +01:00
PhilippC
0326e02ddd New translations strings.xml (Slovenian) 2024-01-09 09:54:12 +01:00
PhilippC
d75482f3bd New translations strings.xml (Dutch) 2024-01-08 13:48:56 +01:00
PhilippC
bca0d042a1 New translations strings.xml (Dutch) 2024-01-08 12:05:55 +01:00
PhilippC
29eaf5f205 New translations strings.xml (Dutch) 2024-01-07 18:14:06 +01:00
PhilippC
78da5e2973 New translations strings.xml (Dutch) 2024-01-07 18:14:05 +01:00
PhilippC
20541618f9 New translations strings.xml (Dutch) 2024-01-07 18:14:04 +01:00
PhilippC
e459d280f2 New translations strings.xml (Dutch) 2024-01-07 17:09:40 +01:00
PhilippC
705e2e4a86 New translations strings.xml (Dutch) 2024-01-07 15:55:10 +01:00
PhilippC
cf9b368afc New translations strings.xml (Dutch) 2024-01-07 14:01:42 +01:00
PhilippC
f1c6a5365c New translations strings.xml (Dutch) 2024-01-07 13:03:09 +01:00
PhilippC
6a61bf6364 New translations strings.xml (Dutch) 2024-01-07 11:14:14 +01:00
PhilippC
814571c746 New translations strings.xml (Dutch) 2024-01-06 21:07:45 +01:00
PhilippC
fc5587260f New translations strings.xml (Dutch) 2024-01-06 19:51:14 +01:00
PhilippC
674ba7bd71 New translations strings.xml (Dutch) 2024-01-06 18:54:57 +01:00
PhilippC
556f82f786 New translations strings.xml (Dutch) 2024-01-06 17:48:44 +01:00
PhilippC
58c5c5882b New translations strings.xml (Chinese Simplified) 2024-01-06 04:27:00 +01:00
PhilippC
a706571e66 New translations strings.xml (Portuguese, Brazilian) 2024-01-05 12:03:52 +01:00
PhilippC
3997b21aec Merge pull request #2502 from PhilippC/totp-improvements
TOTP improvements
2024-01-05 09:28:50 +01:00
Philipp Crocoll
c354612369 catch potential crash when otp data is invalid
closes https://github.com/PhilippC/keepass2android/issues/1602
2024-01-05 09:27:34 +01:00
Philipp Crocoll
4fea731c87 move TOTP field up in EntryActivity and add a progress bar to indicate the time left for using the TOTP
closes https://github.com/PhilippC/keepass2android/issues/2315
2024-01-05 09:01:29 +01:00
Philipp Crocoll
e189776ba9 Merge branch 'master' into totp-improvements 2024-01-05 06:46:04 +01:00
Philipp Crocoll
31255f0c52 move TOTP button on keyboard to third position (after User/Pwd) and disable TOTP "internal fields"
closes #1341
closes #2394
closes #1844
2024-01-04 19:09:24 +01:00
Philipp Crocoll
059280efd0 Introduce preference options to control the behavior when autofilling TOTP entries (show entry notification, activate keyboard, copy TOTP to clipboard)
Required a bit of refactoring to decide when to bring up keyboard selection dialog. Also changed the code so it shows e.g. on Pixel 6a with Android 14, previously did not.
closes #2308
closes #1286 as it now shows up the entry notificaton (unless disabled) and solves the underlying issue in the best found way
2024-01-04 19:06:49 +01:00
Philipp Crocoll
5edc070aa8 show entry notification when autofilling an entry with TOTP (to allow copying TOTP to clipboard)
fixes https://github.com/PhilippC/keepass2android/issues/1272
2024-01-04 08:21:45 +01:00
PhilippC
95843b1134 New translations strings.xml (Dutch) 2024-01-03 23:15:02 +01:00
PhilippC
d2ea9b18a8 New translations strings.xml (Spanish) 2024-01-03 21:44:24 +01:00
PhilippC
828425ab0e New translations strings.xml (Spanish) 2024-01-03 20:48:41 +01:00
PhilippC
4395f422b3 New translations strings.xml (Portuguese, Brazilian) 2024-01-03 11:52:22 +01:00
PhilippC
be2c28811c Merge pull request #2498 from PhilippC/2246--fix-base32-parsing-in-keepass2totp
replace base32 parsing algorithm to fix issue with some TOTP entries using KeePass2 style
2024-01-03 11:27:14 +01:00
PhilippC
337e6324ff Merge pull request #2497 from PhilippC/1248--totp-docs
add TOTP section in Docs
2024-01-03 09:01:45 +01:00
Philipp Crocoll
310143c612 add TOTP section in Docs
closes #1248
2024-01-03 09:00:30 +01:00
PhilippC
49cb33a4da Merge pull request #2496 from PhilippC/2458--seed-only-traytotp-style-entries
make settings field for TrayTotp style otp entries optional
2024-01-03 08:52:22 +01:00
Philipp Crocoll
c934755e1c make settings field for TrayTotp style otp entries optional
closes https://github.com/PhilippC/keepass2android/issues/2458
2024-01-03 08:06:20 +01:00
1242 changed files with 16588 additions and 17098 deletions

View File

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

130
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,130 @@
name: Create keepass2android release
env:
NAME: 'Release'
on:
push:
tags:
- "v1.*"
jobs:
build-release:
runs-on: windows-2022
strategy:
matrix:
flavor: [Net, NoNet]
target: [apk, apk_split]
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/dotnet 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: Update dotnet workloads
run: |
dotnet workload update
- name: Select the manifest
run: |
make manifestlink Flavor=${{ matrix.flavor }}
- name: Install NuGet dependencies
run: make nuget Flavor=${{ matrix.flavor }}
- name: List apks
run: find . -type f -name "*.apk"
shell: bash
- name: Build APK (net)
env:
KeyStore: "${{ github.workspace }}/kp2a.keystore"
MyAndroidSigningStorePass: ${{ secrets.KEY_STORE_PASSWORD }}
MyAndroidSigningKeyPass: ${{ secrets.KEY_PASSWORD }}
DropboxAppKey: ${{ secrets.DROPBOX_APP_KEY }}
DropboxAppSecret: ${{ secrets.DROPBOX_APP_SECRET }}
DropboxAppFolderAppKey: ${{ secrets.DROPBOX_APP_FOLDER_APP_KEY }}
DropboxAppFolderAppSecret: ${{ secrets.DROPBOX_APP_FOLDER_APP_SECRET }}
run: |
make ${{ matrix.target }} Configuration=Release Flavor=${{ matrix.flavor }}
- name: List apks
run: find . -type f -name "*.apk"
shell: bash
- name: Archive production artifacts
uses: actions/upload-artifact@v4
with:
name: keepass2android_${{ matrix.target }}_${{ matrix.flavor }}
path: |
src/keepass2android-app/bin/Release/net8.0-android/publish/*.apk
src/keepass2android-app/bin/Release/net8.0-android/*/publish/*.apk
- name: List apks
run: find . -type f -name "*.apk"
shell: bash
#- 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/*/publish/*.apk src/keepass2android-app/bin/Release/net8.0-android/publish/*.apk

4
.gitignore vendored
View File

@@ -64,7 +64,7 @@ Thumbs.db
/src/java/android-filechooser/code/projectzip/project.zip
/src/java/android-filechooser/code/unused.txt
/src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs
/src/Kp2aBusinessLogic/Io/DropboxFileStorage.g.cs
/src/java/workspace/DriveTest
@@ -176,3 +176,5 @@ src/java/Keepass2AndroidPluginSDK2/build/generated/mockable-Google-Inc.-Google-A
/src/ActionViewFilterTest
/docs/gdrive-verification
/src/MegaTest
*.dtbcache.json
/src/keepass2android-app/AndroidManifest.xml

View File

@@ -20,6 +20,7 @@
# - 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
@@ -61,11 +62,11 @@ $(info )
# On linux use xabuild, on Windows use MSBuild.exe, otherwise (macos?) use msbuild.
ifeq ($(detected_OS),Linux)
MSBUILD_binary := xabuild
MSBUILD := $(shell $(WHICH) $(MSBUILD_binary))
MSBUILD_binary := dotnet
MSBUILD := $(shell $(WHICH) $(MSBUILD_binary)) publish
else ifeq ($(detected_OS),Windows)
MSBUILD_binary := MSBuild.exe
MSBUILD := $(shell $(WHICH) $(MSBUILD_binary) 2> nul)
MSBUILD_binary := dotnet
MSBUILD := $(shell $(WHICH) $(MSBUILD_binary) 2> nul) publish
ifeq ($(MSBUILD),)
# Additional heuristic to find MSBUILD_BINARY on Windows
VSWHERE := "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe"
@@ -120,14 +121,38 @@ ifneq ($(Configuration),)
else
$(warning Configuration environment variable not set.)
endif
DELETE_MANIFEST_LINK :=
CREATE_MANIFEST_LINK :=
MANIFEST_FILE :=
ifneq ($(Flavor),)
MSBUILD_PARAM += -p:Flavor="$(Flavor)"
ifneq ($(Flavor),)
ifeq ($(Flavor),Debug)
MANIFEST_FILE := AndroidManifest_debug.xml
endif
ifeq ($(Flavor),Net)
MANIFEST_FILE := AndroidManifest_net.xml
endif
ifeq ($(Flavor),NoNet)
MANIFEST_FILE := AndroidManifest_nonet.xml
endif
ifeq ($(detected_OS),Windows)
DELETE_MANIFEST_LINK := @cmd /c del src\keepass2android-app\AndroidManifest.xml
CREATE_MANIFEST_LINK := @cmd /c mklink /h src\keepass2android-app\AndroidManifest.xml src\keepass2android-app\Manifests\$(MANIFEST_FILE)
else
DELETE_MANIFEST_LINK := rm -f src/keepass2android-app/AndroidManifest.xml
CREATE_MANIFEST_LINK := ln -f src/keepass2android-app/Manifests/$(MANIFEST_FILE) src/keepass2android-app/AndroidManifest.xml
endif
endif
else
$(warning Flavor environment variable not set.)
endif
ifneq ($(KeyStore),)
MSBUILD_PARAM += -p:AndroidKeyStore=True -p:AndroidSigningKeyStore="$(KeyStore)" -p:AndroidSigningStorePass=env:MyAndroidSigningStorePass -p:AndroidSigningKeyPass=env:MyAndroidSigningKeyPass
MSBUILD_PARAM += -p:AndroidKeyStore=True -p:AndroidSigningKeyStore="$(KeyStore)" -p:AndroidSigningStorePass=env:MyAndroidSigningStorePass -p:AndroidSigningKeyPass=env:MyAndroidSigningKeyPass -p:AndroidSigningKeyAlias="kp2a"
endif
ifeq ($(detected_OS),Windows)
@@ -281,19 +306,25 @@ endif
$(MSBUILD) src/KeePass.sln -t:restore $(MSBUILD_PARAM) -p:RestorePackagesConfig=true
@echo "" > stamp.nuget_$(Flavor)
#####
src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs:
ifeq ($(detected_OS),Windows)
$(CP) src\Kp2aBusinessLogic\Io\DropboxFileStorageKeysDummy.cs src\Kp2aBusinessLogic\Io\DropboxFileStorageKeys.cs
else
$(CP) src/Kp2aBusinessLogic/Io/DropboxFileStorageKeysDummy.cs $@
endif
manifestlink:
$(info Creating hardlink for manifest of Flavor: $(Flavor))
$(DELETE_MANIFEST_LINK)
$(CREATE_MANIFEST_LINK)
msbuild: native java nuget src/Kp2aBusinessLogic/Io/DropboxFileStorageKeys.cs
#####
msbuild: manifestlink native java nuget
$(MSBUILD) src/KeePass.sln -target:keepass2android-app -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -p:BuildProjectReferences=true $(MSBUILD_PARAM) -p:Platform="Any CPU" -m
apk: msbuild
$(MSBUILD) src/keepass2android/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m
apk: manifestlink native java nuget
$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m
apk_split: manifestlink native java nuget
$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-arm
$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-arm64
$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-x86
$(MSBUILD) src/keepass2android-app/keepass2android-app.csproj -p:AndroidSdkDirectory="$(ANDROID_SDK_ROOT)" -t:SignAndroidPackage $(MSBUILD_PARAM) -p:Platform=AnyCPU -m -p:RuntimeIdentifier=android-x64
src/build-scripts/rename-output-apks.sh src/keepass2android-app/bin/Release/net8.0-android/
build_all: msbuild

View File

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

View File

@@ -1,5 +0,0 @@
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

@@ -1,18 +0,0 @@
# 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.

View File

@@ -1,239 +0,0 @@
# 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

@@ -1,118 +0,0 @@
<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,122 +1 @@
**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.
# 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).
This page has been moved to the [wiki](https://github.com/PhilippC/keepass2android/wiki/Documentation)

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

@@ -0,0 +1 @@
This page has been moved to the [wiki](https://github.com/PhilippC/keepass2android/wiki/Generating-TOTPs)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -1,157 +0,0 @@
# 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

@@ -1,31 +0,0 @@
<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

@@ -1,25 +0,0 @@
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
```

View File

@@ -1,20 +0,0 @@
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,25 +1 @@
# 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)
This page has been moved to the [wiki](https://github.com/PhilippC/keepass2android/wiki/Privacy-Policy)

View File

@@ -1,9 +1,9 @@
<h1 align="center"><img src="/src/keepass2android/Resources/mipmap-xxxhdpi/ic_launcher_online.png" align="center" width="100" alt="Keepass2Android Logo">Keepass2Android</h1>
<h1 align="center"><img src="/src/keepass2android-app/Resources/mipmap-xxxhdpi/ic_launcher_online.png" align="center" width="100" alt="Keepass2Android Logo">Keepass2Android</h1>
# 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". 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.
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.
# 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,11 +17,7 @@ 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 [documentation](Documentation.md).
Please see the [wiki](https://github.com/PhilippC/keepass2android/wiki/Documentation) for further information.
# 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)

View File

@@ -1,72 +0,0 @@
# 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.

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

39
graphics/add_key.svg Normal file
View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 24 24"
id="vector"
version="1.1"
sodipodi:docname="add_key.svg"
xml:space="preserve"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="23.953242"
inkscape:cx="12.315661"
inkscape:cy="15.509383"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="vector" /><path
id="path"
d="M 10.713223,9.3111931 C 10.058635,7.4512054 8.2864577,6.1180811 6.2029521,6.1180811 c -2.6423001,0 -4.7896679,2.1473678 -4.7896679,4.7896679 0,2.6423 2.1473678,4.789668 4.7896679,4.789668 2.0835056,0 3.8556829,-1.333124 4.5102709,-3.193112 h 3.472509 v 3.193112 c 0.287003,0 -0.146251,0.0043 0.592486,0.0043 0.662368,-1.733234 2.204981,-2.868561 4.118569,-2.847515 l 0.108132,0.0043 -0.02952,-3.5473559 z M 6.2029521,12.504305 c -0.8781058,0 -1.5965559,-0.718451 -1.5965559,-1.596556 0,-0.878106 0.7184501,-1.5965559 1.5965559,-1.5965559 0.8781057,0 1.596556,0.7184499 1.596556,1.5965559 0,0.878105 -0.7184503,1.596556 -1.596556,1.596556 z"
fill="none"
style="fill:#000000;stroke-width:0.798278"
sodipodi:nodetypes="csssccccccccsssss" /><path
id="path-3"
d="M 19.160885,15.206642 H 18.38893 v 1.543912 h -1.543912 v 0.771955 h 1.543912 v 1.543912 h 0.771955 v -1.543912 h 1.543912 v -0.771955 h -1.543912 z m -0.385978,-1.929889 c -2.130597,0 -3.859778,1.729181 -3.859778,3.859778 0,2.130598 1.729181,3.859779 3.859778,3.859779 2.130598,0 3.859779,-1.729181 3.859779,-3.859779 0,-2.130597 -1.729181,-3.859778 -3.859779,-3.859778 z m 0,6.947601 c -1.702162,0 -3.087823,-1.38566 -3.087823,-3.087823 0,-1.702162 1.385661,-3.087823 3.087823,-3.087823 1.702163,0 3.087823,1.385661 3.087823,3.087823 0,1.702163 -1.38566,3.087823 -3.087823,3.087823 z"
fill="none"
style="fill:#000000;stroke-width:0.385978" /></svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

41
graphics/donate_beer.svg Normal file
View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 24 24"
id="vector"
version="1.1"
sodipodi:docname="donate_beer.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="23.953242"
inkscape:cx="-2.1708961"
inkscape:cy="8.5792145"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="vector" /><path
d="m 19.122138,7.2306214 h -1.653647 c 0.297658,-0.6614585 0.46302,-1.0583336 0.46302,-1.6205737 0,-1.5213554 -1.2237,-2.778126 -2.71198,-2.8442725 -0.595314,-0.7606784 -1.521356,-1.2237001 -2.513544,-1.2237001 -0.628386,0 -1.2237,0.1653664 -1.752865,0.496095 -0.66146,-0.595312 -1.4882844,-1.09140704 -2.4144154,-1.09140704 -1.2567704,0 -2.4803818,0.79375024 -3.1750024,1.81892344 -1.2898439,0.2315116 -2.2821211,1.3890637 -2.2821211,2.7449667 0,0.7606771 0.2976567,1.4552087 0.8268236,1.9843756 V 21.121082 c 0,0.56224 0.3638031,0.992188 0.8929686,0.992188 H 16.145308 c 0.56224,0 0.992188,-0.429948 0.992188,-0.992188 v -1.322918 h 1.984377 c 0.926043,0 1.653646,-0.859896 1.653646,-1.752866 V 8.7187289 c 0,-0.9260419 -0.760676,-1.4882835 -1.653646,-1.4882835 z m -2.742001,3.4534426 -0.403803,6.23289 1.161425,0.235551 z M 8.5387954,1.9389516 c 1.0252612,0 1.8852456,0.6945319 2.3480906,1.5213555 0.396876,-0.5622402 1.058335,-0.9591153 1.818925,-0.9591153 0.79375,0 1.521354,0.4299469 1.885246,1.0914069 0.03307,0.066146 0.06615,0.09922 0.09922,0.1653651 0.132293,-0.033074 0.264583,-0.066146 0.429949,-0.066146 0.992188,0 1.818922,0.7937502 1.818922,1.8189248 0,0.6283853 -0.297656,1.157552 -0.79375,1.4882805 -0.297657,0.1984382 -0.628386,0.33073 -1.025262,0.33073 -0.562239,0 -1.058334,-0.2645835 -1.389064,-0.6614585 -0.297656,0.1653651 -0.661458,0.2645848 -1.025259,0.2645848 -0.661459,0 -1.289848,-0.297658 -1.686721,-0.7937515 C 10.556071,7.0651695 9.5969562,7.7266281 8.5055494,7.7266281 7.8440909,7.7266281 7.2157042,7.495118 6.752684,7.0982428 6.4881014,7.2305357 6.223518,7.3297527 5.8927893,7.3297527 5.5289861,7.3297527 5.1982576,7.2305331 4.9006008,7.032096 4.4045017,6.7013675 4.073773,6.1391272 4.073773,5.510742 c 0,-0.99219 0.7937503,-1.8189248 1.8189234,-1.8189248 h 0.066146 c 0.033074,-0.033074 0.033074,-0.09922 0.066147,-0.1322931 0.4630217,-0.8598969 1.4552103,-1.620574 2.513544,-1.620574 z M 7.0663448,10.173751 C 7.3454436,9.6502765 7.6191839,9.77712 7.850694,9.7109719 c 0.7287987,-0.097569 -0.2443734,0.033155 0.4171739,0.033155 1.0583336,0 -0.3223139,-0.092452 0.4673072,-0.058644 0.9864968,-0.054022 0.2018914,-0.2044859 0.7061633,-0.044083 0.6347356,0.2019011 0.6968396,0.5726311 0.9614236,0.5064841 0.463021,0.330729 0.963735,-0.3189756 1.525975,-0.3189756 0.363803,0 0.835316,-0.4743211 1.557892,0.1118782 L 14.664387,10.833358 14.395185,14.364324 10.64269,17.493095 9.1598621,15.996034 7.5547275,14.287026 C 7.8523853,14.419319 6.3897465,11.864369 6.6189488,10.45106 Z m -2.1655736,10.947507 0.095178,0.247507 H 16.193161 l -0.04759,-0.247507 z M 19.439483,17.51402 c 0.0013,0.363801 -0.297718,0.767343 -0.661459,0.760677 l -1.610745,-0.02952 0.02379,-0.611478 c -0.03594,-3.690037 -0.05332,-2.690499 -0.05332,-8.9386516 l 1.610745,3e-7 c 0.363802,10e-8 0.660168,0.1322954 0.661459,0.496095 z"
id="path4"
style="stroke-width:0.0176389"
sodipodi:nodetypes="ccscscscscsssscsssccccccscsccsssscscscssssccssccscscscccccccccccccsscccsss" /><g
style="fill:none"
id="g1"
transform="matrix(0.46698189,0,0,0.46698189,15.656847,1.4036426)"><path
d="m -10.266621,19.230782 c 0.9810002,-1.152 2.4840002,-1.881 4.0500002,-1.881 2.772,0 4.95,2.178 4.95,4.95 0,3.3992 -3.055,6.1695 -7.6836,10.3667 l -0.0114,0.0103 -1.3050002,1.188 -1.305,-1.179 -0.0355,-0.0323 c -4.61513,-4.1939 -7.6595,-6.9604 -7.6595,-10.3537 0,-2.772 2.178,-4.95 4.95,-4.95 1.566,0 3.069,0.729 4.05,1.881 z"
fill="#000000"
id="path1"
style="fill:none;stroke:#000000;stroke-width:1.97721;stroke-dasharray:none" /></g></svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

40
graphics/donate_beer1.svg Normal file
View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 24 24"
id="vector"
version="1.1"
sodipodi:docname="donate_beer.svg"
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="11.976621"
inkscape:cx="-16.532209"
inkscape:cy="17.158429"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="vector" /><path
d="m 18.43668,7.522128 h -1.450694 c 0.261126,-0.580277 0.406194,-0.9284433 0.406194,-1.4216791 0,-1.334638 -1.073514,-2.4371639 -2.379137,-2.4951922 -0.52225,-0.6673196 -1.334638,-1.0735142 -2.205054,-1.0735142 -0.551263,0 -1.073514,0.1450708 -1.537734,0.4352088 C 10.689977,2.4447025 9.9646292,2.0094937 9.1521632,2.0094937 c -1.1025258,0 -2.1759622,0.6963325 -2.7853313,1.5956852 -1.1315401,0.2030979 -2.0020342,1.2185825 -2.0020342,2.4080743 0,0.6673184 0.261125,1.2766095 0.7253467,1.7408312 V 19.707799 c 0,0.493236 0.3191533,0.870416 0.7833738,0.870416 h 9.9516808 c 0.493236,0 0.870416,-0.37718 0.870416,-0.870416 v -1.160555 h 1.740832 c 0.812389,0 1.450693,-0.75436 1.450693,-1.537735 V 8.8275986 c 0,-0.8123879 -0.667318,-1.305625 -1.450693,-1.305625 z m -1.740834,2.3211109 h 0.870417 V 16.226289 H 16.695846 Z M 9.1522411,2.87991 c 0.8994299,0 1.6538679,0.6092913 2.0599069,1.334638 0.348167,-0.4932359 0.928444,-0.8414021 1.595687,-0.8414021 0.696332,0 1.334636,0.3771791 1.653868,0.9574575 0.02901,0.058028 0.05803,0.087042 0.08704,0.1450696 0.116057,-0.029014 0.232111,-0.058028 0.377181,-0.058028 0.870416,0 1.595685,0.6963325 1.595685,1.5956864 0,0.5512629 -0.261125,1.0154846 -0.696333,1.3056224 -0.261125,0.1740837 -0.551264,0.2901392 -0.89943,0.2901392 -0.493235,0 -0.928444,-0.2321109 -1.218583,-0.580277 -0.261125,0.1450696 -0.580277,0.232112 -0.899429,0.232112 -0.580277,0 -1.131543,-0.2611262 -1.479708,-0.6963337 -0.406195,0.8123878 -1.247597,1.3926649 -2.2050543,1.3926649 -0.5802771,0 -1.1315413,-0.2030966 -1.5377346,-0.5512629 C 7.353227,7.5220527 7.1211162,7.6090927 6.8309782,7.6090927 6.5118249,7.6090927 6.221687,7.5220507 5.9605619,7.3479677 5.5253532,7.0578299 5.2352152,6.564594 5.2352152,6.0133311 c 0,-0.8704176 0.6963326,-1.5956864 1.5956852,-1.5956864 h 0.058028 C 6.9179429,4.3886305 6.9179429,4.3306021 6.9469571,4.301588 7.3531517,3.5472271 8.223568,2.8799087 9.1520113,2.8799087 Z M 6.8311314,8.4796646 c 0.2030967,0 0.4352088,-0.029014 0.6383054,-0.087043 0.4932346,0.2901392 1.073513,0.4352075 1.653868,0.4352075 0.9284432,0 1.7988592,-0.3771791 2.4080732,-1.0154846 0.406195,0.2030967 0.841402,0.3191521 1.305625,0.3191521 0.232111,0 0.493235,-0.029014 0.725346,-0.087043 0.406194,0.2901379 0.89943,0.4352088 1.392666,0.4352088 0.319153,0 0.609291,-0.058028 0.899431,-0.1740838 v 9.2553464 0.116057 0.290139 H 5.9606373 V 8.3054252 C 6.2217635,8.4214819 6.5119015,8.479509 6.8310548,8.479509 Z M 5.9607151,19.707953 v -1.160554 h 9.8647159 v 1.160554 z M 19.016957,17.009586 c 0,0.319153 -0.261125,0.667319 -0.580277,0.667319 H 16.695846 V 16.80649 h 0.870417 c 0.319152,0 0.580278,-0.406195 0.580278,-0.725348 V 9.6980915 c 0,-0.3191521 -0.261126,-0.4352088 -0.580278,-0.4352088 h -0.870417 v -0.870415 h 1.740834 c 0.319152,0 0.580277,0.1160567 0.580277,0.4352088 z"
id="path4"
style="stroke-width:0.0154741" /><g
style="fill:none"
id="g1"
transform="matrix(0.40966874,0,0,0.40966874,6.107757,8.1297763)"><path
d="M 12,5.881 C 12.981,4.729 14.484,4 16.05,4 18.822,4 21,6.178 21,8.95 c 0,3.3992 -3.055,6.1695 -7.6836,10.3667 L 13.305,19.327 12,20.515 10.695,19.336 10.6595,19.3037 C 6.04437,15.1098 3,12.3433 3,8.95 3,6.178 5.178,4 7.95,4 9.516,4 11.019,4.729 12,5.881 Z"
fill="#000000"
id="path1"
style="fill:none;stroke:#000000;stroke-width:1.97720724;stroke-dasharray:none" /></g></svg>

After

Width:  |  Height:  |  Size: 4.3 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,83 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3C0F7FE5-639F-4422-A087-8B26CF862D1B}</ProjectGuid>
<ProjectTypeGuids>{10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AndroidFileChooserBinding</RootNamespace>
<AssemblyName>AndroidFileChooserBinding</AssemblyName>
<FileAlignment>512</FileAlignment>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
<AndroidCodegenTarget>XAJavaInterop1</AndroidCodegenTarget>
<AndroidClassParser>class-parse</AndroidClassParser>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidLinkMode>None</AndroidLinkMode>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseNoNet|AnyCPU'">
<OutputPath>bin\ReleaseNoNet\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
<WarningLevel>4</WarningLevel>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Android" />
<Reference Include="System" />
<Reference Include="System.Core" />
<None Remove="Transforms\EnumFields.xml" />
<None Remove="Transforms\EnumMethods.xml" />
<None Remove="Transforms\Metadata.xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<AndroidLibrary Include="..\java\android-filechooser-AS\app\build\outputs\aar\android-filechooser-release.aar" Link="android-filechooser-release.aar" />
</ItemGroup>
<ItemGroup>
<LibraryProjectZip Include="..\java\android-filechooser-AS\app\build\outputs\aar\android-filechooser-release.aar">
<Link>Jars\android-filechooser-release.aar</Link>
</LibraryProjectZip>
<None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<TransformFile Include="Transforms\Metadata.xml" />
<TransformFile Include="Transforms\EnumFields.xml" />
<TransformFile Include="Transforms\EnumMethods.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Bindings.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<ItemGroup>
<XamarinComponentReference Include="xamandroidsupportv4-18">
<Version>20.0.0.4</Version>
<Visible>False</Visible>
</XamarinComponentReference>
</ItemGroup>
</Project>
</Project>

View File

@@ -1,24 +0,0 @@
This directory is for Android .jars.
There are 2 types of jars that are supported:
== Input Jar ==
This is the jar that bindings should be generated for.
For example, if you were binding the Google Maps library, this would
be Google's "maps.jar".
Set the build action for these jars in the properties page to "InputJar".
== Reference Jars ==
These are jars that are referenced by the input jar. C# bindings will
not be created for these jars. These jars will be used to resolve
types used by the input jar.
NOTE: Do not add "android.jar" as a reference jar. It will be added automatically
based on the Target Framework selected.
Set the build action for these jars in the properties page to "ReferenceJar".

View File

@@ -1,30 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AndroidFileChooserBinding")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AndroidFileChooserBinding")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

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

@@ -4,19 +4,4 @@
<remove-node path="/api/package[@name='group.pals.android.lib.ui.filechooser.prefs']" />
<!--
<remove-node path="/api/package[@name='group.pals.android.lib.ui.filechooser']/class[@name='FragmentFiles']" />
<remove-node path="/api/package[@name='group.pals.android.lib.ui.filechooser.utils.ui.bookmark']/class[@name='BookmarkFragment']" />
<remove-node path="/api/package[@name='group.pals.android.lib.ui.filechooser.utils.ui.history']/class[@name='HistoryFragment']" />
<remove-node path="/api/package[@name='group.pals.android.lib.ui.filechooser.prefs']/class[@name='DisplayPrefs']" />
This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" />
This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
-->
</metadata>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
</packages>

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,69 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{23233A28-D74F-4BF8-B4D8-834060840BD7}</ProjectGuid>
<ProjectTypeGuids>{10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>AppCompatV7Binding</RootNamespace>
<AssemblyName>AppCompatV7Binding</AssemblyName>
<FileAlignment>512</FileAlignment>
<TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseNoNet|AnyCPU'">
<OutputPath>bin\ReleaseNoNet\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Mono.Android" />
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" />
<LibraryProjectZip Include="project_appcompatv7.zip" />
</ItemGroup>
<ItemGroup>
<TransformFile Include="Transforms\Metadata.xml" />
<TransformFile Include="Transforms\EnumFields.xml" />
<TransformFile Include="Transforms\EnumMethods.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Bindings.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -1,24 +0,0 @@
This directory is for Android .jars.
There are 2 types of jars that are supported:
== Input Jar ==
This is the jar that bindings should be generated for.
For example, if you were binding the Google Maps library, this would
be Google's "maps.jar".
Set the build action for these jars in the properties page to "InputJar".
== Reference Jars ==
These are jars that are referenced by the input jar. C# bindings will
not be created for these jars. These jars will be used to resolve
types used by the input jar.
NOTE: Do not add "android.jar" as a reference jar. It will be added automatically
based on the Target Framework selected.
Set the build action for these jars in the properties page to "ReferenceJar".

View File

@@ -1,30 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("AppCompatV7Binding")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AppCompatV7Binding")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,9 +0,0 @@
<metadata>
<!--
This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" />
This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
-->
</metadata>

View File

@@ -1,4 +1,4 @@
Additions allow you to add arbitrary C# to the generated classes
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.
@@ -11,9 +11,9 @@ this:
public partial class Rectangle
{
public Rectangle (int x, int y, int width, int height)
{
// JNI bindings
}
{
// JNI bindings
}
}
Imagine we want to add a constructor to this class that takes a Point and
@@ -23,9 +23,9 @@ 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)
{
}
this (location.X, location.Y, size.Width, size.Height)
{
}
}
At compile time, the additions class will be added to the generated class
@@ -44,5 +44,5 @@ 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; }
public int Y { get; set; }
}

View File

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

View File

@@ -0,0 +1,35 @@
<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>

Binary file not shown.

Binary file not shown.

View File

@@ -1,4 +1,4 @@
Additions allow you to add arbitrary C# to the generated classes
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.
@@ -11,9 +11,9 @@ this:
public partial class Rectangle
{
public Rectangle (int x, int y, int width, int height)
{
// JNI bindings
}
{
// JNI bindings
}
}
Imagine we want to add a constructor to this class that takes a Point and
@@ -23,9 +23,9 @@ 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)
{
}
this (location.X, location.Y, size.Width, size.Height)
{
}
}
At compile time, the additions class will be added to the generated class
@@ -44,5 +44,5 @@ 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; }
public int Y { get; set; }
}

View File

@@ -1,24 +0,0 @@
This directory is for Android .jars.
There are 2 types of jars that are supported:
== Input Jar ==
This is the jar that bindings should be generated for.
For example, if you were binding the Google Maps library, this would
be Google's "maps.jar".
Set the build action for these jars in the properties page to "InputJar".
== Reference Jars ==
These are jars that are referenced by the input jar. C# bindings will
not be created for these jars. These jars will be used to resolve
types used by the input jar.
NOTE: Do not add "android.jar" as a reference jar. It will be added automatically
based on the Target Framework selected.
Set the build action for these jars in the properties page to "ReferenceJar".

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.microsoft.aad.adal"
android:versionCode="1"
android:versionName="0.1.1" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="21" />
<application>
<activity android:name="com.microsoft.aad.adal.AuthenticationActivity" >
</activity>
<receiver
android:name = "com.microsoft.aad.adal.ApplicationReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_INSTALL"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
</application>
</manifest>

View File

@@ -1,21 +0,0 @@
int dimen activity_horizontal_margin 0x7f030000
int dimen activity_vertical_margin 0x7f030001
int id LinearLayout1 0x7f060004
int id com_microsoft_aad_adal_editDummyText 0x7f060002
int id com_microsoft_aad_adal_progressBar 0x7f060003
int id com_microsoft_aad_adal_webView1 0x7f060001
int id editPassword 0x7f060006
int id editUserName 0x7f060005
int id webView1 0x7f060000
int layout activity_authentication 0x7f020000
int layout dialog_authentication 0x7f020001
int layout http_auth_dialog 0x7f020002
int string app_loading 0x7f040000
int string broker_processing 0x7f040001
int string http_auth_dialog_cancel 0x7f040006
int string http_auth_dialog_login 0x7f040005
int string http_auth_dialog_password 0x7f040003
int string http_auth_dialog_title 0x7f040004
int string http_auth_dialog_username 0x7f040002
int style AppBaseTheme 0x7f050000
int style AppTheme 0x7f050001

View File

@@ -1,17 +0,0 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AuthenticationActivity" >
<WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
</RelativeLayout>

View File

@@ -1,40 +0,0 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/com_microsoft_aad_adal_webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="0dp"
android:paddingLeft="0dp"
android:paddingRight="0dp"
android:paddingTop="0dp" />
<EditText
android:id="@+id/com_microsoft_aad_adal_editDummyText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/com_microsoft_aad_adal_webView1"
android:layout_alignLeft="@+id/com_microsoft_aad_adal_webView1"
android:layout_alignStart="@+id/com_microsoft_aad_adal_webView1"
android:layout_marginBottom="124dp"
android:layout_marginLeft="86dp"
android:layout_marginStart="86dp"
android:ems="10"
android:inputType="textEmailAddress"
android:visibility="gone" >
</EditText>
<ProgressBar
android:id="@+id/com_microsoft_aad_adal_progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
</RelativeLayout>

View File

@@ -1,32 +0,0 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp" >
<EditText
android:id="@+id/editUserName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/http_auth_dialog_username"
android:paddingTop="10dp" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/editPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/http_auth_dialog_password"
android:inputType="textPassword"
android:paddingTop="10dp"
android:paddingBottom="20dp"
android:importantForAccessibility="no" />
</LinearLayout>

View File

@@ -1,8 +0,0 @@
<resources>
<!--
Customize dimensions originally defined in res/values/dimens.xml (such as
screen margins) for sw600dp devices (e.g. 7" tablets) here.
-->
</resources>

View File

@@ -1,9 +0,0 @@
<resources>
<!--
Customize dimensions originally defined in res/values/dimens.xml (such as
screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here.
-->
<dimen name="activity_horizontal_margin">128dp</dimen>
</resources>

View File

@@ -1,11 +0,0 @@
<resources>
<!--
Base application theme for API 11+. This theme completely replaces
AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light">
<!-- API 11 theme customizations can go here. -->
</style>
</resources>

View File

@@ -1,12 +0,0 @@
<resources>
<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
</resources>

View File

@@ -1,7 +0,0 @@
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
</resources>

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_loading">Loading&#8230;</string>
<string name="broker_processing">Broker is processing</string>
<string name="http_auth_dialog_username">Username</string>
<string name="http_auth_dialog_password">Password</string>
<string name="http_auth_dialog_title">Enter your credentials</string>
<string name="http_auth_dialog_login">Login</string>
<string name="http_auth_dialog_cancel">Cancel</string>
</resources>

View File

@@ -1,20 +0,0 @@
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
</resources>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,382 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.props" Condition="Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.props')" />
<Import Project="..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.props" Condition="Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.props')" />
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{48574278-4779-4B3A-A9E4-9CF1BC285D0B}</ProjectGuid>
<ProjectTypeGuids>{10368E6C-D01B-4462-8E8B-01FC667A7035};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>JavaFileStorageBindings</RootNamespace>
<AssemblyName>JavaFileStorageBindings</AssemblyName>
<FileAlignment>512</FileAlignment>
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
<TargetFrameworkVersion>v13.0</TargetFrameworkVersion>
<AndroidClassParser>class-parse</AndroidClassParser>
<AndroidCodegenTarget>XAJavaInterop1</AndroidCodegenTarget>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>0</WarningLevel>
<AndroidLinkMode>None</AndroidLinkMode>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseNoNet|AnyCPU'">
<OutputPath>bin\ReleaseNoNet\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<AndroidUseSharedRuntime>false</AndroidUseSharedRuntime>
<WarningLevel>4</WarningLevel>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Reference Include="Java.Interop" />
<Reference Include="Mono.Android" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors" />
<Reference Include="System.Xml" />
<Reference Include="Xamarin.AndroidX.Activity, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Activity.1.6.0\lib\monoandroid12.0\Xamarin.AndroidX.Activity.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Annotation, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Annotation.1.5.0\lib\monoandroid12.0\Xamarin.AndroidX.Annotation.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Annotation.Experimental, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Annotation.Experimental.1.3.0\lib\monoandroid12.0\Xamarin.AndroidX.Annotation.Experimental.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Arch.Core.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.15\lib\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Arch.Core.Runtime, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.15\lib\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Runtime.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Collection, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Collection.1.2.0.4\lib\monoandroid12.0\Xamarin.AndroidX.Collection.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Concurrent.Futures, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.9\lib\monoandroid12.0\Xamarin.AndroidX.Concurrent.Futures.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Core.1.9.0\lib\monoandroid12.0\Xamarin.AndroidX.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Core.Core.Ktx, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Core.Core.Ktx.1.9.0\lib\monoandroid12.0\Xamarin.AndroidX.Core.Core.Ktx.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.CustomView, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.CustomView.1.1.0.13\lib\monoandroid12.0\Xamarin.AndroidX.CustomView.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Fragment, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Fragment.1.5.3\lib\monoandroid12.0\Xamarin.AndroidX.Fragment.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Lifecycle.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Lifecycle.Common.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Lifecycle.LiveData.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.LiveData.Core.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Lifecycle.Runtime, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Runtime.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Lifecycle.ViewModel, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModel.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Lifecycle.ViewModelSavedState, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\lib\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Loader, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Loader.1.1.0.14\lib\monoandroid12.0\Xamarin.AndroidX.Loader.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.MultiDex, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\lib\monoandroid12.0\Xamarin.AndroidX.MultiDex.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.SavedState, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.SavedState.1.2.0\lib\monoandroid12.0\Xamarin.AndroidX.SavedState.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.Tracing.Tracing, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.Tracing.Tracing.1.1.0.1\lib\monoandroid12.0\Xamarin.AndroidX.Tracing.Tracing.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.VersionedParcelable, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.14\lib\monoandroid12.0\Xamarin.AndroidX.VersionedParcelable.dll</HintPath>
</Reference>
<Reference Include="Xamarin.AndroidX.ViewPager, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.AndroidX.ViewPager.1.0.0.14\lib\monoandroid12.0\Xamarin.AndroidX.ViewPager.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Google.Guava, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Google.Guava.28.2.0.1\lib\monoandroid90\Xamarin.Google.Guava.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Google.Guava.FailureAccess, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\lib\monoandroid90\Xamarin.Google.Guava.FailureAccess.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Google.Guava.ListenableFuture, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\lib\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Auth, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\lib\monoandroid12.0\Xamarin.GooglePlayServices.Auth.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Auth.Api.Phone, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Auth.Api.Phone.118.0.1.2\lib\monoandroid12.0\Xamarin.GooglePlayServices.Auth.Api.Phone.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Auth.Base, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\lib\monoandroid12.0\Xamarin.GooglePlayServices.Auth.Base.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Base, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Base.118.1.0\lib\monoandroid12.0\Xamarin.GooglePlayServices.Base.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Basement, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Basement.118.1.0.1\lib\monoandroid12.0\Xamarin.GooglePlayServices.Basement.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Fido, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\lib\monoandroid12.0\Xamarin.GooglePlayServices.Fido.dll</HintPath>
</Reference>
<Reference Include="Xamarin.GooglePlayServices.Tasks, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.GooglePlayServices.Tasks.118.0.2\lib\monoandroid12.0\Xamarin.GooglePlayServices.Tasks.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Jetbrains.Annotations, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\lib\monoandroid12.0\Xamarin.Jetbrains.Annotations.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Kotlin.StdLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Kotlin.StdLib.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Kotlin.StdLib.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Kotlin.StdLib.Jdk7, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.dll</HintPath>
</Reference>
<Reference Include="Xamarin.Kotlin.StdLib.Jdk8, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\lib\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.dll</HintPath>
</Reference>
<Reference Include="Xamarin.KotlinX.Coroutines.Android, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\lib\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.dll</HintPath>
</Reference>
<Reference Include="Xamarin.KotlinX.Coroutines.Core.Jvm, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\lib\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.dll</HintPath>
</Reference>
<AndroidLibrary Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-debug.aar" Link="JavaFileStorage-debug.aar" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<AndroidLibrary Bind="False" Update="dropbox-core-sdk-5.4.6.jar" />
<AndroidLibrary Bind="False" Update="gdrive\commons-logging-1.1.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-api-client-1.30.5.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-api-client-android-1.30.5.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-api-services-drive-v2-rev102-1.16.0-rc.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-http-client-1.32.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-http-client-android-1.32.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-http-client-gson-1.16.0-rc.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-http-client-jackson-1.16.0-rc.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-http-client-jackson2-1.32.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\google-oauth-client-1.30.4.jar" />
<AndroidLibrary Bind="False" Update="gdrive\grpc-context-1.22.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\httpclient-4.0.3.jar" />
<AndroidLibrary Bind="False" Update="gdrive\httpcore-4.0.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\httpmime-4.0.3.jar" />
<AndroidLibrary Bind="False" Update="gdrive\json_simple-1.1.jar" />
<AndroidLibrary Bind="False" Update="gdrive\jsr305-3.0.2.jar" />
<AndroidLibrary Bind="False" Update="gdrive\opencensus-api-0.24.0.jar" />
<AndroidLibrary Bind="False" Update="gdrive\opencensus-contrib-http-util-0.24.0.jar" />
<AndroidLibrary Bind="False" Update="gson-2.8.6.jar" />
<AndroidLibrary Bind="False" Update="jackson-core-2.13.5.jar" />
<AndroidLibrary Bind="False" Update="okhttp-4.12.0.jar" />
<AndroidLibrary Bind="False" Update="okhttp-digest-3.1.0.jar" />
<AndroidLibrary Bind="False" Update="okio-3.6.0.jar" />
<AndroidLibrary Bind="False" Update="okio-jvm-3.6.0.jar" />
</ItemGroup>
<ItemGroup>
<LibraryProjectZip Include="..\java\JavaFileStorage\app\build\outputs\aar\JavaFileStorage-debug.aar">
<Link>Jars\JavaFileStorage-debug.aar</Link>
</LibraryProjectZip>
<None Include="Jars\AboutJars.txt" />
<None Include="Additions\AboutAdditions.txt" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<TransformFile Include="Transforms\Metadata.xml" />
<TransformFile Include="Transforms\EnumFields.xml" />
<TransformFile Include="Transforms\EnumMethods.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.Bindings.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<ItemGroup>
<XamarinComponentReference Include="googleplayservices">
<Version>19.0.0</Version>
<Visible>False</Visible>
</XamarinComponentReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\PCloudBindings\PCloudBindings.csproj">
<Project>{2DB80C77-D46F-4970-B967-E9FFA9B2AC2E}</Project>
<Name>PCloudBindings</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\msa-auth-0.8.6\classes-msa-auth.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\onedrive-sdk-android-1.2.2\classes-onedrive-sdk.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\commons-logging-1.1.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-api-services-drive-v2-rev102-1.16.0-rc.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-http-client-jackson-1.16.0-rc.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\httpclient-4.0.3.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\httpcore-4.0.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\httpmime-4.0.3.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\json_simple-1.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-http-client-gson-1.16.0-rc.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\jackson-core-2.7.4.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okhttp-digest-2.5.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okio-2.9.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\okhttp-4.10.0-RC1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedJar Include="Jars\dropbox-core-sdk-4.0.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gson-2.8.6.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-http-client-android-1.32.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\jsr305-3.0.2.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-http-client-1.32.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-http-client-jackson2-1.32.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-api-client-1.30.5.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-api-client-android-1.30.5.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\google-oauth-client-1.30.4.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\opencensus-contrib-http-util-0.24.0.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\grpc-context-1.22.1.jar" />
</ItemGroup>
<ItemGroup>
<EmbeddedReferenceJar Include="Jars\gdrive\opencensus-api-0.24.0.jar" />
</ItemGroup>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.props'))" />
<Error Condition="!Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Annotation.1.5.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Annotation.1.5.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Annotation.Experimental.1.3.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.Experimental.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Annotation.Experimental.1.3.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.Experimental.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Runtime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Runtime.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Collection.1.2.0.4\build\monoandroid12.0\Xamarin.AndroidX.Collection.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Collection.1.2.0.4\build\monoandroid12.0\Xamarin.AndroidX.Collection.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.9\build\monoandroid12.0\Xamarin.AndroidX.Concurrent.Futures.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.9\build\monoandroid12.0\Xamarin.AndroidX.Concurrent.Futures.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Lifecycle.Common.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Common.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Lifecycle.Common.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Common.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.LiveData.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.LiveData.Core.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Runtime.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Runtime.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModel.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModel.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.SavedState.1.2.0\build\monoandroid12.0\Xamarin.AndroidX.SavedState.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.SavedState.1.2.0\build\monoandroid12.0\Xamarin.AndroidX.SavedState.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Tracing.Tracing.1.1.0.1\build\monoandroid12.0\Xamarin.AndroidX.Tracing.Tracing.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Tracing.Tracing.1.1.0.1\build\monoandroid12.0\Xamarin.AndroidX.Tracing.Tracing.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.14\build\monoandroid12.0\Xamarin.AndroidX.VersionedParcelable.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.14\build\monoandroid12.0\Xamarin.AndroidX.VersionedParcelable.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Core.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Core.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Core.Core.Ktx.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.Core.Ktx.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Core.Core.Ktx.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.Core.Ktx.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.CustomView.1.1.0.13\build\monoandroid12.0\Xamarin.AndroidX.CustomView.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.CustomView.1.1.0.13\build\monoandroid12.0\Xamarin.AndroidX.CustomView.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Loader.1.1.0.14\build\monoandroid12.0\Xamarin.AndroidX.Loader.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Loader.1.1.0.14\build\monoandroid12.0\Xamarin.AndroidX.Loader.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.ViewPager.1.0.0.14\build\monoandroid12.0\Xamarin.AndroidX.ViewPager.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.ViewPager.1.0.0.14\build\monoandroid12.0\Xamarin.AndroidX.ViewPager.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Basement.118.1.0.1\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Basement.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Basement.118.1.0.1\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Basement.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Tasks.118.0.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Tasks.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Tasks.118.0.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Tasks.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Base.118.1.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Base.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Base.118.1.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Base.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Auth.Api.Phone.118.0.1.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Api.Phone.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Auth.Api.Phone.118.0.1.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Api.Phone.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets'))" />
<Error Condition="!Exists('..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets'))" />
</Target>
<Import Project="..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.FailureAccess.1.0.1.3\build\monoandroid90\Xamarin.Google.Guava.FailureAccess.targets')" />
<Import Project="..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.28.2.0.1\build\monoandroid90\Xamarin.Google.Guava.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets" Condition="Exists('..\packages\Xamarin.AndroidX.MultiDex.2.0.1.13\build\monoandroid12.0\Xamarin.AndroidX.MultiDex.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Migration.1.0.10\build\monoandroid120\Xamarin.AndroidX.Migration.targets')" />
<Import Project="..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets" Condition="Exists('..\packages\Xamarin.Build.Download.0.11.4\build\Xamarin.Build.Download.targets')" />
<Import Project="..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets" Condition="Exists('..\packages\Xamarin.Google.Guava.ListenableFuture.1.0.0.9\build\monoandroid12.0\Xamarin.Google.Guava.ListenableFuture.targets')" />
<Import Project="..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets" Condition="Exists('..\packages\Xamarin.Jetbrains.Annotations.23.0.0.4\build\monoandroid12.0\Xamarin.Jetbrains.Annotations.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.Common.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Common.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Annotation.1.5.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Annotation.1.5.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Annotation.Experimental.1.3.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.Experimental.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Annotation.Experimental.1.3.0\build\monoandroid12.0\Xamarin.AndroidX.Annotation.Experimental.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Common.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Arch.Core.Common.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Common.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Runtime.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Arch.Core.Runtime.2.1.0.15\build\monoandroid12.0\Xamarin.AndroidX.Arch.Core.Runtime.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Collection.1.2.0.4\build\monoandroid12.0\Xamarin.AndroidX.Collection.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Collection.1.2.0.4\build\monoandroid12.0\Xamarin.AndroidX.Collection.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.9\build\monoandroid12.0\Xamarin.AndroidX.Concurrent.Futures.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Concurrent.Futures.1.1.0.9\build\monoandroid12.0\Xamarin.AndroidX.Concurrent.Futures.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Lifecycle.Common.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Common.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Lifecycle.Common.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Common.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.LiveData.Core.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Lifecycle.LiveData.Core.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.LiveData.Core.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Runtime.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Lifecycle.Runtime.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.Runtime.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModel.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Lifecycle.ViewModel.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModel.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.SavedState.1.2.0\build\monoandroid12.0\Xamarin.AndroidX.SavedState.targets" Condition="Exists('..\packages\Xamarin.AndroidX.SavedState.1.2.0\build\monoandroid12.0\Xamarin.AndroidX.SavedState.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Tracing.Tracing.1.1.0.1\build\monoandroid12.0\Xamarin.AndroidX.Tracing.Tracing.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Tracing.Tracing.1.1.0.1\build\monoandroid12.0\Xamarin.AndroidX.Tracing.Tracing.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.14\build\monoandroid12.0\Xamarin.AndroidX.VersionedParcelable.targets" Condition="Exists('..\packages\Xamarin.AndroidX.VersionedParcelable.1.1.1.14\build\monoandroid12.0\Xamarin.AndroidX.VersionedParcelable.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Core.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Core.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Core.Core.Ktx.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.Core.Ktx.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Core.Core.Ktx.1.9.0\build\monoandroid12.0\Xamarin.AndroidX.Core.Core.Ktx.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.CustomView.1.1.0.13\build\monoandroid12.0\Xamarin.AndroidX.CustomView.targets" Condition="Exists('..\packages\Xamarin.AndroidX.CustomView.1.1.0.13\build\monoandroid12.0\Xamarin.AndroidX.CustomView.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Loader.1.1.0.14\build\monoandroid12.0\Xamarin.AndroidX.Loader.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Loader.1.1.0.14\build\monoandroid12.0\Xamarin.AndroidX.Loader.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.ViewPager.1.0.0.14\build\monoandroid12.0\Xamarin.AndroidX.ViewPager.targets" Condition="Exists('..\packages\Xamarin.AndroidX.ViewPager.1.0.0.14\build\monoandroid12.0\Xamarin.AndroidX.ViewPager.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk7.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk7.targets')" />
<Import Project="..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets" Condition="Exists('..\packages\Xamarin.Kotlin.StdLib.Jdk8.1.7.10\build\monoandroid12.0\Xamarin.Kotlin.StdLib.Jdk8.targets')" />
<Import Project="..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets" Condition="Exists('..\packages\Xamarin.KotlinX.Coroutines.Core.Jvm.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Core.Jvm.targets')" />
<Import Project="..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets" Condition="Exists('..\packages\Xamarin.KotlinX.Coroutines.Android.1.6.4\build\monoandroid12.0\Xamarin.KotlinX.Coroutines.Android.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.2.5.1\build\monoandroid12.0\Xamarin.AndroidX.Lifecycle.ViewModelSavedState.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Activity.1.6.0\build\monoandroid12.0\Xamarin.AndroidX.Activity.targets')" />
<Import Project="..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets" Condition="Exists('..\packages\Xamarin.AndroidX.Fragment.1.5.3\build\monoandroid12.0\Xamarin.AndroidX.Fragment.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Basement.118.1.0.1\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Basement.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Basement.118.1.0.1\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Basement.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Tasks.118.0.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Tasks.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Tasks.118.0.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Tasks.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Base.118.1.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Base.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Base.118.1.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Base.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Auth.Api.Phone.118.0.1.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Api.Phone.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Auth.Api.Phone.118.0.1.2\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Api.Phone.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Auth.Base.118.0.6\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.Base.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Fido.119.0.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Fido.targets')" />
<Import Project="..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets" Condition="Exists('..\packages\Xamarin.GooglePlayServices.Auth.120.4.0\build\MonoAndroid12.0\Xamarin.GooglePlayServices.Auth.targets')" />
</Project>

View File

@@ -1,30 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using Android.App;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("JavaFileStorageBindings")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JavaFileStorageBindings")]
[assembly: AssemblyCopyright("Copyright © 2013")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -1,14 +1,3 @@
<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 +1,3 @@
<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,17 +1,16 @@
<metadata>
<!--
This sample removes the class: android.support.v4.content.AsyncTaskLoader.LoadTask:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='AsyncTaskLoader.LoadTask']" />
This sample removes the method: android.support.v4.content.CursorLoader.loadInBackground:
<remove-node path="/api/package[@name='android.support.v4.content']/class[@name='CursorLoader']/method[@name='loadInBackground']" />
-->
<remove-node path="/api/package[@name='com.jcraft.jsch']" />
<remove-node path="/api/package[@name='com.jcraft.jsch.jce']" />
<remove-node path="/api/package[@name='com.jcraft.jsch.jcraft']" />
<remove-node path="/api/package[@name='com.jcraft.jzlib']" />
<remove-node path="/api/package[@name='com.pcloud.sdk']" />
<remove-node path="/api/package[@name='io.opencensus.stats']" />
<remove-node path="/api/package[@name='io.opencensus']" />
<remove-node path="/api/package[@name='com.dropbox.core']" />
<remove-node path="/api/package[@name='com.dropbox.core']" />
<remove-node path="/api/package[@name='com.dropbox.core.util']" />

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