Compare commits

...

181 Commits

Author SHA1 Message Date
adbenitez 5627f5f123 update build.gradle 2024-10-06 23:25:23 +02:00
adbenitez 7a66085107 Merge remote-tracking branch 'upstream/adb/improve-proxy-ui' 2024-10-06 22:40:06 +02:00
adbenitez aa45a9082e Merge remote-tracking branch 'upstream/adb/issue-3335' 2024-10-06 22:39:43 +02:00
adbenitez 3955f4d505 fix secondary button color 2024-10-06 22:35:47 +02:00
adbenitez 74dd4c0d9a update permanent notification icon 2024-10-06 20:41:33 +02:00
adbenitez 23eb418591 update core 2024-10-06 19:37:13 +02:00
adbenitez edcfa80d92 don't enable IO with proxy settings if account is disabled 2024-10-06 19:36:32 +02:00
adbenitez 5ff1f3d915 Merge remote-tracking branch 'upstream/main' 2024-10-06 19:34:24 +02:00
adbenitez b0ae2da439 improve proxy settings UI 2024-10-06 13:29:46 +02:00
adbenitez 8487c286e6 register app for opening ss:// and socks5:// proxy URLs
also linkify proxy URLs in text messages
2024-10-05 20:15:40 +02:00
Hocuri ffa9177094 Don't show "0%" when exporting backups (#3337)
With https://github.com/deltachat/deltachat-core-rust/pull/6027, when
exporting a backup, the counter stays at 0% while running housekeeping
and vacuuming the database, which takes 10 seconds on my device.

Showing "One moment... 0%" for 10 seconds (or longer on slower devices /
with bigger accounts) might make users think that it's not working and
abort the process. So, instead, simply show "One moment..." until the
progress reaches 1%.
2024-10-05 20:00:03 +02:00
adb 6f3d8a4414 Merge pull request #3334 from deltachat/adb/issue-3316
allow to set proxies from QRs
2024-10-05 18:38:42 +02:00
adb 9bbee2db10 Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-10-05 18:12:13 +02:00
adbenitez 30580366fd add restartIo() to DcContext 2024-10-05 18:11:26 +02:00
adb ec4bffdabe Merge pull request #3336 from deltachat/adb/issue-3282
don't change delete_server_after, let core handle it
2024-10-05 17:12:07 +02:00
adbenitez ca2d8f4b6e don't change delete_server_after, let core handle it 2024-10-05 16:32:23 +02:00
adbenitez a7f0f753fd allow to set proxies from QRs 2024-10-05 16:16:32 +02:00
link2xt 4025fd5e0b fix: do not expect special value for backup transfer progress
Values 100, 350, 400, 450, 950 are not used in the core,
so this resulted in showing incorrect progress
such as "Preparing account" when actually
database transfer was already in progress.

Desktop already does not expect any special values
and simply shows the progress bar.
2024-10-05 11:40:11 +00:00
Asiel Díaz Benítez 577959a51a Merge pull request #3329 from deltachat/adb/issue-3307
show display name in title bar when user has multiple profiles
2024-10-04 17:18:18 +02:00
adbenitez 776dc05755 remove unnecessary getConnectivitySummary(context, int) 2024-10-04 16:44:38 +02:00
Hocuri 28141bf942 Remove getNextMedia() to make compilation succeed again (#3330) 2024-10-04 16:16:21 +02:00
adbenitez 3431163c24 show display name in title bar when user has multiple profiles 2024-10-04 15:20:45 +02:00
adbenitez 45cb3a953c update version number 2024-10-04 14:49:06 +02:00
adbenitez 3080313568 Merge remote-tracking branch 'upstream/main' 2024-10-04 14:48:37 +02:00
B. Petersen f13251bc07 add 'learn more' button for managing keys 2024-10-04 12:08:55 +02:00
B. Petersen 6a7c498481 update translations 2024-10-02 19:06:35 +01:00
B. Petersen b72a1ec7d8 update local help 2024-10-02 19:06:35 +01:00
B. Petersen 5fd06f2b9d update changelog for 1.46.15 2024-09-28 21:38:30 +01:00
B. Petersen 899b075349 update changelog for 1.46.15 2024-09-28 21:38:30 +01:00
B. Petersen 1c0dc91f03 update translations 2024-09-26 23:09:00 +01:00
B. Petersen a76762f321 update deltachat-core-rust to 'chore(release): prepare for 1.145.0' of 'v1.145.0' 2024-09-26 23:00:10 +01:00
B. Petersen 86ebb6e1a8 update translations 2024-09-26 20:29:48 +01:00
bjoern ecf87c58e1 tweak proxy UI (#3322)
* use string 'Saved Proxies' as header for proxy settings

'Connections' is a bit broad,
also there is only one connection.
'Saved Proxies' is also what Telegram is using.

* move proxy settings in 'Advanced' down

logically, this seems to be a better fit.
Account/Password is still the most important bit,
even if not directly needed in chatmail and Proxy is used more often.

* add proxy settings icon to main screen

* use 'cable' instead of 'shield'. things are rewired, but not more protected or secured.
2024-09-26 16:09:39 +00:00
B. Petersen 0bef0b3501 update deltachat-core-rust to 'chore(release): prepare for 1.144.0' of 'v1.144.0' 2024-09-26 15:24:46 +01:00
Asiel Díaz Benítez bc6d676fcd use new proxy_url list API (#3292) 2024-09-26 12:30:54 +00:00
Hocuri 8aa615157a Also start the FetchForegroundService in onDeletedMessages() (#3317)
See https://firebase.google.com/docs/cloud-messaging/android/receive#override-ondeletedmessages

Shouldn't happen very often, but if it does, it's good to connect, too.
2024-09-23 14:57:12 +02:00
B. Petersen 9ffa76c0f4 as we called startForeground(), longer timeouts should be fine 2024-09-23 13:30:09 +02:00
B. Petersen 9fc4bfb970 move backgroundFetch() to FetchForegroundService 2024-09-23 13:30:09 +02:00
B. Petersen 1bc40837fe add reference for the 20 seconds time span 2024-09-23 13:30:09 +02:00
B. Petersen ba3ea172e5 use explicit FetchForegroundService
this avoids potential issues with GenericForegroundService
which eg. may block app start.
2024-09-23 13:30:09 +02:00
B. Petersen 3a4c02c8cd Revert "add pinActivity parameter to GenericForegroundService"
This reverts commit b7e5bee655bb839153a9229e0035eb6c711fb723.
2024-09-23 13:30:09 +02:00
B. Petersen 4b9d521c13 add pinActivity parameter to GenericForegroundService 2024-09-23 13:30:09 +02:00
B. Petersen df9e3007b2 show a foreground service notification 2024-09-23 13:30:09 +02:00
B. Petersen 117f144858 call backgroundFetch() from FCM 2024-09-23 13:30:09 +02:00
B. Petersen e17d37ebb7 add backgroundFetch() api 2024-09-23 13:30:09 +02:00
B. Petersen 08200d8443 refine post-notifications-granted logging
saying post-notifications-granted=false on API that do not need this grant
is misleading as it looks as some error or if the user has rejected sth.

just stumbled upon that and was irritated when trying out things wrt
https://github.com/deltachat/deltachat-android/issues/3281 on android7
2024-09-20 21:09:21 +02:00
adbenitez 9809e3edd6 update "get-it-on-github.png" 2024-09-20 18:12:49 +02:00
adbenitez 2255c267ef Merge remote-tracking branch 'upstream/main' 2024-09-20 17:59:15 +02:00
adbenitez 4a83f4005a update "get-it-on-github.png" 2024-09-20 17:56:10 +02:00
B. Petersen 8ea78b1930 update translations 2024-09-20 13:57:25 +02:00
adbenitez 9d4b5e8fed Merge remote-tracking branch 'upstream/main' 2024-09-19 23:26:46 +02:00
Asiel Díaz Benítez ca74afb229 Merge pull request #3306 from deltachat/adb/issue-3305
log notifications permission status
2024-09-19 22:15:00 +02:00
Asiel Díaz Benítez 1757c417fa Update src/main/java/org/thoughtcrime/securesms/LogViewFragment.java
Co-authored-by: bjoern <r10s@b44t.com>
2024-09-19 16:14:49 -04:00
adbenitez 4e6119b85d log notifications permission status 2024-09-19 21:08:39 +02:00
B. Petersen 91467e5c65 add reference to original message when replying from a notification; otherwise a simple 'yes' is easily misleading if message arrive in between or out of order 2024-09-19 17:48:41 +02:00
B. Petersen 2870ad988f mark messages as read also when replying from notification 2024-09-19 17:48:41 +02:00
B. Petersen a35da9ac7c really mark messages as read from notification 2024-09-19 17:48:41 +02:00
B. Petersen e4543be71c 'Mark Read' instead 'Dismiss' notifications
'Dismiss' is a bit unclear - even though introduced at #2083 to make things clearer,
i do not think this has happened :) -
i also needed to dive into the source code to see what exactly 'Dismiss' is doing.

meanwhile, we're anyway using 'Mark Read' to remove unread counter from chats,
and this is basically the same. good to be consistent.
finally, this is also the term WhatsApp/Telegram are using.

closes https://support.delta.chat/t/what-does-dismiss-button-on-notifications-do/3261/3

nb: we also change the english 'short' term from 'Read' to 'Mark Read' -
this is sill shorter than many translations
and removes the ambiguousness 'Mark Read' vs 'Open for Reading" -
esp. in the notification without much context, this is better,
but also on iOS, where the term was introduced for, it is good to be explict.
2024-09-19 17:48:41 +02:00
Asiel Díaz Benítez b1e4d4dbe5 Merge pull request #28 from ArcaneChat/adb/add-fdroid-badge
add "Get in on F-Droid" badge
2024-09-18 17:34:10 +02:00
B. Petersen e6f9eda787 update translations 2024-09-17 23:08:44 +02:00
Asiel Díaz Benítez 12b5f0767c Merge pull request #3271 from deltachat/adb/issue-3270
fix wrong translations of videochat_instance_example add doc comment
2024-09-17 22:58:51 +02:00
Asiel Díaz Benítez 0bd2c2f825 Merge pull request #3299 from deltachat/adb/issue-3289
avoid android.view.WindowManager$BadTokenException in maybeShowConfigurationError
2024-09-17 22:58:28 +02:00
Asiel Díaz Benítez 5c9afb910d Merge pull request #3301 from deltachat/adb/issue-3300
revert hack introduced in #2835
2024-09-17 22:57:47 +02:00
B. Petersen e41e3374e8 update translations 2024-09-17 22:14:17 +02:00
B. Petersen 0be6457cd1 simplify 'Proxy Settings' to just 'Proxy'
- shorter, less cluttering
- we usually do not say 'Settings' inside 'Settings',
  also having several 'Settings' menu entries in the main menu us not so nice
- same as telegram is doing
2024-09-17 22:10:26 +02:00
adbenitez f3fa1d5e7c revert hack introduced in #2835 2024-09-17 19:16:39 +02:00
B. Petersen 5f2b4590c0 marked chat replied to as being noticed
when replying from within a notification,
the corresponding chat should be marked as being noticed as well.

otherwise, it looks wrong that one has replied to a chat,
but still the chat is shown as being "unread".

the 'reply' from a notification should leave the chat
in the same state as 'dismiss' resp. 'mark read' - plus the added message.
2024-09-17 18:19:50 +02:00
adbenitez be4bc8259e avoid android.view.WindowManager$BadTokenException in maybeShowConfigurationError 2024-09-17 17:54:38 +02:00
Asiel Díaz Benítez 529842ad60 Merge pull request #3273 from deltachat/adb/improve-delete-dialog
improve profile deletion dialog
2024-09-17 17:05:58 +02:00
B. Petersen 78bd221fdf update translations 2024-09-17 15:34:54 +02:00
Asiel Díaz Benítez 054902eb67 Merge pull request #3294 from deltachat/adb/issue-3288
check that getSlideUri() is not null before passing it to ScribbleActivity
2024-09-16 22:18:11 +02:00
Asiel Díaz Benítez ef578da78d Merge pull request #3293 from deltachat/adb/issue-3287
avoid NullPointerException in ConversationListActivity.refreshAvatar
2024-09-16 22:17:51 +02:00
adbenitez 884cce3e1a check that getSlideUri() is not null before passing it to ScribbleActivity 2024-09-16 21:09:52 +02:00
adbenitez fc6bdc2fea avoid NullPointerException in ConversationListActivity.refreshAvatar 2024-09-16 20:44:55 +02:00
Hocuri e441a582dd Merge pull request #3285 from deltachat/hoc/test
Fix weblate problem
2024-09-12 17:10:04 +02:00
Hocuri 3e3a01dd62 Remove changelogs 2024-09-12 17:09:21 +02:00
Hocuri 1cda594e02 Merge remote-tracking branch 'weblate/main' into hoc/test 2024-09-11 23:30:46 +02:00
Weblate (bot) 357e6de031 Translations update from Hosted Weblate (#3145)
* Translated using Weblate (Portuguese)

Currently translated at 16.6% (3 of 18 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/pt/

* Translated using Weblate (Italian)

Currently translated at 100.0% (18 of 18 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (19 of 19 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/

* Translated using Weblate (Portuguese (Portugal))

Currently translated at 10.5% (2 of 19 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/pt_PT/

* Translated using Weblate (German)

Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/de/

* Translated using Weblate (Italian)

Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/

* Translated using Weblate (Italian)

Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/

---------

Co-authored-by: Leonardo Colman <leonardo.dev@colman.com.br>
Co-authored-by: Andrea Enzo Lattmann <andrea@testrun.org>
Co-authored-by: alex0valk <alex0valk@gmail.com>
Co-authored-by: sushidave <github316@haerrimedia.ch>
Co-authored-by: Hocuri <hocuri@gmx.de>
2024-09-11 22:54:49 +02:00
Asiel Díaz Benítez 30ac01a57e Merge pull request #3277 from deltachat/adb/issue-3276
Add separate view for proxy settings
2024-09-10 20:40:54 +02:00
Asiel Díaz Benítez de5d45d04d Merge pull request #3283 from deltachat/adb/fix-typo-in-notificationcenter
fix typo in NotificationCenter
2024-09-10 19:35:15 +02:00
adbenitez c599fc8e79 fix typo in NotificationCenter 2024-09-10 15:46:40 +02:00
adbenitez 295e1b50d2 restart IO on proxy changes 2024-09-10 13:48:08 +02:00
adbenitez ef8838cbe3 add proxy settings to main menu if it is enabled 2024-09-10 13:48:08 +02:00
adbenitez eed124a0f2 add proxy settings outside in advanced settings 2024-09-10 13:48:08 +02:00
adbenitez 18974ff023 use new proxy screen in RegistrationActivity 2024-09-10 13:48:08 +02:00
adbenitez e666bbf610 allow to set proxy in InstantOnboardingActivity 2024-09-10 13:48:08 +02:00
adbenitez 0330485123 tweak buttons in welcome and instant onboarding screens 2024-09-08 16:33:33 +02:00
Asiel Díaz Benítez 56717d3f44 Merge pull request #3279 from deltachat/prep-1.46.14
prepare 1.46.14
2024-09-06 23:46:58 +02:00
adbenitez 958bdddacf bump app version number and update changelog 2024-09-06 22:50:10 +02:00
Asiel Díaz Benítez 6375b85ef9 Merge pull request #3280 from deltachat/adb/fix-on-click-in-account-switcher-button
fix on-click in profile switcher button
2024-09-06 22:38:08 +02:00
adbenitez e076691f2a fix on-click in profile switcher button 2024-09-06 22:36:43 +02:00
Asiel Díaz Benítez 4635cbbe4f Merge pull request #3278 from deltachat/adb/update-core-and-stuff-6-9-2024
update deltachat-core-rust to 'chore(release): prepare for 1.142.12' of 'v1.142.12'
2024-09-06 21:12:22 +02:00
adbenitez 71311d43e8 update deltachat-core-rust to 'chore(release): prepare for 1.142.12' of 'v1.142.12' 2024-09-06 20:38:04 +02:00
adbenitez 6efe540310 update core 2024-09-06 18:26:53 +02:00
adbenitez 1843c29b7c update version number 2024-09-06 18:24:40 +02:00
adbenitez 653d940242 fix: add back click listener to selfAvatar in ConversationListActivity 2024-09-06 18:24:05 +02:00
adbenitez 2f3a730be7 update core 2024-09-06 06:04:23 +02:00
adbenitez 7a2401a3d5 Merge remote-tracking branch 'upstream/main' 2024-09-06 06:03:00 +02:00
adbenitez 6690add48f update bots in menu 2024-09-06 05:31:40 +02:00
Asiel Díaz Benítez ace1c99daa Merge pull request #3262 from deltachat/hoc/increase-account-switcher-hitbox
Increase account switcher hitbox
2024-09-03 15:42:24 +02:00
Asiel Díaz Benítez 125ac5e7b3 Merge pull request #3275 from deltachat/adb/issue-3274
fix: rename fastline to fastlane
2024-09-03 04:17:33 +02:00
adbenitez b3248c9f6d fix: rename fastline to fastlane 2024-09-02 23:40:23 +02:00
adbenitez 00d1803631 tweak avatar size 2024-09-02 19:36:36 +02:00
adbenitez 0482889dfa improve delete-account-dialog layout 2024-09-02 19:27:07 +02:00
adbenitez 6113195977 update src/main/res/drawable/intro1.png 2024-08-31 16:02:35 +02:00
adbenitez 4a02d6c73d remove hack to send single emoji as reaction 2024-08-31 01:41:44 +02:00
adbenitez a252eec698 add "Get in on F-Droid" badge 2024-08-31 01:24:09 +02:00
adbenitez b89e094f9f improve account deletion dialog 2024-08-31 00:12:58 +02:00
adbenitez bc511d6100 fix wrong translations of videochat_instance_example add doc comment 2024-08-29 20:12:50 +02:00
Hocuri 59435e8975 Don't count taps that are too far to the right 2024-08-26 22:37:02 +02:00
Hocuri 56b925f600 Increase account switcher hitbox
The hitbox for the account switcher was only the own avatar in and the
title, so when you tapped a bit too low or too high, nothing happened.

This PR changes it to be the whole title bar.
2024-08-24 21:47:11 +02:00
Hosted Weblate 5a5ea83fa0 Merge remote-tracking branch 'origin/main' 2024-08-16 10:36:47 +02:00
Hosted Weblate 3033000e4e Merge remote-tracking branch 'origin/main' 2024-08-15 22:06:59 +02:00
Hosted Weblate 9f8da69b25 Merge remote-tracking branch 'origin/main' 2024-08-15 16:37:05 +02:00
Hosted Weblate aa52f8172d Merge remote-tracking branch 'origin/main' 2024-08-15 13:16:11 +00:00
Hosted Weblate 82ddcd0839 Merge remote-tracking branch 'origin/main' 2024-08-14 17:16:07 +00:00
Hosted Weblate 8d99b36347 Merge remote-tracking branch 'origin/main' 2024-08-14 18:47:56 +02:00
Hosted Weblate 589fa8e3dd Merge remote-tracking branch 'origin/main' 2024-08-14 11:26:01 +00:00
Hosted Weblate 434b40e51e Merge remote-tracking branch 'origin/main' 2024-08-14 13:13:21 +02:00
Hosted Weblate 755c346d82 Merge remote-tracking branch 'origin/main' 2024-08-14 12:24:49 +02:00
Hosted Weblate b13defdf9c Merge remote-tracking branch 'origin/main' 2024-08-13 10:30:02 +02:00
Hosted Weblate fbe533c701 Merge remote-tracking branch 'origin/main' 2024-08-13 01:21:09 +02:00
Hosted Weblate 13ebad4942 Merge remote-tracking branch 'origin/main' 2024-08-12 13:41:56 +02:00
Andrea Enzo Lattmann f9539c160e Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/
2024-08-11 20:09:18 +00:00
Hosted Weblate 0195f2f78f Merge remote-tracking branch 'origin/main' 2024-08-10 22:49:54 +02:00
Hosted Weblate 64553b5655 Merge remote-tracking branch 'origin/main' 2024-08-10 22:40:20 +02:00
Hosted Weblate ce38181502 Merge remote-tracking branch 'origin/main' 2024-08-10 21:15:51 +02:00
Andrea Enzo Lattmann 4c58f31dc6 Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/
2024-08-10 19:09:22 +02:00
Hosted Weblate e5a2bde5c4 Merge remote-tracking branch 'origin/main' 2024-08-10 16:35:44 +00:00
Hosted Weblate d984bf15a0 Merge remote-tracking branch 'origin/main' 2024-08-09 16:40:42 +00:00
Hosted Weblate ab2904e274 Merge remote-tracking branch 'origin/main' 2024-08-09 18:37:39 +02:00
Hosted Weblate c751d7015c Merge remote-tracking branch 'origin/main' 2024-08-09 18:24:28 +02:00
Hosted Weblate eef3be840b Merge remote-tracking branch 'origin/main' 2024-08-09 18:11:01 +02:00
sushidave fed96377f5 Translated using Weblate (German)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/de/
2024-08-06 14:10:00 +02:00
Hosted Weblate 774bee1e28 Merge remote-tracking branch 'origin/main' 2024-08-06 14:00:18 +02:00
Hosted Weblate c0b3d87ff9 Merge remote-tracking branch 'origin/main' 2024-08-05 20:04:30 +00:00
Hosted Weblate e72eed807f Merge remote-tracking branch 'origin/main' 2024-08-05 21:12:12 +02:00
Hosted Weblate cd1821f6a7 Merge remote-tracking branch 'origin/main' 2024-08-05 18:56:10 +00:00
Hosted Weblate e79f4ef84e Merge remote-tracking branch 'origin/main' 2024-08-05 14:31:53 +00:00
Hosted Weblate 8071f64669 Merge remote-tracking branch 'origin/main' 2024-08-05 13:11:06 +00:00
Hosted Weblate fd2d3a5b5a Merge remote-tracking branch 'origin/main' 2024-08-05 14:57:16 +02:00
Hosted Weblate 2e500ce97b Merge remote-tracking branch 'origin/main' 2024-08-04 16:12:01 +00:00
Hosted Weblate 997d03829e Merge remote-tracking branch 'origin/main' 2024-08-03 00:47:35 +02:00
Hosted Weblate 67d6a2aed3 Merge remote-tracking branch 'origin/main' 2024-08-02 21:31:19 +00:00
Hosted Weblate 884481fa9e Merge remote-tracking branch 'origin/main' 2024-08-02 22:09:30 +02:00
Hosted Weblate 4c90890643 Merge remote-tracking branch 'origin/main' 2024-08-02 21:39:15 +02:00
Hosted Weblate 1209ec02f9 Merge remote-tracking branch 'origin/main' 2024-08-02 14:43:36 +00:00
Hosted Weblate 63e4b25cbf Merge remote-tracking branch 'origin/main' 2024-08-02 13:44:42 +00:00
Hosted Weblate acdde4c0a0 Merge remote-tracking branch 'origin/main' 2024-08-02 15:08:05 +02:00
Hosted Weblate a9fba59386 Merge remote-tracking branch 'origin/main' 2024-08-02 10:42:14 +02:00
Hosted Weblate 4ef7fc0401 Merge remote-tracking branch 'origin/main' 2024-08-02 08:01:09 +00:00
Hosted Weblate 148f07729c Merge remote-tracking branch 'origin/main' 2024-07-30 15:18:21 +02:00
Hosted Weblate 529f46f226 Merge remote-tracking branch 'origin/main' 2024-07-30 15:08:49 +02:00
Hosted Weblate 7ad8a48255 Merge remote-tracking branch 'origin/main' 2024-07-30 11:08:03 +00:00
Hosted Weblate 3d7d3157fc Merge remote-tracking branch 'origin/main' 2024-07-27 17:56:35 +02:00
Hosted Weblate 6b34438958 Merge remote-tracking branch 'origin/main' 2024-07-27 12:23:04 +02:00
Hosted Weblate 31bc04d190 Merge remote-tracking branch 'origin/main' 2024-07-27 12:22:19 +02:00
Hosted Weblate c1c2aa4930 Merge remote-tracking branch 'origin/main' 2024-07-26 16:13:52 +00:00
Hosted Weblate 78a9bd98b0 Merge remote-tracking branch 'origin/main' 2024-07-26 12:36:31 +00:00
alex0valk c058eb2927 Translated using Weblate (Portuguese (Portugal))
Currently translated at 10.5% (2 of 19 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/pt_PT/
2024-07-25 19:09:13 +02:00
Hosted Weblate 6180397f8f Merge remote-tracking branch 'origin/main' 2024-07-23 15:59:58 +00:00
Andrea Enzo Lattmann b4bb2e2b5d Translated using Weblate (Italian)
Currently translated at 100.0% (19 of 19 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/
2024-07-18 22:09:11 +02:00
Hosted Weblate e717837e6c Merge remote-tracking branch 'origin/main' 2024-07-17 19:44:54 +02:00
Hosted Weblate b7ae41b249 Merge remote-tracking branch 'origin/main' 2024-07-17 14:58:51 +02:00
Hosted Weblate 270e31fc58 Merge remote-tracking branch 'origin/main' 2024-07-17 14:45:31 +02:00
Hosted Weblate 5900b340e4 Merge remote-tracking branch 'origin/main' 2024-07-17 14:39:43 +02:00
Hosted Weblate 066d794360 Merge remote-tracking branch 'origin/main' 2024-07-17 14:36:41 +02:00
Hosted Weblate c9d9d915a1 Merge remote-tracking branch 'origin/main' 2024-07-17 14:35:38 +02:00
Andrea Enzo Lattmann d397f7f16e Translated using Weblate (Italian)
Currently translated at 100.0% (18 of 18 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/
2024-07-15 08:09:17 +02:00
Hosted Weblate d1d379b9b1 Merge remote-tracking branch 'origin/main' 2024-07-13 17:26:16 +02:00
Hosted Weblate a4abc0181b Merge remote-tracking branch 'origin/main' 2024-07-13 13:54:42 +00:00
Hosted Weblate 7c762bbb6c Merge remote-tracking branch 'origin/main' 2024-07-13 13:31:42 +00:00
Hosted Weblate 0d3e009500 Merge remote-tracking branch 'origin/main' 2024-07-10 13:56:01 +02:00
Hosted Weblate d16d58b77a Merge remote-tracking branch 'origin/main' 2024-07-08 13:21:36 +00:00
Hosted Weblate f4bbb61313 Merge remote-tracking branch 'origin/main' 2024-07-08 12:02:47 +02:00
Hosted Weblate a38a29167e Merge remote-tracking branch 'origin/main' 2024-07-08 11:16:28 +02:00
Hosted Weblate cf954d0970 Merge remote-tracking branch 'origin/main' 2024-07-06 23:55:56 +02:00
Hosted Weblate 7ded91d8af Merge remote-tracking branch 'origin/main' 2024-07-06 21:53:52 +00:00
Hosted Weblate 27d7e3b27d Merge remote-tracking branch 'origin/main' 2024-07-06 10:49:37 +00:00
Hosted Weblate 669e21b6f1 Merge remote-tracking branch 'origin/main' 2024-07-05 14:20:20 +02:00
Leonardo Colman b7e4dda6f5 Translated using Weblate (Portuguese)
Currently translated at 16.6% (3 of 18 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/pt/
2024-07-05 03:09:19 +02:00
130 changed files with 2213 additions and 972 deletions
+1 -1
View File
@@ -63,7 +63,7 @@ jobs:
uses: softprops/action-gh-release@v1
with:
token: "${{ secrets.GITHUB_TOKEN }}"
body: "Auto-generated release"
body: '[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite) [<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
prerelease: ${{ contains(github.event.ref, '-beta') }}
fail_on_unmatched_files: true
files: build/outputs/apk/foss/release/*.apk
+44 -1
View File
@@ -1,4 +1,47 @@
# Delta Chat Android Changelog
# ArcaneChat Android Changelog
## v1.46.15
2024-09
* new proxy settings screen available at "Advanced / Proxy"
* manage a list of HTTP(S), SOCKS5 or Shadowsocks proxies
* proxies icon shown on the chatlist if proxies are used
* improve profile deletion dialog: show name, size and avatar of the profile being deleted
* improve notification: allow to "Mark Read" from the notification
* automatic reconfiguration, e.g. switching to implicit TLS if STARTTLS port stops working
* parallelize IMAP and SMTP connection attempts
* always use preloaded DNS results
* always move auto-generated messages to DeltaChat folder
* ignore invalid securejoin messages silently
* delete messages from a chatmail server immediately by default
* make resending pending messages possible
* don't SMTP-send messages to self-chat if BccSelf is disabled
* HTTP(S) tunneling
* don't put displayname into From/To/Sender if it equals to address
* hide sync messages from INBOX (use IMAP APPEND command to upload sync messages)
* more verbose SMTP connection establishment errors
* log unexpected message state when resending fails
* fix: avoid app being killed when processing a PUSH notification
* fix crash when refreshing avatar
* fix crash in gallery
* fix: shorten message text in locally sent messages too
* fix: Set http I/O timeout to 1 minute rather than whole request timeout
* fix: don't sync QR code token before populating the group
* update to core 1.145.0
## v1.46.14
2024-09
* add monochrome/themed launcher icon support
* allow to remove the selected profile in "Switch Profile" dialog
* improve display of selected profile in "Switch Profile" dialog
* improve the hit/tap area to open "Switch Profile" dialog in the main screen's toolbar
* add support for system per-app language and remove in-app language selector
* remove the experimental "encrypt database" checkbox in classic registration screen
* fix various bugs
* update to core 1.142.12
## v1.46.13
2024-08
+4 -9
View File
@@ -2,15 +2,10 @@
A [Delta Chat](https://delta.chat/) client for Android.
[<img src="store/get-it-on-IzzyOnDroid.png"
alt="Get it on IzzyOnDroid"
height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
[<img src="store/get-it-on-apklis.png"
alt="Disponible en Apklis"
height="48">](https://www.apklis.cu/application/chat.delta.lite)
[<img src="store/get-it-on-github.png"
alt="Get it on GitHub"
height="48">](https://github.com/ArcaneChat/android/releases/latest)
[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite)
[<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
[<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite)
[<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)
<img alt="Screenshot" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width="298" /> <img alt="Screenshot" src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width="298" />
+2 -2
View File
@@ -33,8 +33,8 @@ android {
useLibrary 'org.apache.http.legacy'
defaultConfig {
versionCode 30000689
versionName "1.46.17"
versionCode 30000692
versionName "1.46.20"
applicationId "chat.delta.lite"
multiDexEnabled true
+6 -6
View File
@@ -276,6 +276,12 @@ JNIEXPORT void Java_com_b44t_messenger_DcAccounts_setPushDeviceToken(JNIEnv *env
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcAccounts_backgroundFetch(JNIEnv *env, jobject obj, jint timeout_seconds)
{
return dc_accounts_background_fetch(get_dc_accounts(env, obj), timeout_seconds) != 0;
}
JNIEXPORT jint Java_com_b44t_messenger_DcAccounts_addAccount(JNIEnv *env, jobject obj)
{
return dc_accounts_add_account(get_dc_accounts(env, obj));
@@ -1325,12 +1331,6 @@ JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env,
}
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jobject obj, jint msg_id, jint dir, jint type1, jint type2, jint type3)
{
return dc_get_next_media(get_dc_context(env, obj), msg_id, dir, type1, type2, type3);
}
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jobject obj, jint chat_id, jint flags, jint marker1before)
{
dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, obj), chat_id, flags, marker1before);
+7
View File
@@ -0,0 +1,7 @@
- nuovo inserimento: puoi creare un nuovo profilo con un tocco su "Crea Nuovo Profilo" - oppure utilizzare un accesso esistente o la configurazione del secondo dispositivo come al solito
i contatti possono essere allegati come "Schede" in "Allega/Contatto"; quando il destinatario tocca le carte, è possibile stabilire la crittografia end-to-end garantita
- aggiungi contatti manualmente in "Nuova Chat / Nuovo Contatto / Aggiungi Contatto Manualmente"
- invia qualsiasi emoji come reazione
- mostrare le reazioni nei riepiloghi
- blocca/archivia/ecc. le chat direttamente dai risultati di ricerca
- Risolti bug e altro ancora
+4
View File
@@ -0,0 +1,4 @@
- aggiungi un'opzione per contrassegnare tutte le chat selezionate come "Lette" (tocca a lungo una chat per avviare la modalità di selezione)
- i nuovi profili chatmail per dispositivo singolo hanno come impostazione predefinita "Elimina Messaggi Dopo il Download"
- quando si utilizza un profilo chatmail su più dispositivi, la cancellazione viene modificata in "Automatica" (la strategia di cancellazione dipende quindi dal server)
- Risolti bug e altro ancora
@@ -17,7 +17,7 @@ import com.google.firebase.messaging.RemoteMessage;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.service.FetchForegroundService;
import org.thoughtcrime.securesms.util.Util;
public class FcmReceiveService extends FirebaseMessagingService {
@@ -92,18 +92,17 @@ public class FcmReceiveService extends FirebaseMessagingService {
return prefixedToken;
}
@WorkerThread
@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
Log.i(TAG, "FCM push notification received");
// the app is running (again) now and fetching and notifications should be processed as usual.
// to support accounts that do not send PUSH notifications and for simplicity,
// we just let the app run as long as possible.
FetchForegroundService.start(this);
}
@Override
public void onDeletedMessages() {
Log.i(TAG, "FCM push notifications dropped");
// nothing special to do as we're running now and notifications should be processed as usual.
FetchForegroundService.start(this);
}
@Override
+24
View File
@@ -262,6 +262,26 @@
</intent-filter>
</activity>
<activity android:name=".proxy.ProxySettingsActivity"
android:label="@string/proxy_settings"
android:windowSoftInputMode="stateHidden"
android:exported="true"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<!-- Android's scheme matcher is case-sensitive, so include most likely variations -->
<data android:scheme="ss" />
<data android:scheme="socks5" />
<data android:scheme="SOCKS5" tools:ignore="AppLinkUrlError" />
<data android:scheme="SS" tools:ignore="AppLinkUrlError" />
</intent-filter>
</activity>
<activity android:name=".LogViewActivity"
android:label="@string/pref_log_header"
android:windowSoftInputMode="stateHidden"
@@ -388,6 +408,10 @@
android:name=".service.GenericForegroundService"
android:foregroundServiceType="dataSync" />
<service
android:name=".service.FetchForegroundService"
android:foregroundServiceType="dataSync" />
<service
android:name=".service.IPCAddAccountsService"
android:foregroundServiceType="dataSync"
+29 -13
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#lze-znovu-použít-můj-stávající-soukromý-klíč">Lze znovu použít můj stávající soukromý klíč?</a></li>
<li><a href="#importkey">Lze znovu použít můj stávající soukromý klíč?</a></li>
<li><a href="#nemohu-do-delta-chatu-zavést-můj-stávající-pgp-klíč">Nemohu do ArcaneChatu zavést můj stávající PGP klíč.</a></li>
<li><a href="#security-audits">Was ArcaneChat independently audited for security vulnerabilities?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#proč-můžu-nastavit-sledování-složky-odeslané">Proč můžu nastavit sledování složky Odeslané?</a></li>
<li><a href="#proč-mohu-zvolit-nesledovat-složku-deltachat">Proč mohu zvolit nesledovat složku DeltaChat?</a></li>
<li><a href="#lze-delta-chat-používat-s-protonmail--tutanota--criptext">Lze ArcaneChat používat s Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#how-can-i-delete-my-account">How can I delete my account?</a></li>
<li><a href="#remove-account">How can I delete my account?</a></li>
<li><a href="#mám-zájem-o-technické-podrobnosti-kde-najdu-víc">Mám zájem o technické podrobnosti. Kde najdu víc?</a></li>
<li><a href="#jak-je-financován-vývoj-delta-chatu">Jak je financován vývoj ArcaneChatu?</a></li>
</ul>
@@ -1146,10 +1146,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="lze-znovu-použít-můj-stávající-soukromý-klíč">
<h3 id="importkey">
Lze znovu použít můj stávající soukromý klíč? <a href="#lze-znovu-použít-můj-stávající-soukromý-klíč" class="anchor"></a>
Lze znovu použít můj stávající soukromý klíč? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1277,7 +1277,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>On the second device, <a href="https://get.delta.chat">install ArcaneChat</a></p>
<p>On the second device, <a href="https://github.com/ArcaneChat">install ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1379,7 +1379,7 @@ V tuto chvíli jsme zaměřeni na poskytování stabilní verze jako nativní ap
významných obchodech (Google Play / iOS / Windows / macOS / Linux repositories) .</li>
<li>Pokud nemáš dostatečná práva instalovat programy na svůj pracovní počítač, můžeš použít
přenosnou verzi pro Windows nebo AppImage pro Linux.
Všechny softwarové balíčky jsou na <a href="https://get.delta.chat">get.delta.chat</a>.</li>
Všechny softwarové balíčky jsou na <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1791,7 +1791,7 @@ pro složku Odeslané přes IMAP).</p>
programu (např. Thunderbird) spolu s ArcaneChatem, a chtít z tohoto programu také
psát zprávy do hovorů ArcaneChatu.</p>
<p>Nicméně doporučujeme používat ArcaneChat Desktop Client; ten lze stáhnout z <a href="https://get.delta.chat">get.delta.chat</a>. Možnost sledování složky “Odeslané”
<p>Nicméně doporučujeme používat ArcaneChat Desktop Client; ten lze stáhnout z <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Možnost sledování složky “Odeslané”
může být v budoucnu zrušena. Byla totiž vytvořena v době, kdy ArcaneChat Desktop
nebyl dostupný na všech platformách.</p>
@@ -1829,22 +1829,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="how-can-i-delete-my-account">
<h3 id="remove-account">
How can I delete my account? <a href="#how-can-i-delete-my-account" class="anchor"></a>
How can I delete my account? <a href="#remove-account" class="anchor"></a>
</h3>
<p>As you use an e-mail account for ArcaneChat,
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/cs/chatmail">3rd party chatmail server</a>.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over your e-mail account,
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to keep the account,
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.</p>
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="mám-zájem-o-technické-podrobnosti-kde-najdu-víc">
+32 -11
View File
@@ -55,7 +55,7 @@
<li><a href="#wie-kann-ich-ende-zu-ende-verschlüsselung-und-löschen-von-nachrichten-sicherstellen">Wie kann ich Ende-zu-Ende-Verschlüsselung und Löschen von Nachrichten sicherstellen?</a></li>
<li><a href="#pfs">Unterstützt ArcaneChat “Perfect Forward Secrecy”?</a></li>
<li><a href="#ist-die-ende-zu-ende-verschlüsselung-von-delta-chat-genauso-sicher-wie-die-von-signal">Ist die Ende-zu-Ende-Verschlüsselung von ArcaneChat genauso sicher wie die von Signal?</a></li>
<li><a href="#kann-ich-meinen-existierenden-privaten-schlüssel-weiter-verwenden">Kann ich meinen existierenden privaten Schlüssel weiter verwenden?</a></li>
<li><a href="#importkey">Kann ich meinen existierenden privaten Schlüssel weiter verwenden?</a></li>
<li><a href="#ich-kann-meinen-existierenden-pgp-schlüssel-nicht-in-delta-chat-importieren">Ich kann meinen existierenden PGP-Schlüssel nicht in ArcaneChat importieren.</a></li>
<li><a href="#security-audits">Wurde ArcaneChat unabhängig auf Sicherheitslücken geprüft?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#warum-gibt-es-die-funktion-gesendet-ordner-beobachten">Warum gibt es die Funktion “Gesendet-Ordner beobachten”?</a></li>
<li><a href="#warum-kann-ich-deltachat-ordner-beobachten-ausschalten">Warum kann ich “DeltaChat-Ordner beobachten” ausschalten?</a></li>
<li><a href="#ist-delta-chat-kompatibel-mit-protonmail--tutanota--criptext">Ist ArcaneChat kompatibel mit Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#wie-kann-ich-mein-konto-löschen">Wie kann ich mein Konto löschen?</a></li>
<li><a href="#remove-account">Wie kann ich mein Konto löschen?</a></li>
<li><a href="#ich-bin-an-technischen-details-interessiert-gibt-es-hierzu-weitere-infos">Ich bin an technischen Details interessiert. Gibt es hierzu weitere Infos?</a></li>
<li><a href="#wie-wird-delta-chat-finanziert">Wie wird ArcaneChat finanziert?</a></li>
</ul>
@@ -1081,10 +1081,10 @@ vergangenen verschlüsselten Nachrichten hat.</p>
<p>In jedem Fall verwendet die Ende-zu-Ende-Verschlüsselung von ArcaneChat eine <a href="#openpgp-secure">sichere Untermenge von OpenPGP</a>
das [unabhängig sicherheitsgeprüft] wurde (../assets/blog/2019-first-security-review.pdf).</p>
<h3 id="kann-ich-meinen-existierenden-privaten-schlüssel-weiter-verwenden">
<h3 id="importkey">
Kann ich meinen existierenden privaten Schlüssel weiter verwenden? <a href="#kann-ich-meinen-existierenden-privaten-schlüssel-weiter-verwenden" class="anchor"></a>
Kann ich meinen existierenden privaten Schlüssel weiter verwenden? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1186,7 +1186,7 @@ Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schwe
<p>Gehen Sie auf dem ersten Gerät zu <strong>Einstellungen → Zweites Gerät hinzufügen</strong>, entsperren Sie den Bildschirm, falls erforderlich und warten Sie einen Moment, bis ein QR-Code angezeigt wird</p>
</li>
<li>
<p>Auf dem zweiten Gerät <a href="https://get.delta.chat">ArcaneChat installieren</a></p>
<p>Auf dem zweiten Gerät <a href="https://github.com/ArcaneChat">ArcaneChat installieren</a></p>
</li>
<li>
<p>Auf dem zweiten Gerät ArcaneChat starten, “Als Zweitgerät hinzufügen” wählen und den QR-Code vom ersten Gerät scannen</p>
@@ -1267,7 +1267,7 @@ Verwenden Sie nach Möglichkeit ein Nicht-Gast-Netzwerk. Wenn Sie Zugriff auf de
<ul>
<li>Es gibt keine direkten Pläne, aber einige vorläufige Gedanken.</li>
<li>Es gibt 2-3 Möglichkeiten, einen ArcaneChat Web-Client einzuführen, aber sie bedeuten alle immense Arbeit. Im Moment fokussieren wir uns darauf, stabile native Apps in den Appstores (Google Play/iOS/Windows/macOS/Linux repositories) anzubieten.</li>
<li>Sollten Sie einen Web-Client benötigen, weil Sie auf Ihrem Arbeitsrechner keine Software installieren dürfen, können Sie den Windows Desktop-Client bzw. Applmage für Linux nutzen. Sie finden diese unter <a href="https://get.delta.chat">get.delta.chat</a>.</li>
<li>Sollten Sie einen Web-Client benötigen, weil Sie auf Ihrem Arbeitsrechner keine Software installieren dürfen, können Sie den Windows Desktop-Client bzw. Applmage für Linux nutzen. Sie finden diese unter <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1612,7 +1612,7 @@ wenn Sie eine <a href="#signature">Signaturtext</a> einfügen.</p>
<p>Der einzige Grund, den Gesendet-Ordner zu beobachten, ist, wenn Sie ein weiteres E-Mail-Programm (wie Thunderbird) mit demselben E-Mail-Account verwenden und die von dort versendeten Nachrichten in der Chat-Historie aufgeführt werden sollen.</p>
<p>Wir empfehlen für diesen Zweck aber “ArcaneChat Desktop”; Sie können die App unter <a href="https://get.delta.chat">get.delta.chat</a> herunterladen. Möglicherweise wird die Option “Gesendet-Ordner beobachten” zukünftig wegfallen; sie kommt aus einer Zeit, als ArcaneChat Desktop noch nicht auf allen Plattformen zur Verfügung stand.</p>
<p>Wir empfehlen für diesen Zweck aber “ArcaneChat Desktop”; Sie können die App unter <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a> herunterladen. Möglicherweise wird die Option “Gesendet-Ordner beobachten” zukünftig wegfallen; sie kommt aus einer Zeit, als ArcaneChat Desktop noch nicht auf allen Plattformen zur Verfügung stand.</p>
<h3 id="warum-kann-ich-deltachat-ordner-beobachten-ausschalten">
@@ -1640,17 +1640,38 @@ wenn Sie eine <a href="#signature">Signaturtext</a> einfügen.</p>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-fähige E-Mail-Anwendung</a> herstellen</li>
</ul>
<h3 id="wie-kann-ich-mein-konto-löschen">
<h3 id="remove-account">
Wie kann ich mein Konto löschen? <a href="#wie-kann-ich-mein-konto-löschen" class="anchor"></a>
Wie kann ich mein Konto löschen? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Da Sie ein E-Mail-Konto für ArcaneChat verwenden, hängt von Ihrem E-Mail-Anbieter ab, wie Sie Ihr Konto löschen können. Wir haben keine Kontrolle über Ihr E-Mail-Konto, daher können wir Ihnen dabei leider nicht helfen.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/de/chatmail">3rd party chatmail server</a>.</p>
<p>Wenn Sie das Konto behalten, aber ArcaneChat deinstallieren möchten, ist es ratsam, aktive Gruppen zu verlassen, bevor Sie ArcaneChat deinstallieren.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="ich-bin-an-technischen-details-interessiert-gibt-es-hierzu-weitere-infos">
+29 -13
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#can-i-reuse-my-existing-private-key">Can I reuse my existing private key?</a></li>
<li><a href="#importkey">Can I reuse my existing private key?</a></li>
<li><a href="#i-cant-import-my-existing-pgp-key-into-delta-chat">I cant import my existing PGP key into ArcaneChat.</a></li>
<li><a href="#security-audits">Was ArcaneChat independently audited for security vulnerabilities?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#why-can-i-choose-to-watch-the-sent-folder">Why can I choose to watch the “Sent” folder?</a></li>
<li><a href="#why-can-i-choose-not-to-watch-the-deltachat-folder">Why can I choose not to watch the DeltaChat folder?</a></li>
<li><a href="#is-delta-chat-compatible-with-protonmail--tutanota--criptext">Is ArcaneChat compatible with Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#how-can-i-delete-my-account">How can I delete my account?</a></li>
<li><a href="#remove-account">How can I delete my account?</a></li>
<li><a href="#im-interested-in-the-technical-details-can-you-tell-me-more">Im interested in the technical details. Can you tell me more?</a></li>
<li><a href="#how-are-delta-chat-developments-funded">How are ArcaneChat developments funded?</a></li>
</ul>
@@ -1150,10 +1150,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="can-i-reuse-my-existing-private-key">
<h3 id="importkey">
Can I reuse my existing private key? <a href="#can-i-reuse-my-existing-private-key" class="anchor"></a>
Can I reuse my existing private key? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1283,7 +1283,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>On the second device, <a href="https://get.delta.chat">install ArcaneChat</a></p>
<p>On the second device, <a href="https://github.com/ArcaneChat">install ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1386,7 +1386,7 @@ app stores (Google Play/iOS/Windows/macOS/Linux repositories) as native apps.</l
<li>If you need a Web Client, because you are not allowed to install software on
the computer you work with, you can use the portable Windows Desktop Client,
or the AppImage for Linux. You can find them on
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1800,7 +1800,7 @@ mail program (like Thunderbird) next to your ArcaneChat app, and want your MUA
to participate in chat conversations.</p>
<p>However, we recommend using the ArcaneChat Desktop Client; you can download it
on <a href="https://get.delta.chat">get.delta.chat</a>. The option to watch the “Sent”
on <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. The option to watch the “Sent”
folder might go away in the future. It was introduced at a time where there was
no ArcaneChat Desktop client available on all platforms.</p>
@@ -1838,22 +1838,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="how-can-i-delete-my-account">
<h3 id="remove-account">
How can I delete my account? <a href="#how-can-i-delete-my-account" class="anchor"></a>
How can I delete my account? <a href="#remove-account" class="anchor"></a>
</h3>
<p>As you use an e-mail account for ArcaneChat,
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/en/chatmail">3rd party chatmail server</a>.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over your e-mail account,
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to keep the account,
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.</p>
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="im-interested-in-the-technical-details-can-you-tell-me-more">
+32 -14
View File
@@ -55,7 +55,7 @@
<li><a href="#cómo-puedo-asegurar-el-cifrado-de-extremo-a-extremo-y-la-eliminación-de-mensajes">¿Cómo puedo asegurar el cifrado de extremo a extremo y la eliminación de mensajes?</a></li>
<li><a href="#pfs">¿Soporta ArcaneChat Perfect Forward Secrecy?</a></li>
<li><a href="#es-el-cifrado-de-extremo-a-extremo-de-delta-chat-tan-seguro-como-el-de-signal">¿Es el cifrado de extremo a extremo de ArcaneChat tan seguro como el de Signal?</a></li>
<li><a href="#puedo-reutilizar-mi-clave-privada-existente">¿Puedo reutilizar mi clave privada existente?</a></li>
<li><a href="#importkey">¿Puedo reutilizar mi clave privada existente?</a></li>
<li><a href="#no-puedo-importar-mi-clave-pgp-existente-en-delta-chat">No puedo importar mi clave PGP existente en ArcaneChat.</a></li>
<li><a href="#security-audits">¿Se auditó ArcaneChat de forma independiente en busca de vulnerabilidades de seguridad?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#por-qué-puedo-elegir-monitorear-la-carpeta-enviados">¿Por qué puedo elegir monitorear la carpeta “Enviados”?</a></li>
<li><a href="#por-qué-puedo-elegir-no-monitorear-la-carpeta-deltachat">¿Por qué puedo elegir no monitorear la carpeta DeltaChat?</a></li>
<li><a href="#delta-chat-es-compatible-con-protonmail--tutanota--criptext">¿ArcaneChat es compatible con Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#cómo-puedo-eliminar-mi-cuenta">¿Cómo puedo eliminar mi cuenta?</a></li>
<li><a href="#remove-account">¿Cómo puedo eliminar mi cuenta?</a></li>
<li><a href="#estoy-interesado-en-los-detalles-técnicos-pueden-decirme-más">Estoy interesado en los detalles técnicos. ¿Pueden decirme más?</a></li>
<li><a href="#cómo-se-financia-el-desarrollo-de-delta-chat">¿Cómo se financia el desarrollo de ArcaneChat?</a></li>
</ul>
@@ -1110,10 +1110,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="puedo-reutilizar-mi-clave-privada-existente">
<h3 id="importkey">
¿Puedo reutilizar mi clave privada existente? <a href="#puedo-reutilizar-mi-clave-privada-existente" class="anchor"></a>
¿Puedo reutilizar mi clave privada existente? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1245,7 +1245,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>En el otro dispositivo, <a href="https://get.delta.chat">instala ArcaneChat</a></p>
<p>En el otro dispositivo, <a href="https://github.com/ArcaneChat">instala ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1348,7 +1348,7 @@ tiendas de aplicaciones (Google Play/iOS/Windows/macOS/Linux repositorios) como
<li>Si necesitas un cliente web, porque no tienes permiso para instalar software en
el ordenador con que trabajas, puedes utilizar el cliente portátil Windows Desktop Client
o el AppImage para Linux. Puedes encontrarlos en
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1746,7 +1746,7 @@ programa de correo (como Thunderbird) a la vez que su aplicación ArcaneChat, y
también participe en conversaciones de chat.</p>
<p>No obstante, recomendamos utilizar el cliente de escritorio ArcaneChat; puede descargarlo
en <a href="https://get.delta.chat">get.delta.chat</a>. La opción de observar la carpeta “Enviados”
en <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. La opción de observar la carpeta “Enviados”
podría desaparecer en el futuro. Se introdujo en un momento en que no había
cliente ArcaneChat Desktop disponible en todas las plataformas.</p>
@@ -1782,20 +1782,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="cómo-puedo-eliminar-mi-cuenta">
<h3 id="remove-account">
¿Cómo puedo eliminar mi cuenta? <a href="#cómo-puedo-eliminar-mi-cuenta" class="anchor"></a>
¿Cómo puedo eliminar mi cuenta? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Al utilizar una cuenta de correo electrónico para ArcaneChat,
La forma de eliminar tu cuenta depende de tu proveedor de correo electrónico.
No tenemos ningún control sobre su cuenta de correo electrónico,
Lamentablemente no podemos ayudarte con eso.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/es/chatmail">3rd party chatmail server</a>.</p>
<p>Si quieres mantener la cuenta, pero desinstalar ArcaneChat, se recomienda salir de cualquier chat grupal antes de desinstalar ArcaneChat.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="estoy-interesado-en-los-detalles-técnicos-pueden-decirme-más">
+32 -12
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#puis-je-ré-utiliser-ma-clé-privée-existante-">Puis-je ré-utiliser ma clé privée existante ?</a></li>
<li><a href="#importkey">Puis-je ré-utiliser ma clé privée existante ?</a></li>
<li><a href="#je-narrive-pas-à-importer-ma-clé-pgp-existante-dans-delta-chat">Je narrive pas à importer ma clé PGP existante dans ArcaneChat.</a></li>
<li><a href="#security-audits">Est-ce quun audit indépendant des failles de sécurité a été réalisé sur ArcaneChat ?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#pourquoi-puis-je-choisir-de-regarder-le-dossier-envoyés">Pourquoi puis-je choisir de regarder le dossier “Envoyés”?</a></li>
<li><a href="#pourquoi-puis-je-choisir-de-ne-pas-regarder-le-dossier-delta-chat">Pourquoi puis-je choisir de ne pas regarder le dossier ArcaneChat?</a></li>
<li><a href="#delta-chat-est-il-compatible-avec-protonmail--tutanota--criptext-">ArcaneChat est-il compatible avec Protonmail / Tutanota / Criptext ?</a></li>
<li><a href="#comment-supprimer-mon-compte-">Comment supprimer mon compte ?</a></li>
<li><a href="#remove-account">Comment supprimer mon compte ?</a></li>
<li><a href="#les-détails-techniques-mintéressent-pouvez-vous-men-dire-plus-">Les détails techniques mintéressent. Pouvez-vous men dire plus ?</a></li>
<li><a href="#comment-est-financé-le-développement-de-delta-chat-">Comment est financé le développement de ArcaneChat ?</a></li>
</ul>
@@ -1124,10 +1124,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="puis-je-ré-utiliser-ma-clé-privée-existante-">
<h3 id="importkey">
Puis-je ré-utiliser ma clé privée existante ? <a href="#puis-je-ré-utiliser-ma-clé-privée-existante-" class="anchor"></a>
Puis-je ré-utiliser ma clé privée existante ? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1231,7 +1231,7 @@ Le rapport complet <a href="https://delta.chat/assets/blog/2019-first-security-r
<p>Sur le premier appareil, allez dans <strong>Paramètres → Ajouter un deuxième appareil</strong>, déverrouillez l’écran si nécessaire, et patientez un peu jusqu’à ce quun code QR saffiche.</p>
</li>
<li>
<p>Sur le deuxième appareil, <a href="https://get.delta.chat">installez ArcaneChat</a>.</p>
<p>Sur le deuxième appareil, <a href="https://github.com/ArcaneChat">installez ArcaneChat</a>.</p>
</li>
<li>
<p>Sur le deuxième appareil, ouvrez ArcaneChat, sélectionnez <strong>Ajouter comme deuxième appareil</strong>, et scannez le code QR du premier appareil.</p>
@@ -1329,7 +1329,7 @@ end-to-end encrypted messages with your communication partners.</li>
<li>Il y a 2-3 façons dintroduire un client Web ArcaneChat, mais toutes représentent
un travail conséquent. Pour linstant, nous nous concentrons à sortir des versions stables dans tous les magasins dapplications (Google Play/iOS/Windows/macOS/centre de paquets Linux) en tant quapplications natives.</li>
<li>Si vous avez besoin dun client Web parce que vous n’êtes pas autorisé à installer des logiciels sur lordinateur sur lequel vous travaillez, vous pouvez utiliser le Client Portable pour bureaux Windows ou lAppImage pour Linux. Vous pouvez les trouver sur
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1710,7 +1710,7 @@ if you set a <a href="#signature">signature text</a>.</p>
<p>La seule raison de regarder le dossier Envoyés est si vous utilisez un autre programme de courriel (tel que Thunderbird) en parallèle de votre application ArcaneChat, et que vous voulez que votre client de messagerie participe aux discussions.</p>
<p>Cependant, nous recommandons dutiliser le client de bureau ArcaneChat; vous pouvez le télécharger sur <a href="https://get.delta.chat">get.delta.chat</a>. Loption de regarder le dossier “Envoyés” pourrait disparaître dans le futur. Elle a été introduite à une époque où il ny avait pas de client de bureau ArcaneChat disponible sur toutes les plateformes.</p>
<p>Cependant, nous recommandons dutiliser le client de bureau ArcaneChat; vous pouvez le télécharger sur <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Loption de regarder le dossier “Envoyés” pourrait disparaître dans le futur. Elle a été introduite à une époque où il ny avait pas de client de bureau ArcaneChat disponible sur toutes les plateformes.</p>
<h3 id="pourquoi-puis-je-choisir-de-ne-pas-regarder-le-dossier-delta-chat">
@@ -1744,18 +1744,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="comment-supprimer-mon-compte-">
<h3 id="remove-account">
Comment supprimer mon compte ? <a href="#comment-supprimer-mon-compte-" class="anchor"></a>
Comment supprimer mon compte ? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Étant donné que vous utilisez ArcaneChat à travers un compte courriel, la façon dont vous pouvez supprimer votre compte dépend de votre fournisseur de courriel.
Comme nous nexerçons aucun contrôle sur votre compte courriel, nous ne sommes pas en mesure de vous aider à le supprimer.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/fr/chatmail">3rd party chatmail server</a>.</p>
<p>Si vous souhaitez conserver votre compte mais désinstaller ArcaneChat, nous vous recommandons de quitter toutes les discussions de groupe avant de procéder à la désinstallation.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="les-détails-techniques-mintéressent-pouvez-vous-men-dire-plus-">
+29 -13
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#can-i-reuse-my-existing-private-key">Can I reuse my existing private key?</a></li>
<li><a href="#importkey">Can I reuse my existing private key?</a></li>
<li><a href="#i-cant-import-my-existing-pgp-key-into-delta-chat">I cant import my existing PGP key into ArcaneChat.</a></li>
<li><a href="#security-audits">Was ArcaneChat independently audited for security vulnerabilities?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#why-can-i-choose-to-watch-the-sent-folder">Why can I choose to watch the “Sent” folder?</a></li>
<li><a href="#why-can-i-choose-not-to-watch-the-deltachat-folder">Why can I choose not to watch the DeltaChat folder?</a></li>
<li><a href="#is-delta-chat-compatible-with-protonmail--tutanota--criptext">Is ArcaneChat compatible with Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#how-can-i-delete-my-account">How can I delete my account?</a></li>
<li><a href="#remove-account">How can I delete my account?</a></li>
<li><a href="#im-interested-in-the-technical-details-can-you-tell-me-more">Im interested in the technical details. Can you tell me more?</a></li>
<li><a href="#how-are-delta-chat-developments-funded">How are ArcaneChat developments funded?</a></li>
</ul>
@@ -1150,10 +1150,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="can-i-reuse-my-existing-private-key">
<h3 id="importkey">
Can I reuse my existing private key? <a href="#can-i-reuse-my-existing-private-key" class="anchor"></a>
Can I reuse my existing private key? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1283,7 +1283,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>On the second device, <a href="https://get.delta.chat">install ArcaneChat</a></p>
<p>On the second device, <a href="https://github.com/ArcaneChat">install ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1386,7 +1386,7 @@ app stores (Google Play/iOS/Windows/macOS/Linux repositories) as native apps.</l
<li>If you need a Web Client, because you are not allowed to install software on
the computer you work with, you can use the portable Windows Desktop Client,
or the AppImage for Linux. You can find them on
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1800,7 +1800,7 @@ mail program (like Thunderbird) next to your ArcaneChat app, and want your MUA
to participate in chat conversations.</p>
<p>However, we recommend using the ArcaneChat Desktop Client; you can download it
on <a href="https://get.delta.chat">get.delta.chat</a>. The option to watch the “Sent”
on <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. The option to watch the “Sent”
folder might go away in the future. It was introduced at a time where there was
no ArcaneChat Desktop client available on all platforms.</p>
@@ -1838,22 +1838,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="how-can-i-delete-my-account">
<h3 id="remove-account">
How can I delete my account? <a href="#how-can-i-delete-my-account" class="anchor"></a>
How can I delete my account? <a href="#remove-account" class="anchor"></a>
</h3>
<p>As you use an e-mail account for ArcaneChat,
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/id/chatmail">3rd party chatmail server</a>.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over your e-mail account,
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to keep the account,
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.</p>
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="im-interested-in-the-technical-details-can-you-tell-me-more">
+32 -16
View File
@@ -55,7 +55,7 @@
<li><a href="#come-posso-garantire-la-crittografia-e-leliminazione-end-to-end-dei-messaggi">Come posso garantire la crittografia e leliminazione end-to-end dei messaggi?</a></li>
<li><a href="#pfs">ArcaneChat supporta Perfect Forward Secrecy?</a></li>
<li><a href="#la-crittografia-end-to-end-di-delta-chat-è-sicura-quanto-quella-di-signal">La crittografia end-to-end di ArcaneChat è sicura quanto quella di Signal?</a></li>
<li><a href="#posso-riutilizzare-la-mia-chiave-privata-esistente">Posso riutilizzare la mia chiave privata esistente?</a></li>
<li><a href="#importkey">Posso riutilizzare la mia chiave privata esistente?</a></li>
<li><a href="#non-riesco-a-importare-la-mia-chiave-pgp-esistente-in-delta-chat">Non riesco a importare la mia chiave PGP esistente in ArcaneChat.</a></li>
<li><a href="#security-audits">ArcaneChat è stata verificata in modo indipendente per le vulnerabilità di sicurezza?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#perché-posso-scegliere-di-guardare-la-cartella-inviata">Perché posso scegliere di guardare la cartella “Inviata”?</a></li>
<li><a href="#perché-posso-scegliere-di-non-guardare-la-cartella-deltachat">Perché posso scegliere di non guardare la cartella DeltaChat?</a></li>
<li><a href="#delta-chat-è-compatibile-con-protonmail--tutanota--criptext">ArcaneChat è compatibile con Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#come-posso-eliminare-il-mio-profilo">Come posso eliminare il mio profilo?</a></li>
<li><a href="#remove-account">Come posso eliminare il mio profilo?</a></li>
<li><a href="#sono-interessato-ai-dettagli-tecnici-mi-puoi-dire-di-più">Sono interessato ai dettagli tecnici. Mi puoi dire di più?</a></li>
<li><a href="#come-viene-finanziato-lo-sviluppo-di-delta-chat">Come viene finanziato lo sviluppo di ArcaneChat?</a></li>
</ul>
@@ -1137,10 +1137,10 @@ messaggi crittografati precedenti.</p>
<p>In ogni caso, la crittografia end-to-end di ArcaneChat utilizza un <a href="#openpgp-secure">sottoinsieme sicuro di OpenPGP</a>
che è stato <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">controllato in modo indipendente sulla sicurezza</a>.</p>
<h3 id="posso-riutilizzare-la-mia-chiave-privata-esistente">
<h3 id="importkey">
Posso riutilizzare la mia chiave privata esistente? <a href="#posso-riutilizzare-la-mia-chiave-privata-esistente" class="anchor"></a>
Posso riutilizzare la mia chiave privata esistente? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1270,7 +1270,7 @@ Puoi leggere il <a href="https://delta.chat/assets/blog/2019-first-security-revi
e attendere un attimo fino a quando non viene visualizzato un codice QR</p>
</li>
<li>
<p>Sul secondo dispositivo, <a href="https://get.delta.chat">installare ArcaneChat</a></p>
<p>Sul secondo dispositivo, <a href="https://github.com/ArcaneChat">installare ArcaneChat</a></p>
</li>
<li>
<p>Sul secondo dispositivo, avviare ArcaneChat, selezionare <strong>Aggiungi Come Secondo Dispositivo</strong> e scansionare il codice QR del vecchio dispositivo.</p>
@@ -1370,7 +1370,7 @@ gli app store (repository Google Play/iOS/Windows/macOS/Linux) come app native.<
<li>Se hai bisogno di un Client Web, perché non sei autorizzato a installare software sul
computer con cui lavori, puoi utilizzare il client Desktop Windows Portatile,
o lAppImage per Linux. Le trovi su
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1762,7 +1762,7 @@ programma di posta (come Thunderbird) accanto alla tua app ArcaneChat e desideri
per partecipare a conversazioni in chat.</p>
<p>Tuttavia, consigliamo di utilizzare il client desktop ArcaneChat; puoi scaricarlo
su <a href="https://get.delta.chat">get.delta.chat</a>. Lopzione per guardare la cartella
su <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Lopzione per guardare la cartella
“Inviata” potrebbe scomparire in futuro. È stato introdotto in un momento in cui non cera
nessun client ArcaneChat Desktop disponibile su tutte le piattaforme.</p>
@@ -1800,22 +1800,38 @@ che usa.</li>
<a href="https://autocrypt.org/dev-status.html">App di posta elettronica abilitata per Autocrypt</a>.</li>
</ul>
<h3 id="come-posso-eliminare-il-mio-profilo">
<h3 id="remove-account">
Come posso eliminare il mio profilo? <a href="#come-posso-eliminare-il-mio-profilo" class="anchor"></a>
Come posso eliminare il mio profilo? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Poiché utilizzi un profilo e-mail per ArcaneChat,
il modo in cui puoi eliminare il tuo profilo dipende dal tuo provider e-mail.
Non abbiamo alcun controllo sul tuo profilo e-mail,
quindi purtroppo non possiamo aiutarti in questo.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/it/chatmail">3rd party chatmail server</a>.</p>
<p>Se vuoi mantenere il profilo,
ma disinstallare ArcaneChat,
si consiglia di uscire da qualsiasi chat di gruppo prima di disinstallare ArcaneChat.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="sono-interessato-ai-dettagli-tecnici-mi-puoi-dire-di-più">
+32 -16
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#kan-ik-mijn-bestaande-privésleutel-hergebruiken">Kan ik mijn bestaande privésleutel hergebruiken?</a></li>
<li><a href="#importkey">Kan ik mijn bestaande privésleutel hergebruiken?</a></li>
<li><a href="#ik-kan-mijn-bestaande-pgp-sleutel-niet-importeren">Ik kan mijn bestaande PGP-sleutel niet importeren</a></li>
<li><a href="#security-audits">Heeft ArcaneChat ooit onafhankelijke beveiligingscontroles ondergaan?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#waarom-kan-ik-kiezen-om-de-map-verzonden-te-controleren">Waarom kan ik kiezen om de map Verzonden te controleren?</a></li>
<li><a href="#waarom-kan-ik-kiezen-om-de-deltachat-map-te-negeren">Waarom kan ik kiezen om de DeltaChat-map te negeren?</a></li>
<li><a href="#is-delta-chat-compatibel-met-protonmailtutanotacriptext">Is ArcaneChat compatibel met Protonmail/Tutanota/Criptext?</a></li>
<li><a href="#hoe-kan-ik-mijn-account-verwijderen">Hoe kan ik mijn account verwijderen?</a></li>
<li><a href="#remove-account">Hoe kan ik mijn account verwijderen?</a></li>
<li><a href="#ik-wil-graag-meer-weten-over-de-gebruikte-technieken-waar-kan-ik-meer-informatie-vinden">Ik wil graag meer weten over de gebruikte technieken. Waar kan ik meer informatie vinden?</a></li>
<li><a href="#hoe-wordt-de-ontwikkeling-van-delta-chat-gefinancierd">Hoe wordt de ontwikkeling van ArcaneChat gefinancierd?</a></li>
</ul>
@@ -1143,10 +1143,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="kan-ik-mijn-bestaande-privésleutel-hergebruiken">
<h3 id="importkey">
Kan ik mijn bestaande privésleutel hergebruiken? <a href="#kan-ik-mijn-bestaande-privésleutel-hergebruiken" class="anchor"></a>
Kan ik mijn bestaande privésleutel hergebruiken? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1275,7 +1275,7 @@ Het <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">voll
en wacht totdat de QR-code in beeld verschijnt.</p>
</li>
<li>
<p><a href="https://get.delta.chat">Installeer ArcaneChat</a> op het tweede apparaat.</p>
<p><a href="https://github.com/ArcaneChat">Installeer ArcaneChat</a> op het tweede apparaat.</p>
</li>
<li>
<p>Start ArcaneChat op het tweede apparaat, kies <strong>Toevoegen als tweede apparaat</strong> en scan de QR-code met het eerste apparaat.</p>
@@ -1377,7 +1377,7 @@ inspanningen. Momenteel ligt voor ons de focus op stabiele uitgaven maken voor a
<li>Als je een webclient nodig hebt omdat je geen software mag installeren op
je computer, dan kun je de meeneembare (portable) versie gebruiken van de Windows-client,
of de AppImage van de Linux-client. Deze kun je downloaden op
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1785,7 +1785,7 @@ en eenmaal middels imap naar de map Verzonden).</p>
ArcaneChat-app gebruikt en wilt dat je andere apparaten deel uitmaken van gesprekken.</p>
<p>Wij raden echter aan om in dat geval de ArcaneChat-app te installeren op je computer:
<a href="https://get.delta.chat">get.delta.chat</a>. De optie om de map Verzonden te controleren
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. De optie om de map Verzonden te controleren
wordt in de toekomst mogelijk verwijderd. De functie deed zijn intrede toen er nog niet
op alle platformen een ArcaneChat-client beschikbaar was.</p>
@@ -1823,22 +1823,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="hoe-kan-ik-mijn-account-verwijderen">
<h3 id="remove-account">
Hoe kan ik mijn account verwijderen? <a href="#hoe-kan-ik-mijn-account-verwijderen" class="anchor"></a>
Hoe kan ik mijn account verwijderen? <a href="#remove-account" class="anchor"></a>
</h3>
<p>ArcaneChat maakt gebruik van je e-mailaccount,
dus de verwijderprocedure is afhankelijk van je provider.
We hebben geen zeggenschap over je account,
dus helaas kunnen we je daar niet bij helpen.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/nl/chatmail">3rd party chatmail server</a>.</p>
<p>Als je je account wilt behouden maar ArcaneChat
niet wilt verwijderen, verlaat dan groeps-
gesprekken voordat je ArcaneChat verwijdert.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="ik-wil-graag-meer-weten-over-de-gebruikte-technieken-waar-kan-ik-meer-informatie-vinden">
+32 -12
View File
@@ -55,7 +55,7 @@
<li><a href="#jak-mogę-zapewnić-kompleksowe-szyfrowanie-i-usuwanie-wiadomości">Jak mogę zapewnić kompleksowe szyfrowanie i usuwanie wiadomości?</a></li>
<li><a href="#pfs">Czy ArcaneChat obsługuje funkcję Perfect Forward Secrecy?</a></li>
<li><a href="#czy-szyfrowanie-end-to-end-delta-chat-jest-tak-samo-bezpieczne-jak-signal">Czy szyfrowanie end-to-end ArcaneChat jest tak samo bezpieczne jak Signal?</a></li>
<li><a href="#czy-mogę-ponownie-wykorzystać-mój-istniejący-klucz-prywatny">Czy mogę ponownie wykorzystać mój istniejący klucz prywatny?</a></li>
<li><a href="#importkey">Czy mogę ponownie wykorzystać mój istniejący klucz prywatny?</a></li>
<li><a href="#nie-mogę-zaimportować-istniejącego-klucza-pgp-do-delta-chat">Nie mogę zaimportować istniejącego klucza PGP do ArcaneChat.</a></li>
<li><a href="#security-audits">Czy ArcaneChat był niezależnie kontrolowany pod kątem luk w zabezpieczeniach?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#po-co-mam-wybrać-opcję-oglądania-folderu-wysłane">Po co mam wybrać opcję oglądania folderu „Wysłane”?</a></li>
<li><a href="#dlaczego-mogę-nie-widzieć-folderu-deltachat">Dlaczego mogę nie widzieć folderu DeltaChat?</a></li>
<li><a href="#czy-delta-chat-jest-kompatybilny-z-protonmail--tutanota--criptext">Czy ArcaneChat jest kompatybilny z Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#jak-mogę-usunąć-swoje-konto">Jak mogę usunąć swoje konto?</a></li>
<li><a href="#remove-account">Jak mogę usunąć swoje konto?</a></li>
<li><a href="#interesują-mnie-szczegóły-techniczne-możesz-powiedzieć-mi-coś-więcej">Interesują mnie szczegóły techniczne. Możesz powiedzieć mi coś więcej?</a></li>
<li><a href="#w-jaki-sposób-finansowany-jest-rozwój-delta-chat">W jaki sposób finansowany jest rozwój ArcaneChat?</a></li>
</ul>
@@ -824,10 +824,10 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
<p>W każdym razie szyfrowanie end-to-end ArcaneChat wykorzystuje <a href="#openpgp-secure">bezpieczny podzbiór OpenPGP</a>, który został poddany <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">niezależnemu audytowi bezpieczeństwa</a>.</p>
<h3 id="czy-mogę-ponownie-wykorzystać-mój-istniejący-klucz-prywatny">
<h3 id="importkey">
Czy mogę ponownie wykorzystać mój istniejący klucz prywatny? <a href="#czy-mogę-ponownie-wykorzystać-mój-istniejący-klucz-prywatny" class="anchor"></a>
Czy mogę ponownie wykorzystać mój istniejący klucz prywatny? <a href="#importkey" class="anchor"></a>
</h3>
@@ -914,7 +914,7 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
<p>Na pierwszym urządzeniu przejdź do <strong>Ustawienia → Dodaj kolejne urządzenie</strong>, w razie potrzeby odblokuj ekran i poczekaj chwilę, aż pojawi się kod QR</p>
</li>
<li>
<p>Na drugim urządzeniu <a href="https://get.delta.chat">zainstaluj ArcaneChat</a></p>
<p>Na drugim urządzeniu <a href="https://github.com/ArcaneChat">zainstaluj ArcaneChat</a></p>
</li>
<li>
<p>Na drugim urządzeniu uruchom ArcaneChat, wybierz <strong>Dodaj jako kolejne urządzenie</strong> i zeskanuj kod QR z pierwszego urządzenia</p>
@@ -993,7 +993,7 @@ W przypadku innych programów można znaleźć rozwiązanie online.</p>
<ul>
<li>Nie ma bezpośrednich planów, ale wstępne przemyślenia.</li>
<li>Istnieją 2-3 możliwości wprowadzenia klienta Web ArcaneChat, ale wszystkie wymagają znaczącej pracy. Na razie skupiamy się na udostępnianiu stabilnych wersji we wszystkich sklepach z aplikacjami (repozytoria Google Play/iOS/Windows/macOS/Linux) jako aplikacji natywnych.</li>
<li>Jeśli potrzebujesz klienta Web, ponieważ nie możesz instalować oprogramowania na komputerze, na którym pracujesz, możesz użyć przenośnego klienta Windows Desktop lub AppImage dla Linuxa. Możesz je znaleźć na <a href="https://get.delta.chat">get.delta.chat</a>.</li>
<li>Jeśli potrzebujesz klienta Web, ponieważ nie możesz instalować oprogramowania na komputerze, na którym pracujesz, możesz użyć przenośnego klienta Windows Desktop lub AppImage dla Linuxa. Możesz je znaleźć na <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1299,7 +1299,7 @@ jeśli chcesz sprawdzić, czy Twoje poświadczenia są przetwarzane w bezpieczny
<p>Jedynym powodem, dla którego ktoś chce oglądać folder Wysłane, jest to, że używa innego programu pocztowego (takiego jak Thunderbird) razem z aplikacją ArcaneChat i chce, aby jego program pocztowy „uczestniczył” w rozmowach na czacie.</p>
<p>Jednak zalecamy używanie klienta ArcaneChat Desktop; możesz go pobrać z <a href="https://get.delta.chat">get.delta.chat</a>. Opcja oglądania folderu „Wysłane” może w przyszłości zniknąć. Została wprowadzona w czasie, gdy na żadnej platformie nie był dostępny klient ArcaneChat Desktop.</p>
<p>Jednak zalecamy używanie klienta ArcaneChat Desktop; możesz go pobrać z <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Opcja oglądania folderu „Wysłane” może w przyszłości zniknąć. Została wprowadzona w czasie, gdy na żadnej platformie nie był dostępny klient ArcaneChat Desktop.</p>
<h3 id="dlaczego-mogę-nie-widzieć-folderu-deltachat">
@@ -1326,18 +1326,38 @@ jeśli chcesz sprawdzić, czy Twoje poświadczenia są przetwarzane w bezpieczny
<li>ArcaneChat może zaszyfrować metodą end-to-end za pośrednictwem dowolnego dostawcy poczty e-mail z dowolną <a href="https://autocrypt.org/dev-status.html">aplikacją e-mail z włączoną funkcją Autocrypt</a>.</li>
</ul>
<h3 id="jak-mogę-usunąć-swoje-konto">
<h3 id="remove-account">
Jak mogę usunąć swoje konto? <a href="#jak-mogę-usunąć-swoje-konto" class="anchor"></a>
Jak mogę usunąć swoje konto? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Gdy korzystasz z konta e-mail w ArcaneChat, sposób usunięcia konta zależy od dostawcy poczty e-mail.
Nie mamy żadnej kontroli nad twoim kontem e-mail, więc niestety nie możemy ci w tym pomóc.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/pl/chatmail">3rd party chatmail server</a>.</p>
<p>Jeśli chcesz zachować konto, ale odinstalować ArcaneChat, zaleca się opuszczenie każdego czatu grupowego przed odinstalowaniem ArcaneChat.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="interesują-mnie-szczegóły-techniczne-możesz-powiedzieć-mi-coś-więcej">
+29 -13
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#posso-reutilizar-minha-chave-privada-existente">Posso reutilizar minha chave privada existente?</a></li>
<li><a href="#importkey">Posso reutilizar minha chave privada existente?</a></li>
<li><a href="#eu-não-posso-importar-minha-chave-pgp-existente-para-o-delta-chat">Eu não posso importar minha chave PGP existente para o ArcaneChat.</a></li>
<li><a href="#security-audits">Was ArcaneChat independently audited for security vulnerabilities?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#por-que-eu-posso-escolher-assistir-à-pasta-enviado">Por que eu posso escolher assistir à pasta “Enviado”?</a></li>
<li><a href="#por-que-eu-posso-escolher-não-observar-a-pasta-deltachat">Por que eu posso escolher não observar a pasta DeltaChat?</a></li>
<li><a href="#o-delta-chat-é-compatível-com-protonmail--tutanota--criptext">O ArcaneChat é compatível com Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#how-can-i-delete-my-account">How can I delete my account?</a></li>
<li><a href="#remove-account">How can I delete my account?</a></li>
<li><a href="#estou-interessado-nos-detalhes-técnicos-pode-me-dizer-mais">Estou interessado nos detalhes técnicos. Pode me dizer mais?</a></li>
<li><a href="#como-são-os-desenvolvimentos-do-delta-chat-financiados">Como são os desenvolvimentos do ArcaneChat financiados?</a></li>
</ul>
@@ -1144,10 +1144,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="posso-reutilizar-minha-chave-privada-existente">
<h3 id="importkey">
Posso reutilizar minha chave privada existente? <a href="#posso-reutilizar-minha-chave-privada-existente" class="anchor"></a>
Posso reutilizar minha chave privada existente? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1277,7 +1277,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>On the second device, <a href="https://get.delta.chat">install ArcaneChat</a></p>
<p>On the second device, <a href="https://github.com/ArcaneChat">install ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1380,7 +1380,7 @@ app stores (Google Play/iOS/Windows/macOS/Linux repositórios) como aplicativos
<li>Se você precisa de um Cliente Web, porque não está autorizado a instalar software em
o computador com o qual você trabalha, você pode usar o Windows Desktop Client portátil,
ou o AppImage para Linux. Você pode encontrá-los em
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1786,7 +1786,7 @@ programa de correio (como Thunderbird) ao lado de seu aplicativo ArcaneChat, e q
para participar numa conversa de chat.</p>
<p>No entanto, recomendamos o uso do ArcaneChat cliente Desktop; você pode baixá-lo
no <a href="https://get.delta.chat">get.delta.chat</a>. A opção de observar o “Enviado
no <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. A opção de observar o “Enviado
pasta pode ir embora no futuro. Ela foi introduzida num momento em que havia
nenhum cliente ArcaneChat no desktop disponível em todas as plataformas.</p>
@@ -1824,22 +1824,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="how-can-i-delete-my-account">
<h3 id="remove-account">
How can I delete my account? <a href="#how-can-i-delete-my-account" class="anchor"></a>
How can I delete my account? <a href="#remove-account" class="anchor"></a>
</h3>
<p>As you use an e-mail account for ArcaneChat,
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/pt/chatmail">3rd party chatmail server</a>.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over your e-mail account,
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to keep the account,
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.</p>
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="estou-interessado-nos-detalhes-técnicos-pode-me-dizer-mais">
+42 -26
View File
@@ -55,7 +55,7 @@
<li><a href="#как-я-могу-обеспечить-сквозное-шифрование-и-удаление-сообщений">Как я могу обеспечить сквозное шифрование и удаление сообщений?</a></li>
<li><a href="#pfs">Поддерживает ли ArcaneChat Совершенную Прямую Секретность?</a></li>
<li><a href="#является-ли-сквозное-шифрование-delta-chat-таким-же-безопасным-как-signal">Является ли сквозное шифрование ArcaneChat таким же безопасным как Signal?</a></li>
<li><a href="#можно-ли-повторно-использовать-существующий-секретный-ключ">Можно ли повторно использовать существующий секретный ключ?</a></li>
<li><a href="#importkey">Можно ли повторно использовать существующий секретный ключ?</a></li>
<li><a href="#я-не-могу-импортировать-мой-существующий-ключ-pgp-в-delta-chat">Я не могу импортировать мой существующий ключ PGP в ArcaneChat.</a></li>
<li><a href="#security-audits">Проходил ли ArcaneChat независимую проверку на наличие уязвимостей безопасности?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#для-чего-нужен-параметр-следить-за-папкой-отправлено">Для чего нужен параметр “следить за папкой Отправлено”?</a></li>
<li><a href="#почему-я-могу-отключить-следить-за-папкой-delta-chat">Почему я могу отключить “следить за папкой ArcaneChat”?</a></li>
<li><a href="#совместим-ли-delta-chat-с-protonmail--tutanota--criptext">Совместим ли ArcaneChat с Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#как-я-могу-удалить-аккаунт">Как я могу удалить аккаунт?</a></li>
<li><a href="#remove-account">Как я могу удалить аккаунт?</a></li>
<li><a href="#меня-интересуют-технические-детали-можете-рассказать-больше">Меня интересуют технические детали. Можете рассказать больше?</a></li>
<li><a href="#как-финансируются-разработки-delta-chat">Как финансируются разработки ArcaneChat?</a></li>
</ul>
@@ -543,12 +543,12 @@
</h3>
<p>Yes, ArcaneChat automatically uses Push Notifications for <a href="https://delta.chat/chatmail">chatmail</a> profiles.
And no, there is no alternative on Apples phones to achieve instant message delivery
because Apple devices do not allow ArcaneChat to fetch data in the background.
Push notifications are automatically activated for iOS users because
<a href="#privacy-notifications">ArcaneChats privacy-preserving Push Notification system</a>
does not expose data to Apple that it doesnt already have.</p>
<p>Да, ArcaneChat автоматически использует Push-уведомления для профилей <a href="https://delta.chat/chatmail">chatmail</a>.
И нет, на устройствах Apple нет альтернативы для обеспечения мгновенной доставки сообщений,
поскольку устройства Apple не позволяют ArcaneChat запрашивать данные в фоновом режиме.
Push-уведомления автоматически активируются для пользователей iOS, потому что
<a href="#privacy-notifications">Система Push-уведомлений ArcaneChat, обеспечивающая конфиденциальность</a>
не передает данные Apple, которых у нее еще нет.</p>
<h3 id="android-push">
@@ -1150,10 +1150,10 @@ Signal и большинство других мессенджеров, подд
<p>В любом случае, сквозное шифрование ArcaneChat использует <a href="#openpgp-secure">безопасное подмножество OpenPGP</a>
которое прошло <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">независимую проверку безопасности</a>.</p>
<h3 id="можно-ли-повторно-использовать-существующий-секретный-ключ">
<h3 id="importkey">
Можно ли повторно использовать существующий секретный ключ? <a href="#можно-ли-повторно-использовать-существующий-секретный-ключ" class="anchor"></a>
Можно ли повторно использовать существующий секретный ключ? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1204,11 +1204,11 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
<ul>
<li>
<p>2024 March, we received a deep security analysis from the Applied Cryptography
research group at ETH Zuerich and addressed all raised issues.
See our blog post about <a href="https://delta.chat/en/2024-03-25-crypto-analysis-securejoin">Hardening Guaranteed End-to-End encryption</a> for more detailed information and the
<p>В марте 2024 года мы получили подробный анализ безопасности от исследовательской группы
Applied Cryptography в ETH Цюрихе и устранили все выявленные проблемы.
Читайте наш пост в блоге о <a href="https://delta.chat/en/2024-03-25-crypto-analysis-securejoin">Hardening Guaranteed End-to-End encryption</a> для более подробной информации и
<a href="https://eprint.iacr.org/2024/918.pdf">Cryptographic Analysis of ArcaneChat</a>
research paper published afterwards.</p>
научной статьи, опубликованной позже.</p>
</li>
<li>
<p>В Апреле 2023 г. мы исправили проблемы безопасности и конфиденциальности в веб-интерфейсе,
@@ -1279,7 +1279,7 @@ Chat Rust <a href="https://github.com/deltachat/deltachat-core-rust/">ядро</
и подождите немного, пока не появится QR-код</p>
</li>
<li>
<p>На втором устройстве, <a href="https://get.delta.chat">установите ArcaneChat</a></p>
<p>На втором устройстве, <a href="https://github.com/ArcaneChat">установите ArcaneChat</a></p>
</li>
<li>
<p>На втором устройстве запустите ArcaneChat, выберите <strong>Добавить как второе устройство</strong> и отсканируйте QR-код со старого устройства</p>
@@ -1378,7 +1378,7 @@ PIN-код разблокировки экрана, графический кл
<li>Если вам нужен веб-клиент, поскольку вы не можете устанавливать программное обеспечение на
компьютере, на которым вы работаете, вы можете использовать портативный настольный клиент Windows
или AppImage для Linux. Вы можете найти их на
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1767,7 +1767,7 @@ PIN-код разблокировки экрана, графический кл
почтовую программу (например, Thunderbird) вместе с приложением ArcaneChat.</p>
<p>Однако мы рекомендуем использовать настольный клиент ArcaneChat; вы можете скачать его
на <a href="https://get.delta.chat">get.delta.chat</a>. Опция для слежения за папкой “Отправлено”
на <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Опция для слежения за папкой “Отправлено”
может быть убрана в будущем. Эта функция была представлена в то время, когда не было
настольного клиента ArcaneChat доступного на всех платформах.</p>
@@ -1803,22 +1803,38 @@ Protonmail, Tutanota или Criptext. Однако, эти сообщения н
<a href="https://autocrypt.org/dev-status.html">Приложением эл.почты с поддержкой Autocrypt</a>.</li>
</ul>
<h3 id="как-я-могу-удалить-аккаунт">
<h3 id="remove-account">
Как я могу удалить аккаунт? <a href="#как-я-могу-удалить-аккаунт" class="anchor"></a>
Как я могу удалить аккаунт? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Поскольку вы используете учётную запись эл.почты для ArcaneChat,
способ удаления своей учетной записи зависит от вашего провайдера эл.почты.
Мы не имеем никакого контроля над вашей учётной записью эл.почты,
поэтому, к сожалению, мы не можем вам с этим помочь.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/ru/chatmail">3rd party chatmail server</a>.</p>
<p>Если вы хотите сохранить учётную запись,
но удаляете ArcaneChat,
перед удалением ArcaneChat рекомендуется выйти из группового чата.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="меня-интересуют-технические-детали-можете-рассказать-больше">
+29 -13
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#môžem-znova-použiť-svoj-existujúci-súkromný-kľúč">Môžem znova použiť svoj existujúci súkromný kľúč?</a></li>
<li><a href="#importkey">Môžem znova použiť svoj existujúci súkromný kľúč?</a></li>
<li><a href="#nemôžem-importovať-môj-existujúci-pgp-kľúč-do-delta-chat">Nemôžem importovať môj existujúci PGP kľúč do ArcaneChat.</a></li>
<li><a href="#security-audits">Was ArcaneChat independently audited for security vulnerabilities?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#prečo-si-môžem-vybrať-sledovanie-priečinka-odoslané">Prečo si môžem vybrať sledovanie priečinka „Odoslané“?</a></li>
<li><a href="#prečo-sa-môžem-rozhodnúť-nesledovať-priečinok-deltachat">Prečo sa môžem rozhodnúť nesledovať priečinok DeltaChat?</a></li>
<li><a href="#je-delta-chat-kompatibilný-s-protonmail--tutanota--criptext">Je ArcaneChat kompatibilný s Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#how-can-i-delete-my-account">How can I delete my account?</a></li>
<li><a href="#remove-account">How can I delete my account?</a></li>
<li><a href="#zaujímajú-ma-technické-detaily-môžete-mi-povedať-viac">Zaujímajú ma technické detaily. Môžete mi povedať viac?</a></li>
<li><a href="#ako-sa-financuje-vývoj-delta-chat">Ako sa financuje vývoj ArcaneChat?</a></li>
</ul>
@@ -1150,10 +1150,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="môžem-znova-použiť-svoj-existujúci-súkromný-kľúč">
<h3 id="importkey">
Môžem znova použiť svoj existujúci súkromný kľúč? <a href="#môžem-znova-použiť-svoj-existujúci-súkromný-kľúč" class="anchor"></a>
Môžem znova použiť svoj existujúci súkromný kľúč? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1283,7 +1283,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>On the second device, <a href="https://get.delta.chat">install ArcaneChat</a></p>
<p>On the second device, <a href="https://github.com/ArcaneChat">install ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1386,7 +1386,7 @@ obchodov s aplikáciami (repozitáre Google Play/iOS/Windows/macOS/Linux) ako na
<li>Ak potrebujete webového klienta, pretože nemáte povolené inštalovať softvér
na počítač, s ktorým pracujete, môžete použiť prenosného klienta Windows Desktop Client,
alebo AppImage pre Linux. Nájdete ich na
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1796,7 +1796,7 @@ poštový program (napríklad Thunderbird) vedľa vašej aplikácie ArcaneChat a
aby sa zúčastňoval chatových konverzácií.</p>
<p>Odporúčame však použiť ArcaneChat Desktop Client; môžete si ho stiahnuť
na <a href="https://get.delta.chat">get.delta.chat</a>. Možnosť sledovať „Odoslané“
na <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Možnosť sledovať „Odoslané“
priečinok môže v budúcnosti zmiznúť. Bolo to zavedené v čase, kedy nebol
ArcaneChat Desktop dostupný na všetkých platformách.</p>
@@ -1834,22 +1834,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="how-can-i-delete-my-account">
<h3 id="remove-account">
How can I delete my account? <a href="#how-can-i-delete-my-account" class="anchor"></a>
How can I delete my account? <a href="#remove-account" class="anchor"></a>
</h3>
<p>As you use an e-mail account for ArcaneChat,
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/sk/chatmail">3rd party chatmail server</a>.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over your e-mail account,
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to keep the account,
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.</p>
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="zaujímajú-ma-technické-detaily-môžete-mi-povedať-viac">
+32 -16
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#a-mund-të-ripërdor-kyçin-tim-ekzistues-privat">A mund të ripërdor kyçin tim ekzistues privat?</a></li>
<li><a href="#importkey">A mund të ripërdor kyçin tim ekzistues privat?</a></li>
<li><a href="#seksportoj-dot-kyçet-e-mi-ekzistues-pgp-në-delta-chat">Seksportoj dot kyçet e mi ekzistues PGP në ArcaneChat.</a></li>
<li><a href="#security-audits">A është bërë auditim i pavarur i ArcaneChat-it për cenueshmëri sigurie?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#pse-mund-të-zgjedh-të-vëzhgoj-dosjen-të-dërguar">Pse mund të zgjedh të vëzhgoj dosjen “Të dërguar”?</a></li>
<li><a href="#pse-mund-të-zgjedh-të-mos-e-vëzhgoj-dosjen-deltachat">Pse mund të zgjedh të mos e vëzhgoj dosjen DeltaChat?</a></li>
<li><a href="#a-është-i-përputhshëm-delta-chat-i-me-protonmail-in--tutanota-n--criptext-in">A është i përputhshëm ArcaneChat-i me Protonmail-in / Tutanota-n / Criptext-in?</a></li>
<li><a href="#si-mund-ta-fshij-llogarinë-time">Si mund ta fshij llogarinë time?</a></li>
<li><a href="#remove-account">Si mund ta fshij llogarinë time?</a></li>
<li><a href="#më-interesojnë-hollësitë-teknike-mund-të-më-tregoni-diçka-më-tepër">Më interesojnë hollësitë teknike. Mund të më tregoni diçka më tepër?</a></li>
<li><a href="#si-financohet-zhvillimi-i-delta-chat-it">Si financohet zhvillimi i ArcaneChat-it?</a></li>
</ul>
@@ -1151,10 +1151,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="a-mund-të-ripërdor-kyçin-tim-ekzistues-privat">
<h3 id="importkey">
A mund të ripërdor kyçin tim ekzistues privat? <a href="#a-mund-të-ripërdor-kyçin-tim-ekzistues-privat" class="anchor"></a>
A mund të ripërdor kyçin tim ekzistues privat? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1283,7 +1283,7 @@ Mund të lexoni <a href="https://delta.chat/assets/blog/2019-first-security-revi
dhe prisni një çast sa të shfaqet një kod QR</p>
</li>
<li>
<p>Te pajisja e dytë, <a href="https://get.delta.chat">instaloni ArcaneChat-in</a></p>
<p>Te pajisja e dytë, <a href="https://github.com/ArcaneChat">instaloni ArcaneChat-in</a></p>
</li>
<li>
<p>Në pajisjen e dytë, nisni ArcaneChat-in, përzgjidhni <strong>Shtoje si Pajisje të Dytë</strong> dhe skanoni kodin QR që nga pajisja e vjetër</p>
@@ -1388,7 +1388,7 @@ përkatës.</li>
<li>Nëse ju duhet një Klient Web, ngaqë skeni leje të instaloni software në
kompjuterin me të cilin punoni, mund të përdorni Klientin e bartshëm për
Windows Desktop, ose AppImage për Linux. Mund ti gjeni te
<a href="https://get.delta.chat">get.delta.chat</a>.</li>
<a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1806,7 +1806,7 @@ përdoret tjetër program email-sh (bie fjala, Thunderbird-i) në krah të
aplikacionit tuaj ArcaneChat, dhe doni që MUA juaj të marrë pjesë në biseda.</p>
<p>Sidoqoftë, rekomandojmë të përdoret Klienti Desktop i ArcaneChat-it; mund ta
shkarkoni që nga <a href="https://get.delta.chat">get.delta.chat</a>. Mundësia për vëzhgim
shkarkoni që nga <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Mundësia për vëzhgim
të dosjes “Të dërguar” mund të hiqet në të ardhmen. Qe prurë në kohët kur skish
klient Desktop ArcaneChat për krejt platformat.</p>
@@ -1845,22 +1845,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="si-mund-ta-fshij-llogarinë-time">
<h3 id="remove-account">
Si mund ta fshij llogarinë time? <a href="#si-mund-ta-fshij-llogarinë-time" class="anchor"></a>
Si mund ta fshij llogarinë time? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Ngaqë për ArcaneChat-in përdorni një llogari email,
se si mund të fshini llogarinë tuaj, varet nga shërbimi juaj email.
Nuk kemi fuqi mbi llogarinë tuaj email,
ndaj, mjerisht, smund tju ndihmojmë për këtë.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/sq/chatmail">3rd party chatmail server</a>.</p>
<p>Nëse doni ta mbani llogarinë,
por të çinstaloni ArcaneChat-in,
rekomandohet të braktisni çfarëdo grupi fjalosjeje, para çinstalimit të ArcaneChat-it.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="më-interesojnë-hollësitë-teknike-mund-të-më-tregoni-diçka-më-tepër">
+32 -11
View File
@@ -55,7 +55,7 @@
<li><a href="#як-забезпечити-наскрізне-шифрування-та-видалення-повідомлень">Як забезпечити наскрізне шифрування та видалення повідомлень?</a></li>
<li><a href="#pfs">Чи підтримує ArcaneChat цілковиту пряму секретність (Perfect Forward Secrecy)?</a></li>
<li><a href="#чи-є-наскрізне-шифрування-delta-chat-таким-же-безпечним-як-signal">Чи є наскрізне шифрування ArcaneChat таким же безпечним, як Signal?</a></li>
<li><a href="#чи-можна-повторно-використовувати-існуючий-закритий-ключ">Чи можна повторно використовувати існуючий закритий ключ?</a></li>
<li><a href="#importkey">Чи можна повторно використовувати існуючий закритий ключ?</a></li>
<li><a href="#я-не-можу-імпортувати-свій-існуючий-pgp-ключ-у-delta-chat">Я не можу імпортувати свій існуючий PGP ключ у ArcaneChat.</a></li>
<li><a href="#security-audits">Чи проходив ArcaneChat незалежний аудит на наявність вразливостей у безпеці?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#чому-я-можу-обрати-стеження-за--папкою-надіслані">Чому я можу обрати стеження за папкою “Надіслані”?</a></li>
<li><a href="#чому-я-можу-відмовитись-від-стеження-за--папкою-deltachat">Чому я можу відмовитись від стеження за папкою DeltaChat?</a></li>
<li><a href="#чи-сумісний-delta-chat-із-protonmail--tutanota--criptext">Чи сумісний ArcaneChat із Protonmail / Tutanota / Criptext?</a></li>
<li><a href="#як-мені-видалити-свій-обліковий-запис">Як мені видалити свій обліковий запис?</a></li>
<li><a href="#remove-account">Як мені видалити свій обліковий запис?</a></li>
<li><a href="#мене-цікавлять-технічні-деталі-можете-розповісти-більше">Мене цікавлять технічні деталі. Можете розповісти більше?</a></li>
<li><a href="#як-фінансується-розробка-delta-chat">Як фінансується розробка ArcaneChat?</a></li>
</ul>
@@ -831,10 +831,10 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
<p>У будь-якому випадку, наскрізне шифрування ArcaneChat використовує <a href="#openpgp-secure">безпечну підмножину OpenPGP</a> який пройшов <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">незалежний аудит безпеки</a>.</p>
<h3 id="чи-можна-повторно-використовувати-існуючий-закритий-ключ">
<h3 id="importkey">
Чи можна повторно використовувати існуючий закритий ключ? <a href="#чи-можна-повторно-використовувати-існуючий-закритий-ключ" class="anchor"></a>
Чи можна повторно використовувати існуючий закритий ключ? <a href="#importkey" class="anchor"></a>
</h3>
@@ -917,7 +917,7 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
<p>На першому пристрої перейдіть до <strong>Налаштування → Додати другий пристрій</strong>, розблокуйте екран, якщо потрібно і трохи зачекайте, поки не з’явиться QR-код</p>
</li>
<li>
<p>На другому пристрої <a href="https://get.delta.chat">встановіть ArcaneChat</a></p>
<p>На другому пристрої <a href="https://github.com/ArcaneChat">встановіть ArcaneChat</a></p>
</li>
<li>
<p>На другому пристрої запустіть ArcaneChat, виберіть <strong>Додати як другий пристрій</strong> і відскануйте QR-код зі старого пристрою</p>
@@ -995,7 +995,7 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
<ul>
<li>Немає найближчих планів, крім попередніх думок.</li>
<li>Є 2-3 способи створити веб-клієнт ArcaneChat, але всі вони вимагають значної роботи. На даний момент ми зосереджені на отриманні стабільних релізів в усіх магазини додатків (Google Play / IOS / Windows / MacOS / репозитаріїв Linux), як нативних додатків.</li>
<li>Якщо вам потрібен веб-клієнт, через заборону встановлювати програмне забезпечення на комп’ютері, з яким ви працюєте, ви можете використовувати портативний клієнт Windows Desktop або AppImage для Linux. Ви можете знайти їх на <a href="https://get.delta.chat">get.delta.chat</a>.</li>
<li>Якщо вам потрібен веб-клієнт, через заборону встановлювати програмне забезпечення на комп’ютері, з яким ви працюєте, ви можете використовувати портативний клієнт Windows Desktop або AppImage для Linux. Ви можете знайти їх на <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>.</li>
</ul>
<h2 id="webxdc">
@@ -1316,7 +1316,7 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
<p>Єдина причина, через яку захочеться стежити за папкою Надіслане, полягає в тому, що якщо ви використовуєте іншу поштову програму (наприклад, Thunderbird) разом із вашим додатком ArcaneChat і хочете, щоб ваш поштовий клієнт брав участь у розмовах.</p>
<p>Однак ми рекомендуємо використовувати клієнт ArcaneChat Desktop; Ви можете завантажити його на <a href="https://get.delta.chat">get.delta.chat</a>. Можливість стеження папки “Надіслане” може зникнути в майбутньому. Вона був представлена у той час, коли на всіх платформах ще не було клієнта ArcaneChat Desktop.</p>
<p>Однак ми рекомендуємо використовувати клієнт ArcaneChat Desktop; Ви можете завантажити його на <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a>. Можливість стеження папки “Надіслане” може зникнути в майбутньому. Вона був представлена у той час, коли на всіх платформах ще не було клієнта ArcaneChat Desktop.</p>
<h3 id="чому-я-можу-відмовитись-від-стеження-за--папкою-deltachat">
@@ -1344,17 +1344,38 @@ Look for something like <strong>Start Autocrypt Setup Transfer</strong> in the s
<li>ArcaneChat може наскрізно шифрувати через будь-якого провайдера електронної пошти з будь-якою <a href="https://autocrypt.org/dev-status.html">поштовою програмою з підтримкою автошифрування</a>.</li>
</ul>
<h3 id="як-мені-видалити-свій-обліковий-запис">
<h3 id="remove-account">
Як мені видалити свій обліковий запис? <a href="#як-мені-видалити-свій-обліковий-запис" class="anchor"></a>
Як мені видалити свій обліковий запис? <a href="#remove-account" class="anchor"></a>
</h3>
<p>Оскільки ви використовуєте обліковий запис електронної пошти для ArcaneChat, спосіб видалення облікового запису залежить від вашого постачальника послуг електронної пошти. Ми не маємо жодного контролю над вашим обліковим записом електронної пошти, тому, на жаль, ми не можемо вам у цьому допомогти.</p>
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/uk/chatmail">3rd party chatmail server</a>.</p>
<p>Якщо ви хочете зберегти обліковий запис, але видалити ArcaneChat, перед видаленням ArcaneChat рекомендується покинути будь-які групові чати.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="мене-цікавлять-технічні-деталі-можете-розповісти-більше">
+29 -13
View File
@@ -55,7 +55,7 @@
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does ArcaneChat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of ArcaneChat as safe as Signal?</a></li>
<li><a href="#我可以重复使用现有的私钥吗">我可以重复使用现有的私钥吗?</a></li>
<li><a href="#importkey">我可以重复使用现有的私钥吗?</a></li>
<li><a href="#我无法将现有的-pgp-密钥导入-delta-chat">我无法将现有的 PGP 密钥导入 ArcaneChat。</a></li>
<li><a href="#security-audits">Was ArcaneChat independently audited for security vulnerabilities?</a></li>
</ul>
@@ -97,7 +97,7 @@
<li><a href="#为什么我可以选择监视已发送文件夹">为什么我可以选择监视“已发送”文件夹?</a></li>
<li><a href="#为什么我可以选择不监视-deltachat-文件夹">为什么我可以选择不监视 DeltaChat 文件夹?</a></li>
<li><a href="#delta-chat-与-protonmail--tutanota--criptext-兼容吗">ArcaneChat 与 Protonmail / Tutanota / Criptext 兼容吗?</a></li>
<li><a href="#如何删除我的账户">如何删除我的账户?</a></li>
<li><a href="#remove-account">如何删除我的账户?</a></li>
<li><a href="#我对技术细节很感兴趣能告诉我更多吗">我对技术细节很感兴趣。能告诉我更多吗?</a></li>
<li><a href="#delta-chat-的开发是如何被资助的">ArcaneChat 的开发是如何被资助的?</a></li>
</ul>
@@ -1117,10 +1117,10 @@ past encrypted messages.</p>
<p>In any case, ArcaneChats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p>
<h3 id="我可以重复使用现有的私钥吗">
<h3 id="importkey">
我可以重复使用现有的私钥吗? <a href="#我可以重复使用现有的私钥吗" class="anchor"></a>
我可以重复使用现有的私钥吗? <a href="#importkey" class="anchor"></a>
</h3>
@@ -1240,7 +1240,7 @@ You can read the <a href="https://delta.chat/assets/blog/2019-first-security-rev
and wait a moment until a QR code is shown</p>
</li>
<li>
<p>On the second device, <a href="https://get.delta.chat">install ArcaneChat</a></p>
<p>On the second device, <a href="https://github.com/ArcaneChat">install ArcaneChat</a></p>
</li>
<li>
<p>On the second device, start ArcaneChat, select <strong>Add as Second Device</strong>, and scan the QR code from the old device</p>
@@ -1338,7 +1338,7 @@ end-to-end encrypted messages with your communication partners.</li>
<ul>
<li>目前没有计划,但有一些初步的想法。</li>
<li>有 2-3 种途径来实现 ArcaneChat Web 客户端,但是它们都需要巨大的工作量。目前,我们专注于将稳定的版本作为本地应用程序发布到所有应用程序商店(Google Play/iOS/Windows/macOS/Linux 仓库)。</li>
<li>如果是因为不能在工作的电脑上安装软件而需要一个 Web 客户端,您可以使用便携版的 Windows 桌面客户端,或者在 Linux 上使用 AppImage 版。您可以在 <a href="https://get.delta.chat">get.delta.chat</a> 找到它们。</li>
<li>如果是因为不能在工作的电脑上安装软件而需要一个 Web 客户端,您可以使用便携版的 Windows 桌面客户端,或者在 Linux 上使用 AppImage 版。您可以在 <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a> 找到它们。</li>
</ul>
<h2 id="webxdc">
@@ -1716,7 +1716,7 @@ if you set a <a href="#signature">signature text</a>.</p>
<p>监视已发送文件夹的唯一原因是:您在使用ArcaneChat软件的同时也使用其他的邮件应用程序(比如 Thunderbird),并且想让邮件分发代理参与聊天对话。</p>
<p>不过,我们推荐使用 ArcaneChat 桌面客户端;您可以在 <a href="https://get.delta.chat">get.delta.chat</a> 下载它。监视“已发送”文件夹的选项是在还没有 ArcaneChat 桌面客户端的时候引入的,这个选项可能会在未来消失。</p>
<p>不过,我们推荐使用 ArcaneChat 桌面客户端;您可以在 <a href="https://github.com/ArcaneChat">github.com/ArcaneChat</a> 下载它。监视“已发送”文件夹的选项是在还没有 ArcaneChat 桌面客户端的时候引入的,这个选项可能会在未来消失。</p>
<h3 id="为什么我可以选择不监视-deltachat-文件夹">
@@ -1749,22 +1749,38 @@ uses.</li>
<a href="https://autocrypt.org/dev-status.html">Autocrypt-enabled e-mail app</a>.</li>
</ul>
<h3 id="如何删除我的账户">
<h3 id="remove-account">
如何删除我的账户? <a href="#如何删除我的账户" class="anchor"></a>
如何删除我的账户? <a href="#remove-account" class="anchor"></a>
</h3>
<p>As you use an e-mail account for ArcaneChat,
<p>If you use a default chat profile
you can simply uninstall the app.
This will automatically trigger deletion of all associated account data on the chatmail server.
For more info, please refer to <a href="https://nine.testrun.org/info.html#account-deletion">nine.testrun.org account-deletion</a> for the default onboarding server,
or the respective page from your chosen <a href="https://delta.chat/zh_CN/chatmail">3rd party chatmail server</a>.</p>
<p>If you have set up your chat profile on multiple devices
you need to remove it from all devices.</p>
<p>If you are using more than one account,
but dont want to get rid of all of them,
you can remove it in the account switcher menu (on android and iOS),
or in the sidebar with a right click (in the desktop client).</p>
<p>Accounts on <a href="https://providers.delta.chat">classic e-mail providers</a>
will not be deleted automatically;
how you can delete your account depends on your e-mail provider.
We dont have any control over your e-mail account,
We dont have any control over e-mail accounts at those providers,
so unfortunately we cant help you with that.</p>
<p>If you want to keep the account,
<p>If you want to continue using a classic e-mail account with other apps,
but uninstall ArcaneChat,
it is recommended to leave any group chat before uninstalling ArcaneChat.</p>
it is recommended to leave any group chat before uninstalling ArcaneChat.
Otherwise you might receive undecryptable messages from those group chats.</p>
<h3 id="我对技术细节很感兴趣能告诉我更多吗">
@@ -33,6 +33,7 @@ public class DcAccounts {
public native void stopIo ();
public native void maybeNetwork ();
public native void setPushDeviceToken (String token);
public native boolean backgroundFetch (int timeoutSeconds);
public native int addAccount ();
public native int migrateAccount (String dbfile);
+16 -16
View File
@@ -31,6 +31,7 @@ public class DcContext {
public final static int DC_EVENT_WEBXDC_STATUS_UPDATE = 2120;
public final static int DC_EVENT_WEBXDC_INSTANCE_DELETED = 2121;
public final static int DC_EVENT_WEBXDC_REALTIME_DATA = 2150;
public final static int DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE = 2200;
public final static int DC_IMEX_EXPORT_SELF_KEYS = 1;
public final static int DC_IMEX_IMPORT_SELF_KEYS = 2;
@@ -55,6 +56,7 @@ public class DcContext {
public final static int DC_QR_BACKUP = 251;
public final static int DC_QR_BACKUP2 = 252;
public final static int DC_QR_WEBRTC = 260;
public final static int DC_QR_PROXY = 271;
public final static int DC_QR_ADDR = 320;
public final static int DC_QR_TEXT = 330;
public final static int DC_QR_URL = 332;
@@ -182,7 +184,6 @@ public class DcContext {
public native int[] searchMsgs (int chat_id, String query);
public native int[] getFreshMsgs ();
public native int[] getChatMedia (int chat_id, int type1, int type2, int type3);
public native int getNextMedia (int msg_id, int dir, int type1, int type2, int type3);
public native int[] getChatContacts (int chat_id);
public native int getChatEphemeralTimer (int chat_id);
public native boolean setChatEphemeralTimer (int chat_id, int timer);
@@ -248,6 +249,14 @@ public class DcContext {
return ret.trim();
}
public String getName() {
String displayname = getConfig("displayname");
if (displayname.isEmpty()) {
displayname = getContact(DcContact.DC_CONTACT_ID_SELF).getAddr();
}
return displayname;
}
public boolean isCommunity() {
return getConfigInt("is_community") == 1;
}
@@ -277,21 +286,6 @@ public class DcContext {
setConfigInt("is_muted", muted? 1 : 0);
}
// Called for new profiles on chatmail servers that are "single device" initially;
// to save server disk space, we make use of that delete all messages immediately after download.
public void assumeSingleDevice() {
if (isChatmail()) {
setConfigInt("delete_server_after", 1 /*at once*/);
}
}
// Called when we get a hint that another device may be set up.
public void assumeMultiDevice() {
if (isChatmail() && getConfigInt("delete_server_after") == 1 /*at once*/) {
setConfigInt("delete_server_after", 0 /*never/automatic*/);
}
}
public boolean isGmailOauth2Addr(String addr) {
final String oauth2url = getOauth2Url(addr, "chat.delta:/foo");
return isGmailOauth2Url(oauth2url);
@@ -301,6 +295,12 @@ public class DcContext {
return oauth2url.startsWith("https://accounts.google.com/");
}
public void restartIo() {
if (!isEnabled()) return;
stopIo();
startIo();
}
/**
* @return true if at least one chat has location streaming enabled
*/
@@ -138,6 +138,10 @@ public class Rpc {
getResult("leave_webxdc_realtime", accountId, instanceMessageId);
}
public int getAccountFileSize(int accountId) throws RpcException {
return getResult("get_account_file_size", accountId).getAsInt();
}
private static class Request {
private final String jsonrpc = "2.0";
public final String method;
@@ -186,7 +186,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
public void handleEvent(@NonNull DcEvent event) {
if (event.getId() == DcContext.DC_EVENT_CONNECTIVITY_CHANGED) {
this.findPreference(PREFERENCE_CATEGORY_CONNECTIVITY)
.setSummary(DcHelper.getConnectivitySummary(getActivity(), R.string.connectivity_connected));
.setSummary(DcHelper.getConnectivitySummary(getActivity(), getString(R.string.connectivity_connected)));
}
}
@@ -202,7 +202,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
this.findPreference(PREFERENCE_CATEGORY_PRIVACY)
.setSummary(PrivacyPreferenceFragment.getSummary(getActivity()));
this.findPreference(PREFERENCE_CATEGORY_CONNECTIVITY)
.setSummary(DcHelper.getConnectivitySummary(getActivity(), R.string.connectivity_connected));
.setSummary(DcHelper.getConnectivitySummary(getActivity(), getString(R.string.connectivity_connected)));
this.findPreference(PREFERENCE_CATEGORY_HELP)
.setSummary(AdvancedPreferenceFragment.getVersion(getActivity()));
}
@@ -38,7 +38,6 @@ import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.os.Vibrator;
import android.provider.Browser;
import android.text.Editable;
@@ -302,12 +301,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
DcHelper.getNotificationCenter(this).updateVisibleChat(dcContext.getAccountId(), chatId);
attachmentManager.onResume();
// action bar might be hidden by workaround in onStop()
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null && !supportActionBar.isShowing()) {
supportActionBar.show();
}
}
@Override
@@ -322,23 +315,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
AudioSlidePlayer.stopAll();
}
@Override
public void onStop() {
super.onStop();
// hack/workaround to fix https://github.com/deltachat/deltachat-android/issues/2798
// the real cause of the problem is still unknown but hiding the action bar here fixes it
if ( Build.VERSION.SDK_INT >= 34) {
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null && container.isKeyboardOpen()) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (!pm.isInteractive()) {
supportActionBar.hide();
}
}
}
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
Log.i(TAG, "onConfigurationChanged(" + newConfig.orientation + ")");
@@ -1056,18 +1032,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
e.printStackTrace();
}
}
else if (action == ACTION_SEND_OUT && quote.isPresent() && EmojiProvider.getInstance(this).maybeEmoji(body)){
int quotedMsg = quote.get().getQuotedMsg().getId();
try {
rpc.sendReaction(dcContext.getAccountId(), quotedMsg, body.equals(getSelfReaction(quotedMsg))? "" : body);
future.set(chatId);
return future;
} catch (RpcException e) {
e.printStackTrace();
msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
msg.setText(body);
}
}
else if (!body.isEmpty()){
msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
msg.setText(body);
@@ -20,6 +20,7 @@ import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA;
import static org.thoughtcrime.securesms.ConversationActivity.STARTING_POSITION_EXTRA;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_ADDRESS;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SERVER_FLAGS;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_URL;
import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent;
import static org.thoughtcrime.securesms.util.RelayUtil.getDirectSharingChatId;
import static org.thoughtcrime.securesms.util.RelayUtil.getSharedTitle;
@@ -66,6 +67,7 @@ import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.connect.DirectShareUtil;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.qr.QrActivity;
import org.thoughtcrime.securesms.qr.QrCodeHandler;
import org.thoughtcrime.securesms.recipients.Recipient;
@@ -121,7 +123,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
// Util.copy(inputStream, new FileOutputStream(outputFile));
// msg.setFile(outputFile, "image/jpeg");
msg.setText(getString(R.string.update_1_46_android, "https://get.delta.chat/#changelogs"));
msg.setText(getString(R.string.update_1_46_android, "https://raw.githubusercontent.com/ArcaneChat/android/refs/heads/main/CHANGELOG.md"));
}
dcContext.addDeviceMsg(deviceMsgLabel, msg);
@@ -186,7 +188,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
TooltipCompat.setTooltipText(selfAvatar, getText(R.string.switch_account));
selfAvatar.setOnClickListener(v -> AccountManager.getInstance().showSwitchAccountMenu(this));
title.setOnClickListener(v -> {
findViewById(R.id.avatar_and_title).setOnClickListener(v -> {
if (!isRelayingMessageContent(this)) {
AccountManager.getInstance().showSwitchAccountMenu(this);
}
@@ -265,7 +267,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
DcContext dcContext = DcHelper.getContext(this);
int accountId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, dcContext.getAccountId());
if (getIntent().getBooleanExtra(CLEAR_NOTIFICATIONS, false)) {
DcHelper.getNotificationCenter(this).removeAllNotifiations(accountId);
DcHelper.getNotificationCenter(this).removeAllNotifications(accountId);
}
if (accountId != dcContext.getAccountId()) {
AccountManager.getInstance().switchAccountAndStartActivity(this, accountId);
@@ -299,19 +301,15 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
}
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} else {
DcContext dcContext = DcHelper.getContext(this);
DcContact self = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF);
String name = dcContext.getConfig("displayname");
if (TextUtils.isEmpty(name)) {
name = self.getAddr();
}
title.setText(name);
title.setText(DcHelper.getContext(this).getName());
selfAvatar.setConnectivity(DcHelper.getContext(this).getConnectivity());
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
}
}
public void refreshAvatar() {
if (selfAvatarContainer == null) return;
if (isRelayingMessageContent(this)) {
selfAvatarContainer.setVisibility(View.GONE);
} else {
@@ -377,20 +375,9 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
if (!isRelayingMessageContent(this)) {
inflater.inflate(R.menu.text_secure_normal, menu);
MenuItem item = menu.findItem(R.id.menu_global_map);
if (Prefs.isLocationStreamingEnabled(this)) {
item.setVisible(true);
}
if (!Prefs.isLocationStreamingEnabled(this)) {
menu.findItem(R.id.menu_global_map).setVisible(false);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
MenuCompat.setGroupDividerEnabled(menu, true);
} else{
menu.setGroupVisible(R.id.extra_services, false);
}
menu.findItem(R.id.menu_global_map).setVisible(Prefs.isLocationStreamingEnabled(this));
menu.findItem(R.id.menu_proxy_settings).setVisible(!TextUtils.isEmpty(DcHelper.get(this, CONFIG_PROXY_URL)));
MenuCompat.setGroupDividerEnabled(menu, true);
}
super.onPrepareOptionsMenu(menu);
@@ -453,6 +440,9 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
case R.id.menu_global_map:
WebxdcActivity.openMaps(this, 0);
return true;
case R.id.menu_proxy_settings:
startActivity(new Intent(this, ProxySettingsActivity.class));
return true;
case android.R.id.home:
onBackPressed();
return true;
@@ -460,10 +450,10 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
startActivity(new Intent(this, ProfileActivity.class));
return true;
case R.id.menu_webxdc_apps_store:
handleShowBot("xstore@testrun.org", "OPENPGP4FPR:37DC2B704A2AE2F6A96235CE0C3A0EBCA4F5801D#a=xstore%40testrun.org&n=&i=-1IGtynaivZ&s=JqHsvvcDmnW");
handleShowBot("juegos@buzon.uy", "OPENPGP4FPR:d3d403a734be71fe9293a00311fef80dbe5dbc89#a=juegos%40buzon.uy&n=&i=WQZY-8FODS3&s=ZQBkaclFzao");
return true;
case R.id.menu_public_bots:
handleShowBot("publicbots@testrun.org", "OPENPGP4FPR:4DB8117591B27184A903FF7E9F469E00D40E13E7#a=publicbots%40testrun.org&n=Public%20Bots&i=zSuQpFtBa_Q&s=weLMu1-o1o1");
handleShowBot("puente@buzon.uy", "OPENPGP4FPR:4B41E5AFAF78A0C71DB56138D5BEFED00A45F97A#a=puente%40buzon.uy&n=Public%20Bots&i=ZC_oaJtuvJP&s=5SE96rRovsK");
return true;
}
@@ -5,7 +5,9 @@ import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
@@ -13,6 +15,7 @@ import android.os.Bundle;
import android.text.TextUtils;
import android.text.util.Linkify;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
@@ -47,6 +50,7 @@ import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
import org.thoughtcrime.securesms.util.Prefs;
@@ -132,13 +136,29 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
handleIntent();
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.clear();
getMenuInflater().inflate(R.menu.instant_onboarding_menu, menu);
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
if (item.getItemId() == android.R.id.home) {
switch (item.getItemId()) {
case android.R.id.home:
getOnBackPressedDispatcher().onBackPressed();
return true;
case R.id.menu_proxy_settings:
startActivity(new Intent(this, ProxySettingsActivity.class));
return true;
case R.id.menu_view_log:
startActivity(new Intent(this, LogViewActivity.class));
return true;
}
return false;
}
@@ -290,32 +310,15 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
signUpBtn.setOnClickListener(view -> createProfile());
Button otherOptionsBtn = findViewById(R.id.other_options_button);
otherOptionsBtn.setOnClickListener(view -> showOtherOptionsDialog());
}
private void showOtherOptionsDialog() {
View view = View.inflate(this, R.layout.signup_options_view, null);
AlertDialog signUpDialog = new AlertDialog.Builder(this)
.setView(view)
.setTitle(R.string.instant_onboarding_show_more_instances)
.setNegativeButton(R.string.cancel, null)
.create();
view.findViewById(R.id.use_other_server).setOnClickListener((v) -> {
findViewById(R.id.use_other_server).setOnClickListener((v) -> {
WebViewActivity.openUrlInBrowser(this, INSTANCES_URL);
signUpDialog.dismiss();
});
view.findViewById(R.id.login_button).setOnClickListener((v) -> {
findViewById(R.id.login_button).setOnClickListener((v) -> {
startRegistrationActivity();
signUpDialog.dismiss();
});
view.findViewById(R.id.scan_qr_button).setOnClickListener((v) -> {
findViewById(R.id.scan_qr_button).setOnClickListener((v) -> {
new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class).initiateScan();
signUpDialog.dismiss();
});
signUpDialog.show();
}
private void startRegistrationActivity() {
@@ -330,7 +333,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
privacyPolicyBtn.setText(getString(R.string.qrlogin_ask_login, providerHost));
} else {
signUpBtn.setText(R.string.instant_onboarding_create);
privacyPolicyBtn.setTextColor(getResources().getColor(R.color.def_accent));
try (TypedArray typedArray = obtainStyledAttributes(new int[]{R.attr.colorAccent})) {
privacyPolicyBtn.setTextColor(typedArray.getColor(0, Color.BLACK));
}
if (DEFAULT_CHATMAIL_HOST.equals(providerHost)) {
privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_default2, providerHost));
} else {
@@ -373,7 +380,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
progressUpdate((int)progress);
} else if (progress==1000/*done*/) {
DcHelper.getAccounts(this).startIo();
dcContext.assumeSingleDevice();
progressSuccess();
}
}
@@ -386,7 +392,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
private void progressError(String data2) {
progressDialog.dismiss();
maybeShowConfigurationError(this, data2);
WelcomeActivity.maybeShowConfigurationError(this, data2);
}
private void progressSuccess() {
@@ -399,22 +405,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
finishAffinity();
}
public static void maybeShowConfigurationError(Activity activity, String data2) {
if (data2 != null && !data2.isEmpty()) {
AlertDialog d = new AlertDialog.Builder(activity)
.setMessage(data2)
.setPositiveButton(android.R.string.ok, null)
.create();
d.show();
try {
//noinspection ConstantConditions
Linkify.addLinks((TextView) d.findViewById(android.R.id.message), Linkify.WEB_URLS | Linkify.EMAIL_ADDRESSES);
} catch(NullPointerException e) {
Log.e(TAG, "Linkify failed", e);
}
}
}
@SuppressLint("StaticFieldLeak")
private void createProfile() {
if (TextUtils.isEmpty(this.name.getText())) {
@@ -17,6 +17,7 @@
package org.thoughtcrime.securesms;
import android.Manifest;
import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.content.Context;
@@ -35,6 +36,7 @@ import android.view.ViewGroup;
import android.widget.EditText;
import androidx.annotation.NonNull;
import androidx.core.content.PermissionChecker;
import androidx.fragment.app.Fragment;
import com.b44t.messenger.DcContext;
@@ -255,6 +257,13 @@ public class LogViewFragment extends Fragment {
builder.append("rtl=").append(isRtl).append("\n");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
boolean notifPermGranted = PermissionChecker.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) == PermissionChecker.PERMISSION_GRANTED;
builder.append("post-notifications-granted=").append(notifPermGranted).append("\n");
} else {
builder.append("post-notifications-granted=<not needed>").append("\n");
}
final String token = FcmReceiveService.getToken();
builder.append("push-enabled=").append(Prefs.isPushEnabled(context)).append("\n");
builder.append("push-token=").append(token == null ? "<empty>" : token).append("\n");
@@ -12,11 +12,7 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_SECURITY;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_SERVER;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_USER;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SERVER_FLAGS;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SOCKS5_ENABLED;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SOCKS5_HOST;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SOCKS5_PASSWORD;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SOCKS5_PORT;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SOCKS5_USER;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
import static org.thoughtcrime.securesms.connect.DcHelper.getContext;
import static org.thoughtcrime.securesms.service.IPCAddAccountsService.ACCOUNT_DATA;
@@ -59,6 +55,7 @@ import com.google.android.material.textfield.TextInputEditText;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.IntentUtils;
import org.thoughtcrime.securesms.util.Util;
@@ -96,7 +93,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
Spinner certCheck;
private SwitchCompat proxySwitch;
private Group proxyGroup;
@Override
public void onCreate(Bundle bundle) {
@@ -127,15 +123,11 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
authMethod = findViewById(R.id.auth_method);
certCheck = findViewById(R.id.cert_check);
proxyGroup = findViewById(R.id.socks5_group);
proxySwitch = findViewById(R.id.socks5_switch);
proxySwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
proxyGroup.setVisibility(isChecked? advancedGroup.getVisibility() : View.GONE);
proxySwitch = findViewById(R.id.proxy_settings);
proxySwitch.setOnClickListener(l -> {
proxySwitch.setChecked(!proxySwitch.isChecked()); // revert toggle
startActivity(new Intent(this, ProxySettingsActivity.class));
});
TextInputEditText proxyHostInput = findViewById(R.id.socks5_host_text);
TextInputEditText proxyPortInput = findViewById(R.id.socks5_port_text);
proxyHostInput.setOnFocusChangeListener((view, focused) -> focusListener(view, focused, VerificationType.SERVER));
proxyPortInput.setOnFocusChangeListener((view, focused) -> focusListener(view, focused, VerificationType.PORT));
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
@@ -161,7 +153,16 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
advancedIcon.setOnClickListener(l -> onAdvancedSettings());
advancedIcon.setRotation(45);
viewLogText.setOnClickListener((view) -> showLog());
boolean isConfigured = DcHelper.isConfigured(getApplicationContext());
boolean expandAdvanced = false;
String strVal;
int intVal;
intVal = DcHelper.getInt(this, CONFIG_PROXY_ENABLED);
proxySwitch.setChecked(intVal == 1);
expandAdvanced = expandAdvanced || intVal == 1;
if (isConfigured) {
String email = DcHelper.get(this, CONFIG_ADDRESS);
emailInput.setText(email);
@@ -170,10 +171,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
}
passwordInput.setText(DcHelper.get(this, CONFIG_MAIL_PASSWORD));
boolean expandAdvanced = false;
String strVal;
int intVal;
TextInputEditText imapLoginInput = findViewById(R.id.imap_login_text);
strVal = DcHelper.get(this, CONFIG_MAIL_USER);
imapLoginInput.setText(strVal);
@@ -213,17 +210,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
smtpSecurity.setSelection(intVal);
expandAdvanced = expandAdvanced || intVal != 0;
intVal = DcHelper.getInt(this, CONFIG_SOCKS5_ENABLED);
proxySwitch.setChecked(intVal == 1);
expandAdvanced = expandAdvanced || intVal == 1;
proxyHostInput.setText(DcHelper.get(this, CONFIG_SOCKS5_HOST));
proxyPortInput.setText(DcHelper.get(this, CONFIG_SOCKS5_PORT));
TextInputEditText proxyUserInput = findViewById(R.id.socks5_user_text);
TextInputEditText proxyPasswordInput = findViewById(R.id.socks5_password_text);
proxyUserInput.setText(DcHelper.get(this, CONFIG_SOCKS5_USER));
proxyPasswordInput.setText(DcHelper.get(this, CONFIG_SOCKS5_PASSWORD));
int serverFlags = DcHelper.getInt(this, CONFIG_SERVER_FLAGS);
int sel = 0;
if((serverFlags&DcContext.DC_LP_AUTH_OAUTH2)!=0) {
@@ -242,8 +228,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
int certCheckFlags = DcHelper.getInt(this, "imap_certificate_checks");
certCheck.setSelection(certCheckFlags);
expandAdvanced = expandAdvanced || certCheckFlags != 0;
if (expandAdvanced) { onAdvancedSettings(); }
} else if (getIntent() != null && getIntent().getBundleExtra(ACCOUNT_DATA) != null) {
// Companion app might have sent account data
Bundle b = getIntent().getBundleExtra(ACCOUNT_DATA);
@@ -261,6 +245,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
}
}
if (expandAdvanced) { onAdvancedSettings(); }
registerForEvents();
}
@@ -272,6 +257,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
public void onResume() {
super.onResume();
dynamicTheme.onResume(this);
proxySwitch.setChecked(DcHelper.getInt(this, CONFIG_PROXY_ENABLED) == 1);
}
private void showLog() {
@@ -574,12 +560,10 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
private void onAdvancedSettings() {
boolean advancedViewVisible = advancedGroup.getVisibility() == View.VISIBLE;
if (advancedViewVisible) {
proxyGroup.setVisibility(View.GONE);
advancedGroup.setVisibility(View.GONE);
advancedIcon.setRotation(45);
} else {
advancedGroup.setVisibility(View.VISIBLE);
if (proxySwitch.isChecked()) proxyGroup.setVisibility(View.VISIBLE);
advancedIcon.setRotation(0);
}
}
@@ -621,15 +605,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
setConfig(R.id.smtp_port_text, CONFIG_SEND_PORT, true);
setConfig(R.id.smtp_login_text, CONFIG_SEND_USER, false);
setConfig(R.id.smtp_password_text, CONFIG_SEND_PASSWORD, false);
if (proxySwitch.isChecked()) {
DcHelper.getContext(this).setConfigInt(CONFIG_SOCKS5_ENABLED, 1);
setConfig(R.id.socks5_host_text, CONFIG_SOCKS5_HOST, true);
setConfig(R.id.socks5_port_text, CONFIG_SOCKS5_PORT, true);
setConfig(R.id.socks5_user_text, CONFIG_SOCKS5_USER, true);
setConfig(R.id.socks5_password_text, CONFIG_SOCKS5_PASSWORD, false);
} else {
DcHelper.getContext(this).setConfigInt(CONFIG_SOCKS5_ENABLED, 0);
}
DcHelper.getContext(this).setConfigInt(CONFIG_MAIL_SECURITY, imapSecurity.getSelectedItemPosition());
DcHelper.getContext(this).setConfigInt(CONFIG_SEND_SECURITY, smtpSecurity.getSelectedItemPosition());
@@ -69,26 +69,9 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
super.onCreate(bundle);
setContentView(R.layout.welcome_activity);
Button signUpButton = findViewById(R.id.signup_button);
Button signInButton = findViewById(R.id.signin_button);
View view = View.inflate(this, R.layout.login_options_view, null);
AlertDialog signInDialog = new AlertDialog.Builder(this)
.setView(view)
.setTitle(R.string.onboarding_alternative_logins)
.setNegativeButton(R.string.cancel, null)
.create();
view.findViewById(R.id.add_as_second_device_button).setOnClickListener((v) -> {
startAddAsSecondDeviceActivity();
signInDialog.dismiss();
});
view.findViewById(R.id.backup_button).setOnClickListener((v) -> {
startImportBackup();
signInDialog.dismiss();
});
signUpButton.setOnClickListener((v) -> startInstantOnboardingActivity());
signInButton.setOnClickListener((v) -> signInDialog.show());
findViewById(R.id.signup_button).setOnClickListener((v) -> startInstantOnboardingActivity());
findViewById(R.id.add_as_second_device_button).setOnClickListener((v) -> startAddAsSecondDeviceActivity());
findViewById(R.id.backup_button).setOnClickListener((v) -> startImportBackup());
registerForEvents();
initializeActionBar();
@@ -296,6 +279,8 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
}
public static void maybeShowConfigurationError(Activity activity, String data2) {
if (activity.isFinishing()) return; // avoid android.view.WindowManager$BadTokenException
if (data2 != null && !data2.isEmpty()) {
AlertDialog d = new AlertDialog.Builder(activity)
.setMessage(data2)
@@ -342,7 +327,6 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
}
DcHelper.getAccounts(this).startIo();
progressSuccess();
dcContext.assumeMultiDevice();
notificationController.close();
cleanupTempBackupFile();
}
@@ -4,10 +4,12 @@ import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
@@ -16,15 +18,20 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.b44t.messenger.DcAccounts;
import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.rpc.Rpc;
import com.b44t.messenger.rpc.RpcException;
import org.thoughtcrime.securesms.ConnectivityActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AvatarView;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
@@ -134,13 +141,38 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
AccountSelectionListFragment.this.dismiss();
if (activity == null) return;
DcAccounts accounts = DcHelper.getAccounts(activity);
Rpc rpc = DcHelper.getRpc(activity);
View dialogView = View.inflate(activity, R.layout.dialog_delete_profile, null);
AvatarView avatar = dialogView.findViewById(R.id.avatar);
TextView nameView = dialogView.findViewById(R.id.name);
TextView addrView = dialogView.findViewById(R.id.address);
TextView sizeView = dialogView.findViewById(R.id.size_label);
TextView description = dialogView.findViewById(R.id.description);
DcContext dcContext = accounts.getAccount(accountId);
String name = dcContext.getConfig("displayname");
DcContact contact = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF);
if (TextUtils.isEmpty(name)) {
name = contact.getAddr();
}
Recipient recipient = new Recipient(getContext(), contact, name);
avatar.setAvatar(GlideApp.with(activity), recipient, false);
nameView.setText(name);
addrView.setText(contact.getAddr());
try {
sizeView.setText(Util.getPrettyFileSize(rpc.getAccountFileSize(accountId)));
} catch (RpcException e) {
e.printStackTrace();
}
description.setText(activity.getString(R.string.delete_account_explain_with_name, name));
AlertDialog dialog = new AlertDialog.Builder(activity)
.setTitle(accounts.getAccount(accountId).getNameNAddr())
.setMessage(R.string.forget_login_confirmation_desktop)
.setTitle(R.string.delete_account)
.setView(dialogView)
.setNegativeButton(R.string.cancel, (d, which) -> AccountManager.getInstance().showSwitchAccountMenu(activity))
.setPositiveButton(R.string.delete, (d2, which2) -> {
boolean selected = accountId == accounts.getSelectedAccount().getAccountId();
DcHelper.getNotificationCenter(activity).removeAllNotifiations(accountId);
DcHelper.getNotificationCenter(activity).removeAllNotifications(accountId);
accounts.removeAccount(accountId);
if (selected) {
DcContext selAcc = accounts.getSelectedAccount();
@@ -214,6 +214,7 @@ public class EmojiTextView extends AppCompatTextView {
private static final Pattern CMD_PATTERN = Pattern.compile("(?<=^|\\s)/[a-zA-Z][a-zA-Z@\\d_/.-]{0,254}");
private static final Pattern CUSTOM_PATTERN = Pattern.compile("(?<=^|\\s)(OPENPGP4FPR|openpgp4fpr|mumble):[^ \\n]+");
private static final Pattern PROXY_PATTERN = Pattern.compile("(?<=^|\\s)(SOCKS5|socks5|ss|SS):[^ \\n]+");
private static void replaceURLSpan(Spannable messageBody) {
URLSpan[] urlSpans = messageBody.getSpans(0, messageBody.length(), URLSpan.class);
@@ -234,6 +235,10 @@ public class EmojiTextView extends AppCompatTextView {
Linkify.addLinks(messageBody, CUSTOM_PATTERN, null, null, null);
EmojiTextView.replaceURLSpan(messageBody);
if (Linkify.addLinks(messageBody, PROXY_PATTERN, null, null, null)) {
EmojiTextView.replaceURLSpan(messageBody); // replace URLSpan so that it is not removed on the next addLinks() call
}
// linkyfiy urls etc., this removes all existing URLSpan
if (Linkify.addLinks(messageBody, Linkify.EMAIL_ADDRESSES|Linkify.WEB_URLS|Linkify.PHONE_NUMBERS)) {
EmojiTextView.replaceURLSpan(messageBody);
@@ -11,6 +11,7 @@ import com.b44t.messenger.DcEvent;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.service.FetchForegroundService;
import org.thoughtcrime.securesms.util.Util;
import java.util.ArrayList;
@@ -177,6 +178,10 @@ public class DcEventCenter {
DcHelper.getNotificationCenter(context).removeNotifications(accountId, event.getData1Int());
break;
case DcContext.DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE:
FetchForegroundService.stop(context);
break;
case DcContext.DC_EVENT_IMEX_PROGRESS:
sendToCurrentAccountObservers(event);
return 0;
@@ -75,11 +75,8 @@ public class DcHelper {
public static final String CONFIG_SHOW_EMAILS = "show_emails";
public static final String CONFIG_MEDIA_QUALITY = "media_quality";
public static final String CONFIG_WEBRTC_INSTANCE = "webrtc_instance";
public static final String CONFIG_SOCKS5_ENABLED = "socks5_enabled";
public static final String CONFIG_SOCKS5_HOST = "socks5_host";
public static final String CONFIG_SOCKS5_PORT = "socks5_port";
public static final String CONFIG_SOCKS5_USER = "socks5_user";
public static final String CONFIG_SOCKS5_PASSWORD = "socks5_password";
public static final String CONFIG_PROXY_ENABLED = "proxy_enabled";
public static final String CONFIG_PROXY_URL = "proxy_url";
public static final String CONFIG_VERIFIED_ONE_ON_ONE_CHATS = "verified_one_on_one_chats";
public static final String CONFIG_WEBXDC_REALTIME_ENABLED = "webxdc_realtime_enabled";
@@ -452,13 +449,14 @@ public class DcHelper {
* Gets a string you can show to the user with basic information about connectivity.
* @param context
* @param connectedString Usually "Connected", but when using this as the title in
* ConversationListActivity, we want to write "ArcaneChat" there instead.
* ConversationListActivity, we want to write "ArcaneChat"
* or the user's display name there instead.
* @return
*/
public static String getConnectivitySummary(Context context, int connectedString) {
public static String getConnectivitySummary(Context context, String connectedString) {
int connectivity = getContext(context).getConnectivity();
if (connectivity >= DcContext.DC_CONNECTIVITY_CONNECTED) {
return context.getString(connectedString);
return connectedString;
} else if (connectivity >= DcContext.DC_CONNECTIVITY_WORKING) {
return context.getString(R.string.connectivity_updating);
} else if (connectivity >= DcContext.DC_CONNECTIVITY_CONNECTING) {
@@ -638,14 +638,12 @@ public class AttachmentManager {
private class EditButtonListener implements View.OnClickListener {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT >= 19) {
Uri imgUri = getSlideUri();
if (imgUri != null) {
Intent intent = new Intent(context, ScribbleActivity.class);
intent.setData(getSlideUri());
intent.setData(imgUri);
((Activity) context).startActivityForResult(intent, ScribbleActivity.SCRIBBLE_REQUEST_CODE);
}
else {
Toast.makeText(context, "Image editing requires Android 4.4 KitKat or newer.", Toast.LENGTH_LONG).show();
}
}
}
@@ -8,6 +8,8 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.b44t.messenger.DcContext;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.util.Util;
@@ -16,6 +18,7 @@ public class MarkReadReceiver extends BroadcastReceiver {
public static final String CANCEL_ACTION = "org.thoughtcrime.securesms.notifications.CANCEL";
public static final String ACCOUNT_ID_EXTRA = "account_id";
public static final String CHAT_ID_EXTRA = "chat_id";
public static final String MSG_ID_EXTRA = "msg_id";
@Override
public void onReceive(final Context context, Intent intent) {
@@ -26,6 +29,7 @@ public class MarkReadReceiver extends BroadcastReceiver {
final int accountId = intent.getIntExtra(ACCOUNT_ID_EXTRA, 0);
final int chatId = intent.getIntExtra(CHAT_ID_EXTRA, DC_CHAT_NO_CHAT);
final int msgId = intent.getIntExtra(MSG_ID_EXTRA, 0);
if (accountId == 0 || chatId == DC_CHAT_NO_CHAT) {
return;
}
@@ -33,7 +37,9 @@ public class MarkReadReceiver extends BroadcastReceiver {
Util.runOnAnyBackgroundThread(() -> {
DcHelper.getNotificationCenter(context).removeNotifications(accountId, chatId);
if (markNoticed) {
DcHelper.getAccounts(context).getAccount(accountId).marknoticedChat(chatId);
DcContext dcContext = DcHelper.getAccounts(context).getAccount(accountId);
dcContext.marknoticedChat(chatId);
dcContext.markseenMsgs(new int[]{msgId});
}
});
}
@@ -128,22 +128,24 @@ public class NotificationCenter {
.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT | IntentUtils.FLAG_MUTABLE());
}
private PendingIntent getRemoteReplyIntent(ChatData chatData) {
private PendingIntent getRemoteReplyIntent(ChatData chatData, int msgId) {
Intent intent = new Intent(RemoteReplyReceiver.REPLY_ACTION);
intent.setClass(context, RemoteReplyReceiver.class);
intent.setData(Uri.parse("custom://"+chatData.accountId+"."+chatData.chatId));
intent.putExtra(RemoteReplyReceiver.ACCOUNT_ID_EXTRA, chatData.accountId);
intent.putExtra(RemoteReplyReceiver.CHAT_ID_EXTRA, chatData.chatId);
intent.putExtra(RemoteReplyReceiver.MSG_ID_EXTRA, msgId);
intent.setPackage(context.getPackageName());
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | IntentUtils.FLAG_MUTABLE());
}
private PendingIntent getMarkAsReadIntent(ChatData chatData, boolean markNoticed) {
private PendingIntent getMarkAsReadIntent(ChatData chatData, int msgId, boolean markNoticed) {
Intent intent = new Intent(markNoticed? MarkReadReceiver.MARK_NOTICED_ACTION : MarkReadReceiver.CANCEL_ACTION);
intent.setClass(context, MarkReadReceiver.class);
intent.setData(Uri.parse("custom://"+chatData.accountId+"."+chatData.chatId));
intent.putExtra(MarkReadReceiver.ACCOUNT_ID_EXTRA, chatData.accountId);
intent.putExtra(MarkReadReceiver.CHAT_ID_EXTRA, chatData.chatId);
intent.putExtra(MarkReadReceiver.MSG_ID_EXTRA, msgId);
intent.setPackage(context.getPackageName());
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | IntentUtils.FLAG_MUTABLE());
}
@@ -166,6 +168,7 @@ public class NotificationCenter {
public static final int ID_PERMANENT = 1;
public static final int ID_MSG_SUMMARY = 2;
public static final int ID_GENERIC = 3;
public static final int ID_FETCH = 4;
public static final int ID_MSG_OFFSET = 0; // msgId is added - as msgId start at 10, there are no conflicts with lower numbers
@@ -379,7 +382,7 @@ public class NotificationCenter {
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setOnlyAlertOnce(!signal)
.setContentText(line)
.setDeleteIntent(getMarkAsReadIntent(chatData, false))
.setDeleteIntent(getMarkAsReadIntent(chatData, msgId, false))
.setContentIntent(getOpenChatIntent(chatData));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -450,11 +453,11 @@ public class NotificationCenter {
// if privacy options are enabled, the buttons are not added.
if (privacy.isDisplayContact() && privacy.isDisplayMessage()) {
try {
PendingIntent inNotificationReplyIntent = getRemoteReplyIntent(chatData);
PendingIntent markReadIntent = getMarkAsReadIntent(chatData, true);
PendingIntent inNotificationReplyIntent = getRemoteReplyIntent(chatData, msgId);
PendingIntent markReadIntent = getMarkAsReadIntent(chatData, msgId, true);
NotificationCompat.Action markAsReadAction = new NotificationCompat.Action(R.drawable.check,
context.getString(R.string.notify_dismiss),
context.getString(R.string.mark_as_read_short),
markReadIntent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
@@ -567,7 +570,7 @@ public class NotificationCenter {
} catch (Exception e) { Log.w(TAG, e); }
}
public void removeAllNotifiations(int accountId) {
public void removeAllNotifications(int accountId) {
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
String tag = String.valueOf(accountId);
synchronized (inboxes) {
@@ -27,6 +27,7 @@ import android.os.Bundle;
import androidx.core.app.RemoteInput;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcMsg;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.util.Util;
@@ -41,6 +42,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
public static final String REPLY_ACTION = "org.thoughtcrime.securesms.notifications.WEAR_REPLY";
public static final String ACCOUNT_ID_EXTRA = "account_id";
public static final String CHAT_ID_EXTRA = "chat_id";
public static final String MSG_ID_EXTRA = "msg_id";
public static final String EXTRA_REMOTE_REPLY = "extra_remote_reply";
@SuppressLint("StaticFieldLeak")
@@ -50,6 +52,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
final int accountId = intent.getIntExtra(ACCOUNT_ID_EXTRA, 0);
final int chatId = intent.getIntExtra(CHAT_ID_EXTRA, DC_CHAT_NO_CHAT);
final int msgId = intent.getIntExtra(MSG_ID_EXTRA, 0);
if (remoteInput == null || chatId == DC_CHAT_NO_CHAT || accountId == 0) return;
@@ -58,10 +61,17 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
if (responseText != null) {
Util.runOnAnyBackgroundThread(() -> {
DcContext dcContext = DcHelper.getAccounts(context).getAccount(accountId);
dcContext.marknoticedChat(chatId);
dcContext.markseenMsgs(new int[]{msgId});
if (dcContext.getChat(chatId).isContactRequest()) {
dcContext.acceptChat(chatId);
}
dcContext.sendTextMsg(chatId, responseText.toString());
DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
msg.setText(responseText.toString());
msg.setQuote(dcContext.getMsg(msgId));
dcContext.sendMsg(chatId, msg);
DcHelper.getNotificationCenter(context).removeNotifications(accountId, chatId);
});
}
@@ -35,6 +35,7 @@ import com.b44t.messenger.rpc.RpcException;
import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
import org.thoughtcrime.securesms.ConversationActivity;
import org.thoughtcrime.securesms.LogViewActivity;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.RegistrationActivity;
import org.thoughtcrime.securesms.connect.DcEventCenter;
@@ -157,6 +158,11 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
return true;
}));
this.findPreference("proxy_settings_button").setOnPreferenceClickListener((preference) -> {
startActivity(new Intent(getActivity(), ProxySettingsActivity.class));
return true;
});
Preference passwordAndAccount = this.findPreference("password_account_settings_button");
passwordAndAccount.setOnPreferenceClickListener(((preference) -> {
boolean result = ScreenLockUtil.applyScreenLock(getActivity(), getString(R.string.pref_password_and_account_settings), getString(R.string.enter_system_secret_to_continue), REQUEST_CODE_CONFIRM_CREDENTIALS_ACCOUNT);
@@ -389,6 +395,7 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
}
)
.setNegativeButton(R.string.cancel, null)
.setNeutralButton(R.string.learn_more, (d, w) -> DcHelper.openHelp(getActivity(), "#importkey"))
.show();
})
.execute();
@@ -138,7 +138,6 @@ public abstract class ListSummaryPreferenceFragment extends CorrectedPreferenceF
protected void startImexInner(int accountId, int what, String imexPath, String pathAsDisplayedToUser)
{
DcContext dcContext = DcHelper.getAccounts(getActivity()).getAccount(accountId);
dcContext.assumeMultiDevice();
this.pathAsDisplayedToUser = pathAsDisplayedToUser;
progressWhat = what;
dcContext.imex(progressWhat, imexPath);
@@ -200,7 +199,7 @@ public abstract class ListSummaryPreferenceFragment extends CorrectedPreferenceF
imexProgress.put(event.getAccountId(), (int) progress);
int totalProgress = getTotalProgress();
int percent = totalProgress / (10 * imexAccounts.length);
String formattedPercent = String.format(" %d%%", percent);
String formattedPercent = percent > 0 ? String.format(" %d%%", percent) : "";
progressDialog.setMessage(getResources().getString(R.string.one_moment) + formattedPercent);
notifController.setProgress(1000L * imexAccounts.length, totalProgress, formattedPercent);
}
@@ -0,0 +1,176 @@
package org.thoughtcrime.securesms.proxy;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcLot;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.connect.DcHelper;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class ProxyListAdapter extends BaseAdapter {
private enum ProxyState {
CONNECTED,
CONNECTING,
NOT_CONNECTED,
}
@NonNull private final Context context;
@NonNull private final DcContext dcContext;
@NonNull private final List<String> proxies = new LinkedList<>();
@Nullable private ItemClickListener itemClickListener;
@Nullable private ProxyState proxyState;
@Nullable private String selectedProxy;
public ProxyListAdapter(@NonNull Context context)
{
this.context = context;
this.dcContext = DcHelper.getContext(context);
}
@Override
public int getCount() {
return proxies.size();
}
@Override
public Object getItem(int position) {
return proxies.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View v, final ViewGroup parent) {
if (v == null) {
v = LayoutInflater.from(context).inflate(R.layout.proxy_list_item, parent, false);
}
TextView host = v.findViewById(R.id.host);
TextView protocol = v.findViewById(R.id.protocol);
ImageView checkmark = v.findViewById(R.id.checkmark);
TextView status = v.findViewById(R.id.status);
final String proxyUrl = (String)getItem(position);
final DcLot qrParsed = dcContext.checkQr(proxyUrl);
if (qrParsed.getState() == DcContext.DC_QR_PROXY) {
host.setText(qrParsed.getText1());
protocol.setText(proxyUrl.split(":", 2)[0]);
} else {
host.setText(proxyUrl);
protocol.setText(R.string.unknown);
}
if (proxyUrl.equals(selectedProxy)) {
checkmark.setVisibility(View.VISIBLE);
if(dcContext.isConfigured() == 1 && dcContext.getConfigInt(CONFIG_PROXY_ENABLED) == 1) {
status.setVisibility(View.VISIBLE);
status.setText(getConnectivityString());
} else {
status.setVisibility(View.GONE);
}
} else {
checkmark.setVisibility(View.GONE);
status.setVisibility(View.GONE);
}
v.setOnClickListener(view -> {
if (itemClickListener != null) {
itemClickListener.onItemClick(proxyUrl);
}
});
v.findViewById(R.id.share).setOnClickListener(view -> {
if (itemClickListener != null) {
itemClickListener.onItemShare(proxyUrl);
}
});
v.findViewById(R.id.delete).setOnClickListener(view -> {
if (itemClickListener != null) {
itemClickListener.onItemDelete(proxyUrl);
}
});
return v;
}
public void changeData(String newProxies) {
proxies.clear();
if (!TextUtils.isEmpty(newProxies)) {
Collections.addAll(proxies, newProxies.split("\n"));
}
selectedProxy = proxies.isEmpty()? null : proxies.get(0);
proxyState = null; // to force notifyDataSetChanged() in refreshConnectivity()
refreshConnectivity();
}
public void setSelectedProxy(String proxyUrl) {
selectedProxy = proxyUrl;
notifyDataSetChanged();
}
private String getConnectivityString() {
if (proxyState == ProxyState.CONNECTED) {
return context.getString(R.string.connectivity_connected);
}
if (proxyState == ProxyState.CONNECTING) {
return context.getString(R.string.connectivity_connecting);
}
return context.getString(R.string.connectivity_not_connected);
}
public void refreshConnectivity() {
if (DcHelper.getInt(context, CONFIG_PROXY_ENABLED) != 1) {
if (proxyState != ProxyState.NOT_CONNECTED) {
proxyState = ProxyState.NOT_CONNECTED;
notifyDataSetChanged();
}
return;
}
int connectivity = dcContext.getConnectivity();
if (connectivity >= DcContext.DC_CONNECTIVITY_WORKING) {
if (proxyState != ProxyState.CONNECTED) {
proxyState = ProxyState.CONNECTED;
notifyDataSetChanged();
}
} else if (connectivity >= DcContext.DC_CONNECTIVITY_CONNECTING) {
if (proxyState != ProxyState.CONNECTING) {
proxyState = ProxyState.CONNECTING;
notifyDataSetChanged();
}
} else if (proxyState != ProxyState.NOT_CONNECTED) {
proxyState = ProxyState.NOT_CONNECTED;
notifyDataSetChanged();
}
}
public void setItemClickListener(@Nullable ItemClickListener listener) {
itemClickListener = listener;
}
public interface ItemClickListener {
void onItemClick(String proxyUrl);
void onItemShare(String proxyUrl);
void onItemDelete(String proxyUrl);
}
}
@@ -0,0 +1,220 @@
package org.thoughtcrime.securesms.proxy;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_ENABLED;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_PROXY_URL;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.SwitchCompat;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.DcLot;
import org.thoughtcrime.securesms.BaseActionBarActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.Util;
import java.util.LinkedList;
public class ProxySettingsActivity extends BaseActionBarActivity
implements ProxyListAdapter.ItemClickListener, DcEventCenter.DcEventDelegate {
private final DynamicTheme dynamicTheme = new DynamicTheme();
private SwitchCompat proxySwitch;
private ProxyListAdapter adapter;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
dynamicTheme.onCreate(this);
setContentView(R.layout.proxy_settings_activity);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle(R.string.proxy_settings);
actionBar.setDisplayHomeAsUpEnabled(true);
}
adapter = new ProxyListAdapter(this);
adapter.setItemClickListener(this);
proxySwitch = findViewById(R.id.proxy_switch);
proxySwitch.setChecked(DcHelper.getInt(this, CONFIG_PROXY_ENABLED) == 1);
proxySwitch.setOnClickListener(l -> {
if (proxySwitch.isChecked() && adapter.getCount() == 0) {
showAddProxyDialog();
} else {
DcHelper.set(this, CONFIG_PROXY_ENABLED, proxySwitch.isChecked()? "1" : "0");
DcHelper.getContext(this).restartIo();
}
});
ListView proxyList = findViewById(R.id.proxy_list);
proxyList.setAdapter(adapter);
proxyList.addHeaderView(View.inflate(this, R.layout.proxy_list_header, null), null, false);
View footer = View.inflate(this, R.layout.proxy_list_footer, null);
footer.setOnClickListener(l -> showAddProxyDialog());
proxyList.addFooterView(footer);
adapter.changeData(DcHelper.get(this, CONFIG_PROXY_URL));
DcHelper.getEventCenter(this).addObserver(DcContext.DC_EVENT_CONNECTIVITY_CHANGED, this);
handleOpenProxyUrl();
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleOpenProxyUrl();
}
@Override
public void onResume() {
super.onResume();
dynamicTheme.onResume(this);
}
@Override
public void onDestroy() {
super.onDestroy();
DcHelper.getEventCenter(this).removeObservers(this);
}
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onItemClick(String proxyUrl) {
if (DcHelper.getContext(this).setConfigFromQr(proxyUrl)) {
DcHelper.getContext(this).restartIo();
adapter.setSelectedProxy(proxyUrl);
proxySwitch.setChecked(DcHelper.getInt(this, CONFIG_PROXY_ENABLED) == 1);
} else {
Toast.makeText(this, R.string.proxy_invalid, Toast.LENGTH_LONG).show();
}
}
@Override
public void onItemShare(String proxyUrl) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, proxyUrl);
startActivity(Intent.createChooser(intent, getString(R.string.chat_share_with_title)));
}
@Override
public void onItemDelete(String proxyUrl) {
String host = DcHelper.getContext(this).checkQr(proxyUrl).getText1();
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle(R.string.proxy_delete)
.setMessage(getString(R.string.proxy_delete_explain, host))
.setPositiveButton(R.string.delete, (dlg, btn) -> deleteProxy(proxyUrl))
.setNegativeButton(android.R.string.cancel, null)
.show();
Util.redPositiveButton(dialog);
}
private void deleteProxy(String proxyUrl) {
final LinkedList<String> proxies = new LinkedList<>();
for (String proxy: DcHelper.get(this, CONFIG_PROXY_URL).split("\n")) {
if (!proxy.equals(proxyUrl)) {
proxies.add(proxy);
}
}
if (proxies.isEmpty()) {
DcHelper.set(this, CONFIG_PROXY_ENABLED, "0");
proxySwitch.setChecked(false);
}
String proxyUrls = String.join("\n", proxies);
DcHelper.set(this, CONFIG_PROXY_URL, proxyUrls);
DcHelper.getContext(this).restartIo();
adapter.changeData(proxyUrls);
}
private void showAddProxyDialog() {
View view = View.inflate(this, R.layout.single_line_input, null);
EditText inputField = view.findViewById(R.id.input_field);
inputField.setHint(R.string.proxy_add_url_hint);
new AlertDialog.Builder(this)
.setTitle(R.string.proxy_add)
.setMessage(R.string.proxy_add_explain)
.setView(view)
.setPositiveButton(R.string.proxy_use_proxy, (dialog, whichButton) -> {
String newProxy = inputField.getText().toString().trim();
DcContext dcContext = DcHelper.getContext(this);
final DcLot qrParsed = dcContext.checkQr(newProxy);
if (qrParsed.getState() == DcContext.DC_QR_PROXY) {
dcContext.setConfigFromQr(newProxy);
DcHelper.getContext(this).restartIo();
adapter.changeData(DcHelper.get(this, CONFIG_PROXY_URL));
} else {
Toast.makeText(this, R.string.proxy_invalid, Toast.LENGTH_LONG).show();
}
proxySwitch.setChecked(DcHelper.getInt(this, CONFIG_PROXY_ENABLED) == 1);
})
.setNegativeButton(android.R.string.cancel, (dialog, whichButton) -> {
if (proxySwitch.isChecked() && adapter.getCount() == 0) {
// user enabled switch without having proxies yet, revert
proxySwitch.setChecked(false);
}
})
.setCancelable(false)
.show();
}
private void handleOpenProxyUrl() {
if (getIntent() != null && Intent.ACTION_VIEW.equals(getIntent().getAction())) {
Uri uri = getIntent().getData();
if (uri == null) {
return;
}
DcContext dcContext = DcHelper.getContext(this);
final DcLot qrParsed = dcContext.checkQr(uri.toString());
if (qrParsed.getState() == DcContext.DC_QR_PROXY) {
new AlertDialog.Builder(this)
.setTitle(R.string.proxy_use_proxy)
.setMessage(getString(R.string.proxy_use_proxy_confirm, qrParsed.getText1()))
.setPositiveButton(R.string.proxy_use_proxy, (dlg, btn) -> {
dcContext.setConfigFromQr(uri.toString());
dcContext.restartIo();
adapter.changeData(DcHelper.get(this, CONFIG_PROXY_URL));
proxySwitch.setChecked(DcHelper.getInt(this, CONFIG_PROXY_ENABLED) == 1);
})
.setNegativeButton(R.string.cancel, null)
.setCancelable(false)
.show();
} else {
Toast.makeText(this, R.string.proxy_invalid, Toast.LENGTH_LONG).show();
}
}
}
@Override
public void handleEvent(@NonNull DcEvent event) {
if (event.getId() == DcContext.DC_EVENT_CONNECTIVITY_CHANGED) {
adapter.refreshConnectivity();
}
}
}
@@ -64,7 +64,6 @@ public class BackupProviderFragment extends Fragment implements DcEventCenter.Dc
progressBar.setIndeterminate(true);
dcContext = DcHelper.getContext(getActivity());
dcContext.assumeMultiDevice();
DcHelper.getEventCenter(getActivity()).addObserver(DcContext.DC_EVENT_IMEX_PROGRESS, this);
prepareThread = new Thread(() -> {
@@ -174,17 +173,8 @@ public class BackupProviderFragment extends Fragment implements DcEventCenter.Dc
if (permille == 0) {
getTransferActivity().setTransferError("Sending Error");
hideQrCode = true;
} else if(permille <= 350) {
statusLineText = getString(R.string.preparing_account);
} else if(permille <= 400) {
statusLine.setVisibility(View.GONE);
progressBar.setVisibility(View.GONE);
statusLineText = getString(R.string.waiting_for_receiver);
} else if(permille <= 450) {
statusLineText = getString(R.string.receiver_connected);
hideQrCode = true;
} else if (permille < 1000) {
percent = (permille-450)/5;
percent = permille/10;
percentMax = 100;
statusLineText = getString(R.string.transferring);
hideQrCode = true;
@@ -81,20 +81,14 @@ public class BackupReceiverFragment extends Fragment implements DcEventCenter.Dc
Log.i(TAG,"DC_EVENT_IMEX_PROGRESS, " + permille);
if (permille == 0) {
getTransferActivity().setTransferError("Receiving Error");
} else if (permille <= 100) {
statusLineText = getString(R.string.preparing_account);
hideSameNetworkHint = true;
} else if (permille <= 950 ) {
percent = ((permille-100)*100)/850;
} else if (permille < 1000) {
percent = permille/10;
percentMax = 100;
statusLineText = getString(R.string.transferring) + String.format(Util.getLocale(), " %d%%", percent);
hideSameNetworkHint = true;
} else if (permille < 1000) {
statusLineText = "Finishing..."; // range not used, should not happen
} else if (permille == 1000) {
getTransferActivity().setTransferState(BackupTransferActivity.TransferState.TRANSFER_SUCCESS);
getTransferActivity().doFinish();
dcContext.assumeMultiDevice();
return;
}
@@ -89,6 +89,17 @@ public class QrCodeHandler {
BackupTransferActivity.appendSSID(activity, alertDialog.findViewById(android.R.id.message));
return;
case DcContext.DC_QR_PROXY:
builder.setTitle(R.string.proxy_use_proxy);
builder.setMessage(activity.getString(R.string.proxy_use_proxy_confirm, qrParsed.getText1()));
builder.setPositiveButton(R.string.proxy_use_proxy, (dlg, btn) -> {
dcContext.setConfigFromQr(rawString);
dcContext.restartIo();
});
builder.setNegativeButton(R.string.cancel, null);
builder.setCancelable(false);
break;
case DcContext.DC_QR_WEBRTC:
builder.setMessage(activity.getString(R.string.videochat_instance_from_qr, qrParsed.getText1()));
builder.setPositiveButton(R.string.ok, (dialog, which) -> {
@@ -0,0 +1,74 @@
package org.thoughtcrime.securesms.service;
import android.app.Notification;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.notifications.FcmReceiveService;
import org.thoughtcrime.securesms.notifications.NotificationCenter;
import org.thoughtcrime.securesms.util.Util;
public final class FetchForegroundService extends Service {
private static final String TAG = FcmReceiveService.class.getSimpleName();
private static final Object SERVICE_LOCK = new Object();
private static Intent service;
public static void start(Context context) {
GenericForegroundService.createFgNotificationChannel(context);
synchronized (SERVICE_LOCK) {
if (service == null) {
service = new Intent(context, FetchForegroundService.class);
ContextCompat.startForegroundService(context, service);
}
}
}
public static void stop(Context context) {
synchronized (SERVICE_LOCK) {
if (service != null) {
context.stopService(service);
service = null;
}
}
}
@Override
public void onCreate() {
Log.i(TAG, "Creating fetch service");
super.onCreate();
Notification notification = new NotificationCompat.Builder(this, NotificationCenter.CH_GENERIC)
.setContentTitle(getString(R.string.connectivity_updating))
.setSmallIcon(R.drawable.notification_permanent)
.build();
startForeground(NotificationCenter.ID_FETCH, notification);
Util.runOnAnyBackgroundThread(() -> {
Log.i(TAG, "Starting fetch");
if (!ApplicationContext.dcAccounts.backgroundFetch(300)) { // as startForeground() was called, there is time
FetchForegroundService.stop(this);
} // else we stop FetchForegroundService on DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE
});
}
@Override
public void onDestroy() {
stopForeground(true);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
@@ -185,7 +185,7 @@ public final class GenericForegroundService extends Service {
}
@TargetApi(Build.VERSION_CODES.O)
static private void createFgNotificationChannel(Context context) {
static public void createFgNotificationChannel(Context context) {
if(!CHANNEL_CREATED.get() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CHANNEL_CREATED.set(true);
NotificationChannel channel = new NotificationChannel(NotificationCenter.CH_GENERIC,
@@ -81,7 +81,14 @@ public class LongClickCopySpan extends ClickableSpan {
QrCodeHandler qrCodeHandler = new QrCodeHandler((Activity) widget.getContext());
qrCodeHandler.handleQrData(url);
} else {
IntentUtils.showBrowserIntent(widget.getContext(), url);
Activity activity = (Activity) widget.getContext();
DcContext dcContext = DcHelper.getContext(activity);
if (dcContext.checkQr(url).getState() == DcContext.DC_QR_PROXY) {
QrCodeHandler qrCodeHandler = new QrCodeHandler(activity);
qrCodeHandler.handleQrData(url);
} else {
IntentUtils.showBrowserIntent(widget.getContext(), url);
}
}
}
@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="228"
android:viewportHeight="280"
android:tint="#FFFFFF"
android:alpha="0.5">
<group android:scaleX="0.7491429"
android:scaleY="0.92"
android:translateX="28.597713"
android:translateY="11.2">>
<path android:fillColor="#ffffff" android:pathData="m10.03,234.14c0.3,-0.01 0.6,-0.02 0.9,-0.04 -0.07,-0.49 -0.14,-0.97 -0.2,-1.46 -0.15,-1.34 -0.26,-2.69 -0.25,-4.04 -0.02,-0.86 -0.05,-1.71 -0.07,-2.57 -0.09,-0.06 -0.18,-0.13 -0.27,-0.19 -0.02,-0.02 -0.04,-0.03 -0.07,-0.05zM44.87,232.95c11.71,-8.35 26.86,-14.79 46.21,-15.9 0,0 39.93,-0.27 47.91,-3.53 7.98,-3.26 68.68,-14.69 82.94,-98.43 14.26,-83.74 -1.06,-115.09 -1.06,-115.09 0,0 -21.14,55.68 -81.02,59.81 0,0 -14.5,1.03 -38.82,1.42 -24.32,0.39 -75.77,20.65 -90.55,85.62l-0.22,43.44c2.5,4.22 5.49,8.12 8.91,11.66 3.99,4.11 8.11,8.12 12.79,11.45 2.26,1.65 4.65,3.2 6.51,5.33 1.94,2.34 3.33,5 4.2,7.93 0.71,2.1 1.45,4.2 2.2,6.28z"/>
<path android:fillColor="#ffffff" android:pathData="m217.97,45.86c-0.3,0.01 -0.6,0.02 -0.9,0.04 0.07,0.49 0.14,0.97 0.2,1.46 0.15,1.34 0.26,2.69 0.25,4.04 0.02,0.86 0.05,1.71 0.07,2.57 0.09,0.06 0.18,0.13 0.27,0.19 0.02,0.02 0.04,0.03 0.07,0.05zM183.13,47.05c-11.71,8.35 -26.86,14.79 -46.21,15.9 0,0 -39.93,0.27 -47.91,3.53 -7.98,3.26 -68.68,14.69 -82.94,98.43 -14.26,83.74 1.06,115.09 1.06,115.09 0,0 21.14,-55.68 81.02,-59.81 0,0 14.5,-1.03 38.82,-1.42 24.32,-0.39 75.77,-20.65 90.55,-85.62l0.22,-43.44c-2.5,-4.22 -5.49,-8.12 -8.91,-11.66 -3.99,-4.11 -8.11,-8.12 -12.79,-11.45 -2.26,-1.65 -4.65,-3.2 -6.51,-5.33 -1.94,-2.34 -3.33,-5 -4.2,-7.93 -0.71,-2.1 -1.45,-4.2 -2.2,-6.28z"/>
</group>
</vector>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 432 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 B

After

Width:  |  Height:  |  Size: 287 B

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<stroke android:width="2dp" android:color="@color/gray50"/>
<stroke android:width="1dp" android:color="@color/gray50"/>
<corners android:radius="8dp"/>
</shape>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 552 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 822 B

@@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,5V4c0,-0.55 -0.45,-1 -1,-1h-2c-0.55,0 -1,0.45 -1,1v1h-1v4c0,0.55 0.45,1 1,1h1v7c0,1.1 -0.9,2 -2,2s-2,-0.9 -2,-2V7c0,-2.21 -1.79,-4 -4,-4S5,4.79 5,7v7H4c-0.55,0 -1,0.45 -1,1v4h1v1c0,0.55 0.45,1 1,1h2c0.55,0 1,-0.45 1,-1v-1h1v-4c0,-0.55 -0.45,-1 -1,-1H7V7c0,-1.1 0.9,-2 2,-2s2,0.9 2,2v10c0,2.21 1.79,4 4,4s4,-1.79 4,-4v-7h1c0.55,0 1,-0.45 1,-1V5H20z"/>
</vector>
+1 -2
View File
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/def_primary_lite"/>
<solid android:color="?attr/fab_color"/>
<corners android:radius="8dp"/>
</shape>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/blue_primary_lite"/>
<corners android:radius="8dp"/>
</shape>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/gray_primary_lite"/>
<corners android:radius="8dp"/>
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/green_primary_lite"/>
<corners android:radius="8dp"/>
</shape>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/pink_primary_lite"/>
<corners android:radius="8dp"/>
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/purple_primary_lite"/>
<corners android:radius="8dp"/>
</shape>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<solid android:color="@color/red_primary_lite"/>
<corners android:radius="8dp"/>
</shape>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- TODO - Consolidate using attr if we move away from API 19 -->
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<stroke android:width="2px" android:color="@color/def_primary"/>
<stroke android:width="2px" android:color="?attr/fab_color"/>
<corners android:radius="8dp"/>
</shape>
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
android:shape="rectangle">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/blue_primary" />
<solid android:color="@color/delete_account_item_bg" />
<corners android:radius="8dp" />
</shape>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 630 KiB

+1 -2
View File
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/def_primary" />
<solid android:color="?attr/fab_color" />
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/gray_primary" />
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/green_primary" />
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/pink_primary" />
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/purple_primary" />
</shape>
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- read issue: https://github.com/deltachat/deltachat-android/issues/480 before introducing an attr here. -->
<solid android:color="@color/red_primary" />
</shape>
@@ -126,7 +126,7 @@
android:layout_height="40dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:background="?attr/send_button_bg"
android:background="@drawable/send_button_bg"
android:layout_gravity="center_vertical">
<ImageButton
@@ -1,97 +1,112 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@id/container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:contentInsetStart="14dp"
app:contentInsetLeft="14dp"
android:elevation="4dp"
android:theme="?attr/actionBarStyle">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:contentInsetStart="0dp"
app:contentInsetLeft="0dp"
android:elevation="4dp"
android:theme="?attr/actionBarStyle">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/self_avatar_container"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="45dp">
<org.thoughtcrime.securesms.components.AvatarView
android:id="@+id/self_avatar"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:clickable="true"
app:inverted="true"
android:contentDescription="@string/pref_profile_info_headline" />
<ImageView android:id="@+id/unread_indicator"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="16dp"
android:contentDescription="@null"
android:visibility="gone"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/avatar_and_title"
android:orientation="horizontal"
android:layout_width="0dp"
android:layout_weight="1"
android:paddingStart="14dp"
android:layout_height="match_parent"
android:layout_marginEnd="10dp">
<org.thoughtcrime.securesms.components.emoji.EmojiTextView style="@style/TextSecure.TitleTextStyle"
android:id="@+id/toolbar_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:paddingRight="10dp"
android:ellipsize="end"
android:maxLines="1"/>
<RelativeLayout
android:id="@+id/self_avatar_container"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="45dp">
<org.thoughtcrime.securesms.components.AvatarView
android:id="@+id/self_avatar"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginRight="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:clickable="true"
app:inverted="true"
android:contentDescription="@string/pref_profile_info_headline" />
<ImageView
android:id="@+id/unread_indicator"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginBottom="16dp"
android:contentDescription="@null"
android:visibility="gone"
/>
</RelativeLayout>
<ImageView android:id="@+id/search_action"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_search_white_24dp"
android:paddingRight="12dp"
android:paddingEnd="12dp"
android:paddingLeft="12dp"
android:paddingStart="12dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_gravity="center_vertical"
android:contentDescription="@string/search"/>
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
<FrameLayout android:id="@+id/fragment_container"
android:layout_below="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<org.thoughtcrime.securesms.components.SearchToolbar
android:id="@+id/search_toolbar"
android:layout_width="match_parent"
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
style="@style/TextSecure.TitleTextStyle"
android:id="@+id/toolbar_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="4dp"
android:visibility="invisible"
tools:visibility="visible"/>
android:text="@string/app_name"
android:layout_weight="1"
android:layout_gravity="center_vertical"
android:paddingRight="10dp"
android:ellipsize="end"
android:maxLines="1"/>
</LinearLayout>
<ImageView
android:id="@+id/search_action"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@drawable/ic_search_white_24dp"
android:paddingRight="12dp"
android:paddingEnd="12dp"
android:paddingLeft="12dp"
android:paddingStart="12dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:layout_gravity="center_vertical"
android:contentDescription="@string/search"/>
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_below="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<org.thoughtcrime.securesms.components.SearchToolbar
android:id="@+id/search_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:elevation="4dp"
android:visibility="invisible"
tools:visibility="visible"/>
</RelativeLayout>
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:text="@string/delete_account_ask" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:background="@drawable/delete_account_item_background">
<org.thoughtcrime.securesms.components.AvatarView
android:id="@+id/avatar"
android:layout_width="50dp"
android:layout_height="50dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginLeft="16dp"
android:layout_marginStart="16dp"
android:paddingRight="16dp"
android:paddingEnd="16dp"
android:orientation="vertical">
<org.thoughtcrime.securesms.components.emoji.EmojiTextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:fontFamily="sans-serif"
android:textSize="16sp"
tools:text="Frieeeeeeedrich Nieeeeeeeeeetzsche" />
<TextView
android:id="@+id/address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textDirection="ltr"
android:singleLine="true"
android:ellipsize="marquee"
android:textSize="14sp"
android:fontFamily="sans-serif-light"
tools:text="me@example.com" />
<TextView
android:id="@+id/size_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="12sp"
android:fontFamily="sans-serif-light"
tools:text="150 MB" />
</LinearLayout>
</LinearLayout>
<TextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:text="@string/delete_account_explain_with_name"/>
</LinearLayout>
</ScrollView>
@@ -7,13 +7,14 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:layout_marginTop="20dp"
android:orientation="vertical">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:orientation="horizontal">
<ImageView android:id="@+id/avatar"
@@ -42,8 +43,6 @@
android:id="@+id/information_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
android:gravity="start"
android:text="@string/set_name_and_avatar_explain"
@@ -54,11 +53,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="start"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="16dp"
android:text=""
android:textColor="@color/def_accent"
android:textColor="?attr/colorAccent"
android:textSize="16sp"/>
<Button
@@ -68,20 +65,38 @@
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_marginTop="20dp"
android:text="@string/instant_onboarding_create"/>
<Button
style="@style/ButtonSecondary"
android:id="@+id/other_options_button"
android:id="@+id/use_other_server"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_margin="16dp"
android:text="@string/instant_onboarding_show_more_instances" />
android:layout_marginTop="16dp"
android:text="@string/instant_onboarding_other_server"/>
<Button
style="@style/ButtonSecondary"
android:id="@+id/login_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginTop="16dp"
android:text="@string/manual_account_setup_option"/>
<Button
style="@style/ButtonSecondary"
android:id="@+id/scan_qr_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:layout_marginTop="16dp"
android:text="@string/scan_invitation_code"/>
</LinearLayout>
+24
View File
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:background="?attr/conversation_list_item_background"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="@string/proxy_add"
android:drawablePadding="5dp"
android:singleLine="true"
android:ellipsize="marquee"
android:fontFamily="sans-serif"
android:textSize="16sp"
/>
</LinearLayout>
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:text="@string/proxy_list_header"
android:textColor="?attr/colorAccent"
android:textSize="16sp"
android:textStyle="bold"
android:typeface="sans"
/>
+106
View File
@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:background="?attr/conversation_list_item_background"
android:paddingEnd="6dp"
>
<TextView
android:id="@+id/host"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_toStartOf="@id/share"
android:paddingStart="16dp"
android:paddingTop="10dp"
android:drawablePadding="5dp"
android:singleLine="true"
android:ellipsize="marquee"
android:fontFamily="sans-serif"
android:textSize="16sp"
tools:text="127.0.0.1:1080"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_below="@+id/host"
android:layout_toStartOf="@id/share"
android:layout_marginTop="5dp"
android:paddingStart="16dp"
android:paddingBottom="10dp"
android:gravity="center_vertical"
>
<ImageView
android:id="@+id/checkmark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:layout_marginEnd="5dp"
android:contentDescription="@null"
android:src="@drawable/ic_delivery_status_sent"
app:tint="?attr/conversation_list_item_date_color"
/>
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="5dp"
android:singleLine="true"
android:ellipsize="marquee"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textSize="14sp"
android:fontFamily="sans-serif-light"
tools:text="@string/connectivity_connected"
/>
<TextView
android:id="@+id/protocol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="1dp"
android:paddingBottom="1dp"
android:textAllCaps="true"
android:textColor="?attr/conversation_list_item_date_color"
android:background="@drawable/archived_indicator_background"
style="@style/Signal.Text.Caption"
tools:text="socks5"
/>
</LinearLayout>
<ImageButton
android:id="@+id/share"
android:layout_width="50dp"
android:layout_height="60dp"
android:layout_toStartOf="@id/delete"
android:layout_centerVertical="true"
android:contentDescription="@string/menu_share"
android:background="@drawable/touch_highlight_background"
android:src="@drawable/ic_share_white_24dp"
app:tint="?attr/conversation_list_item_date_color"
/>
<ImageButton
android:id="@+id/delete"
android:layout_width="50dp"
android:layout_height="60dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:contentDescription="@string/delete"
android:background="@drawable/touch_highlight_background"
android:src="@drawable/ic_delete_white_24dp"
app:tint="?attr/conversation_list_item_date_color"
/>
</RelativeLayout>
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".proxy.ProxySettingsActivity">
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/proxy_switch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/proxy_use_proxy" />
<ListView
android:id="@+id/proxy_list"
android:paddingTop="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
+14 -107
View File
@@ -123,7 +123,7 @@
android:visibility="gone"
tools:visibility="visible"
app:constraint_referenced_ids="inbox, imap_login, imap_server, imap_port, imap_security_label, imap_security, outbox_view_spacer_top,
outbox, smtp_login, smtp_password, smtp_server, smtp_port, smtp_security_label, smtp_security, auth_method_label, auth_method, cert_check_label, cert_check, view_log_button, socks5_switch" />
outbox, smtp_login, smtp_password, smtp_server, smtp_port, smtp_security_label, smtp_security, auth_method_label, auth_method, cert_check_label, cert_check, view_log_button, proxy_settings" />
<ImageView
android:id="@+id/advanced_icon"
@@ -151,6 +151,17 @@
app:layout_constraintStart_toEndOf="@id/advanced_icon"
app:layout_constraintTop_toBottomOf="@id/no_servers_hint" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/proxy_settings"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:text="@string/proxy_use_proxy"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/advanced_text" />
<TextView
android:id="@+id/inbox"
android:layout_width="wrap_content"
@@ -159,7 +170,7 @@
android:layout_marginTop="8dp"
android:text="@string/login_inbox"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/advanced_text" />
app:layout_constraintTop_toBottomOf="@id/proxy_settings" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/imap_login"
@@ -378,110 +389,6 @@
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/cert_check_label" />
<androidx.appcompat.widget.SwitchCompat
android:id="@+id/socks5_switch"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingTop="16dp"
android:paddingBottom="10dp"
android:text="@string/login_socks5_use_socks5"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/cert_check" />
<androidx.constraintlayout.widget.Group
android:id="@+id/socks5_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
tools:visibility="gone"
app:constraint_referenced_ids="socks5_experimental_warning, socks5_host, socks5_port, socks5_user, socks5_password" />
<TextView
android:id="@+id/socks5_experimental_warning"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="left"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="1dp"
android:paddingBottom="10dp"
android:text="@string/login_socks5_experimental_warning"
android:textColor="@color/gray50"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/socks5_switch" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/socks5_host"
android:layout_width="0dp"
android:layout_height="58dp"
app:errorEnabled="true"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/socks5_experimental_warning">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/socks5_host_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_socks5_host"
android:inputType="textUri|textNoSuggestions" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/socks5_port"
android:layout_width="0dp"
android:layout_height="58dp"
app:errorEnabled="true"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/socks5_host">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/socks5_port_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_socks5_port"
android:inputType="number" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/socks5_user"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/socks5_port">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/socks5_user_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="@string/login_socks5_user" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/socks5_password"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/socks5_user"
app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/socks5_password_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_socks5_password"
android:inputType="textPassword" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/view_log_button"
android:layout_width="0dp"
@@ -495,7 +402,7 @@
android:paddingBottom="32dp"
app:layout_constraintEnd_toEndOf="@id/guideline_root_end"
app:layout_constraintStart_toStartOf="@id/guideline_root_start"
app:layout_constraintTop_toBottomOf="@id/socks5_password" />
app:layout_constraintTop_toBottomOf="@id/cert_check" />
<TextView
android:id="@+id/sub_header"
@@ -13,7 +13,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="7dp"
android:background="?attr/send_button_bg"
android:background="@drawable/send_button_bg"
android:contentDescription="@string/menu_send"
tools:src="@drawable/ic_send_push_white_24dp" />
+11 -2
View File
@@ -53,14 +53,23 @@
<Button
style="@style/ButtonSecondary"
android:id="@+id/signin_button"
android:id="@+id/add_as_second_device_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:layout_marginBottom="16dp"
android:text="@string/onboarding_alternative_logins"/>
android:text="@string/multidevice_receiver_title"/>
<Button
style="@style/ButtonSecondary"
android:id="@+id/backup_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:layout_marginBottom="16dp"
android:text="@string/import_backup_title"/>
</LinearLayout>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:title="@string/proxy_settings"
android:id="@+id/menu_proxy_settings"
app:showAsAction="never"/>
<item android:title="@string/pref_view_log"
android:id="@+id/menu_view_log"
app:showAsAction="never"/>
</menu>
+8 -1
View File
@@ -5,7 +5,7 @@
<item android:title="@string/qr_code"
android:id="@+id/menu_qr"
android:icon="@drawable/baseline_qr_code_24"
app:showAsAction="always"/>
app:showAsAction="ifRoom"/>
<item android:title="@string/invite_friends"
android:id="@+id/menu_invite_friends" />
@@ -18,6 +18,13 @@
android:visible="false"
/>
<item android:title="@string/proxy_settings"
android:id="@+id/menu_proxy_settings"
android:icon="@drawable/baseline_proxy_24"
app:showAsAction="always"
android:visible="false"
/>
<item android:title="@string/menu_settings"
android:id="@+id/menu_settings" />
+6 -3
View File
@@ -321,6 +321,7 @@
<string name="videochat_tap_to_open">Докоснете, за да отворите</string>
<string name="videochat_instance">Сървър за видеочат</string>
<string name="videochat_instance_placeholder">Вашият сървър за видеочат</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Примери: https://meet.jit.si/$ROOM или basicwebrtc:https://вашият-сървър</string>
<string name="videochat_instance_explain_2">Ако настройката е разрешена, можете да започвате видеочат от всеки чат. Изисква съвместимо приложение или браузър и от двете страни.</string>
<string name="videochat_instance_from_qr">Да се използва ли \"%1$s\" за поканване на други към видеочатове?\n\nСлед като тази настройка бъде зададена, ще можете да започвате видеочат от всеки чат. Тя ще замени предишната настройка за видеочатове, ако има такава.</string>
@@ -496,7 +497,7 @@
<string name="multidevice_title">Добавяне на допълнително устройство</string>
<string name="multidevice_same_network_hint">Уверете се, че и двете устройства са свързани към една и съща Wi-Fi или друга мрежа</string>
<string name="multidevice_this_creates_a_qr_code">Ще бъде създаден QR код, чрез сканиране на който другото устройство може да копира акаунта.</string>
<string name="multidevice_install_dc_on_other_device">Инсталирайте ArcaneChat на другото Ви устройство (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">Инсталирайте ArcaneChat на другото Ви устройство (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">Стартирайте ArcaneChat, докоснете \"Добавяне като допълнително устройство\" и сканирайте кода, показан тук</string>
<!-- Shown inside a "QR code card" with very limited space; please formulate the text as short as possible therefore. The placeholder will be replaced by name and/or address eg. "Scan to set up second device for Alice (alice@example.org)" -->
@@ -591,13 +592,14 @@
<string name="login_smtp_port">SMTP порт</string>
<string name="login_smtp_security">Сигурност на SMTP връзката</string>
<string name="login_auth_method">Метод за оторизация</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Да се използва SOCKS5</string>
<string name="login_socks5_host">SOCKS5 хост</string>
<string name="login_socks5_port">SOCKS5 порт</string>
<string name="login_socks5_user">SOCKS5 потребител</string>
<string name="login_socks5_password">SOCKS5 парола</string>
<string name="login_info_oauth2_title">Да се продължи ли с опростената настройка?</string>
<string name="login_info_oauth2_text">Въведеният адрес за електронна поща поддържа опростена настройка (OAuth 2.0).\n\nНа следващата стъпка, моля позволете на ArcaneChat да действа в качеството си на избраното от Вас приложение за чат върху електронна поща.\n\nArcaneChat няма сървъри, Вашите данни стоят на Вашето устройство.</string>
<string name="login_certificate_checks">Проверки на сертификатите</string>
@@ -907,7 +909,7 @@
<string name="devicemsg_storage_exceeding">⚠️ Мястото за съхранение, предоставено от Вашия доставчик, скоро ще бъде изчерпано:%1$s%% вече са използвани.\n\nМоже да нямате възможност да получавате съобщения, ако мястото за съхранение е заето напълно.\n\n👉 Моля, проверете дали не бихте могли да изтриете стари данни през уеб интерфейса на доставчика и обмислете дали да не включите \"Настройки / Изтриване на старите съобщения\". Можете по всяко време да проверите текущо използваното място за съхранение в \"Настройки / Свързаност\".</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ Изглежда датата и часът на Вашето устройство са неточни (%1$s).\n\nНастройте часовника ⏰🔧, за да имате сигурност, че Вашите съобщения се получават правилно.</string>
<string name="devicemsg_update_reminder">⚠️ Възможно е версията на Вашия ArcaneChat да е неактуална.\n\nТова може да създаде проблеми, тъй като Вашите чат партньори използват по-нови версии; освен това Ви липсват най-новите възможности.😳\nМоля, проверете за актуализации на https://get.delta.chat или в ползвания от Вас магазин за приложения.</string>
<string name="devicemsg_update_reminder">⚠️ Възможно е версията на Вашия ArcaneChat да е неактуална.\n\nТова може да създаде проблеми, тъй като Вашите чат партньори използват по-нови версии; освен това Ви липсват най-новите възможности.😳\nМоля, проверете за актуализации на https://github.com/ArcaneChat или в ползвания от Вас магазин за приложения.</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Отключете, за да продължите</string>
@@ -974,6 +976,7 @@
<string name="mailto_link_could_not_be_decoded">Неуспешно декодиране на mailto връзка: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Затваряне</string>
<string name="notify_reply_button">Отговор</string>
<string name="notify_new_message">Ново съобщение</string>
+2 -1
View File
@@ -313,6 +313,7 @@
<string name="videochat_tap_to_open">Toca per obrir-ho</string>
<string name="videochat_instance">Instància de vídeo xat</string>
<string name="videochat_instance_placeholder">La vostra instància de vídeo xat</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Exemples: https://meet.jit.si/$ROOM o basicwebrtc:https://your-server</string>
<string name="videochat_invitation">Invitació a un vídeo xat</string>
<string name="videochat_invitation_body">Heu sigut convidats a un vídeo xat, cliqueu %1$s per unir-vos-hi.</string>
@@ -510,7 +511,7 @@
<string name="login_smtp_port">Port SMTP</string>
<string name="login_smtp_security">Seguretat SMTP</string>
<string name="login_auth_method">Mètode d\'autorització</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_info_oauth2_title">Voleu continuar amb la configuració simplificada?</string>
<string name="login_info_oauth2_text">Ladreça d\'e-mail que heu introduït admet una configuració simplificada. (OAuth2).\n\nEn el pas següent, permeteu que ArcaneChat actuï com a xat amb l\'aplicació de correu electrònic..\n\nNo hi ha servidors de ArcaneChat, les vostres dades romanen al vostre dispositiu!</string>
+2 -2
View File
@@ -450,7 +450,7 @@
<string name="tab_all_media_empty_hint">Zde se zobrazí média sdílená v jakémkoli chatu.</string>
<string name="media_preview">Náhled multimedia</string>
<string name="send_message">Pošli zprávu</string>
<string name="multidevice_install_dc_on_other_device">Nainstalujte si ArcaneChat do druhého zařízení (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">Nainstalujte si ArcaneChat do druhého zařízení (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">Spusťte ArcaneChat, klepněte na „Přidat jako druhé zařízení“ a naskenujte zde zobrazený kód</string>
<string name="login_title">Přihlaš se</string>
@@ -718,7 +718,7 @@
<string name="chat_protection_enabled_explanation">Nyní je zaručeno, že všechny zprávy v tomto chatu jsou šifrovány end-to-end.\n\nŠifrování end-to-end udržuje zprávy soukromé mezi vámi a vašimi partnery v chatu. Nedokáže je přečíst ani váš poskytovatel e-mailu.</string>
<string name="invalid_unencrypted_tap_to_learn_more">⚠️%1$svyžaduje end-to-end šifrování, které pro tento chat ještě není nastaveno. Klepnutím se dozvíte více. </string>
<string name="devicemsg_self_deleted">Smazali jste chat „Uložené zprávy“.\n\n️ Chcete-li znovu použít funkci „Uložené zprávy“, vytvořte si nový chat. </string>
<string name="devicemsg_update_reminder">⚠️ Vaše verze ArcaneChatu může být zastaralá.\n\nTo může způsobit problémy, protože vaši partneři v chatu používají novější verze a vám chybí nejnovější funkce 😳\nAktualizace najdete na https://get.delta.chat nebo v obchodě s aplikacemi . </string>
<string name="devicemsg_update_reminder">⚠️ Vaše verze ArcaneChatu může být zastaralá.\n\nTo může způsobit problémy, protože vaši partneři v chatu používají novější verze a vám chybí nejnovější funkce 😳\nAktualizace najdete na https://github.com/ArcaneChat nebo v obchodě s aplikacemi . </string>
<!-- qr code stuff -->
<string name="qr_code">QR kód</string>
+2 -1
View File
@@ -398,13 +398,14 @@
<string name="login_smtp_port">SMTP port</string>
<string name="login_smtp_security">SMTP sikkerhed</string>
<string name="login_auth_method">Autorisationsmetode</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Brug SOCKS5</string>
<string name="login_socks5_host">SOCKS5 Værtsnavn</string>
<string name="login_socks5_port">SOCKS5 Port</string>
<string name="login_socks5_user">SOCKS5 Brugernavn</string>
<string name="login_socks5_password">SOCKS5 adgangskode</string>
<string name="login_info_oauth2_title">Fortsæt med forenklet opsætning?</string>
<string name="login_info_oauth2_text">Indtastet e-mail adresse understøtter simple opsætning (OAuth2).\n\nTillad i næste trin at ArcaneChat agerer som samtale med e-mail program.\n\nDer er ingen ArcaneChat servere, data forbliver på enhed.</string>
<string name="login_certificate_checks">Certifikationstjek</string>
+17 -3
View File
@@ -332,6 +332,7 @@
<string name="videochat_tap_to_open">Öffnen</string>
<string name="videochat_instance">Videochat-Instanz</string>
<string name="videochat_instance_placeholder">Videochat-Instanz</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Beispiele: https://meet.jit.si/$ROOM oder basicwebrtc:https://your-server</string>
<string name="videochat_instance_explain_2">Wenn aktiv, können Sie einen Videochat aus jedem Chat starten. Videochats erfordern beidseitig eine kompatible App oder einen kompatiblen Browser.</string>
<string name="videochat_instance_from_qr">\"%1$s\" verwenden, um andere zu Videochats einzuladen?\n\nWenn Sie diese Einstellung vornehmen, können Sie von jedem Chat aus einen Videochat starten. Dies überschreibt, falls vorhanden, die bisherige Einstellung zu Videochats.</string>
@@ -510,7 +511,7 @@
<string name="multidevice_title">Zweitgerät hinzufügen</string>
<string name="multidevice_same_network_hint">Beide Geräte müssen im selben Wi-Fi oder Netzwerk sein.</string>
<string name="multidevice_this_creates_a_qr_code">Erstellt einen QR-Code, den ein Zweitgerät scannen kann, um das Profil zu kopieren.</string>
<string name="multidevice_install_dc_on_other_device">ArcaneChat auf dem anderen Gerät installieren (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">ArcaneChat auf dem anderen Gerät installieren (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">ArcaneChat starten, \"Ich habe bereits ein Profil / Als Zweitgerät hinzufügen\" wählen und den QR-Code scannen</string>
<!-- Shown inside a "QR code card" with very limited space; please formulate the text as short as possible therefore. The placeholder will be replaced by name and/or address eg. "Scan to set up second device for Alice (alice@example.org)" -->
@@ -605,13 +606,25 @@
<string name="login_smtp_port">SMTP-Port</string>
<string name="login_smtp_security">SMTP-Sicherheit</string>
<string name="login_auth_method">Autorisierungsmethode</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- the word "Proxy" might be left untranslated unless the destination language has a well-known term for a "Proxy Server", acting intermediary between the app and the chatmail or email server -->
<string name="proxy_settings">Proxy</string>
<string name="proxy_use_proxy">Proxy verwenden</string>
<string name="proxy_add">Proxy hinzufügen</string>
<string name="proxy_add_explain">Unterstützte Typen: HTTP(S), SOCKS5 und Shadowsocks.</string>
<string name="proxy_add_url_hint">Proxy URL hier eingeben</string>
<string name="proxy_invalid">Ungültige oder nicht unterstützte Proxy-URL</string>
<string name="proxy_list_header">Proxies</string>
<string name="proxy_delete">Proxy löschen</string>
<string name="proxy_delete_explain">\"%1$s\" löschen?</string>
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">SOCKS5 verwenden</string>
<string name="login_socks5_host">SOCKS5-Host</string>
<string name="login_socks5_port">SOCKS5-Port</string>
<string name="login_socks5_user">SOCKS5-Anmeldename</string>
<string name="login_socks5_password">SOCKS5-Passwort</string>
<string name="login_info_oauth2_title">Weiter mit vereinfachter Einrichtung?</string>
<string name="login_info_oauth2_text">Die eingegebene E-Mail-Adresse unterstützt eine vereinfachte Einrichtung (OAuth 2.0).\n\nBitte erlauben Sie ArcaneChat im nächsten Schritt, als Chat-über-E-Mail-App zu arbeiten.\n\nArcaneChat sammelt keine Benutzerdaten, alles bleibt auf Ihrem Gerät.</string>
<string name="login_certificate_checks">Zertifikatsüberprüfung</string>
@@ -924,7 +937,7 @@
<string name="devicemsg_storage_exceeding">⚠️ Der Speicherplatz Ihres Anbieters ist bald erschöpft; bereits %1$s%% sind verbraucht.\n\nSie können möglicherweise keine Nachrichten mehr empfangen, wenn der Speicherplatz komplett verbraucht ist.\n\n👉 Bitte prüfen Sie, ob Sie alte Daten im Webinterface des Anbieters löschen können, und erwägen Sie, \"Einstellungen / Chats und Medien / Alte Nachrichten löschen\" zu aktivieren. Den aktuellen Speicherverbrauch können Sie jederzeit unter \"Einstellungen / Verbindungsstatus\" überprüfen.</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ Ihr Gerät scheint ein falsches Datum oder eine falsche Uhrzeit (%1$s) zu verwenden.\n\nStellen Sie Ihre Uhr ⏰🔧 richtig ein, um sicherzustellen, dass Ihre Nachrichten korrekt empfangen werden.</string>
<string name="devicemsg_update_reminder">⚠️ Ihre Delta-Chat-Version ist möglicherweise veraltet.\n\nDies kann zu Problemen führen, wenn Ihre Chat-PartnerInnen neuere Versionen verwenden - und Ihnen die neuesten Funktionen fehlen. 😳\nBitte überprüfen Sie https://get.delta.chat oder Ihren App-Store auf Updates.</string>
<string name="devicemsg_update_reminder">⚠️ Ihre Delta-Chat-Version ist möglicherweise veraltet.\n\nDies kann zu Problemen führen, wenn Ihre Chat-PartnerInnen neuere Versionen verwenden - und Ihnen die neuesten Funktionen fehlen. 😳\nBitte überprüfen Sie https://github.com/ArcaneChat oder Ihren App-Store auf Updates.</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Entsperren zum Fortfahren</string>
@@ -991,6 +1004,7 @@
<string name="mailto_link_could_not_be_decoded">Mailto-Link konnte nicht dekodiert werden: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Verwerfen</string>
<string name="notify_reply_button">Antworten</string>
<string name="notify_new_message">Neue Nachricht</string>
+5 -2
View File
@@ -289,6 +289,7 @@
<string name="videochat_tap_to_open">Πατήστε για Άνοιγμα</string>
<string name="videochat_instance">Παρουσία στη Βιντεοκλήση</string>
<string name="videochat_instance_placeholder">Η παρουσία σας στη βιντεοκλήση</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Παράδειγμα: https://meet.jit.si/$ROOM ή basicwebrtc:https://your-server</string>
<string name="videochat_instance_explain_2">Αν είναι ενεργοποιημένο, μπορείτε να ξεκινήσετε μια συνομιλία μέσω βίντεο από κάθε συνομιλία. Απαιτεί μια συμβατή εφαρμογή ή ένα πρόγραμμα περιήγησης και στα δύο άκρα.</string>
<string name="videochat_instance_from_qr">Χρήση \"%1$s\" για να προσκαλέσετε άλλους στη βιντεοκλήση;\n\nΑφού ρυθμιστεί, μπορείτε να ξεκινήσετε μια συνομιλία μέσω βίντεο από κάθε συνομιλία. Αυτό αντικαθιστά οποιαδήποτε προηγούμενη ρύθμιση για συνομιλίες μέσω βίντεο.</string>
@@ -491,13 +492,14 @@
<string name="login_smtp_port">Θύρα SMTP</string>
<string name="login_smtp_security">Ασφάλεια SMTP</string>
<string name="login_auth_method">Μέθοδος Πιστοποίησης</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Χρήση SOCKS5</string>
<string name="login_socks5_host">SOCKS5 Κεντρικός</string>
<string name="login_socks5_port">Θύρα SOCKS5</string>
<string name="login_socks5_user">Χρήστης SOCKS5</string>
<string name="login_socks5_password">Κωδικός SOCKS5</string>
<string name="login_info_oauth2_title">Συνέχεια με την απλοποιημένη ρύθμιση;</string>
<string name="login_info_oauth2_text">Η εισαγόμενη διεύθυνση e-mail υποστηρίζει μια απλοποιημένη ρύθμιση (OAuth 2.0).\n\nΣτο επόμενο βήμα, επιτρέψτε στο ArcaneChat να λειτουργεί ως η εφαρμογή Chat μέσω ηλεκτρονικού ταχυδρομείου.\n\nΔεν υπάρχουν διακομιστές ArcaneChat, τα δεδομένα σας παραμένει στη συσκευή σας.</string>
<string name="login_certificate_checks">Έλεγχοι Πιστοποιητικών</string>
@@ -770,7 +772,7 @@
<string name="devicemsg_storage_exceeding">⚠️ Ο αποθηκευτικός χώρος του παρόχου σας πρόκειται να εξαντληθεί: %1$s %% χρησιμοποιούνται ήδη.\n\nΕνδέχεται να μην μπορείτε να λαμβάνετε μηνύματα εάν ο χώρος αποθήκευσης είναι πλήρης.\n\n👉 Ελέγξτε εάν μπορείτε να διαγράψετε παλιά δεδομένα στη διεπαφή ιστού του παρόχου και εξετάστε το ενδεχόμενο ενεργοποίηση \"Ρυθμίσεις / Διαγραφή παλαιών μηνυμάτων\". Μπορείτε να ελέγξετε την τρέχουσα χρήση αποθηκευτικού χώρου ανά πάσα στιγμή στις \"Ρυθμίσεις / Συνδεσιμότητα\".</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ Η ημερομηνία ή η ώρα στη συσκευή σας φαίνεται να είναι μην είναι ακριβής (%1$s).\n\nΠροσαρμόστε το ρολόι σας ⏰🔧 για να βεβαιωθείτε ότι τα μηνύματά σας λαμβάνονται σωστά.</string>
<string name="devicemsg_update_reminder">⚠️ Η έκδοση ArcaneChat μπορεί να είναι παλιά.\n\nΑυτό μπορεί να προκαλέσει προβλήματα επειδή οι συνεργάτες συνομιλίας σας χρησιμοποιούν νεότερες εκδόσεις - και δεν έχετε τις πιο πρόσφατες λειτουργίες 😳\nΕλέγξτε τη https://get.delta.chat ή το κατάστημα εφαρμογών σας για ενημερώσεις .</string>
<string name="devicemsg_update_reminder">⚠️ Η έκδοση ArcaneChat μπορεί να είναι παλιά.\n\nΑυτό μπορεί να προκαλέσει προβλήματα επειδή οι συνεργάτες συνομιλίας σας χρησιμοποιούν νεότερες εκδόσεις - και δεν έχετε τις πιο πρόσφατες λειτουργίες 😳\nΕλέγξτε τη https://github.com/ArcaneChat ή το κατάστημα εφαρμογών σας για ενημερώσεις .</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Εισαγάγετε το μυστικό που έχει οριστεί από το σύστημά σας για να συνεχίσετε.</string>
@@ -828,6 +830,7 @@
<string name="mailto_link_could_not_be_decoded">Αδυναμία αποκωδικοποίησης του συνδέσμου mailto: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Απόρριψη</string>
<string name="notify_reply_button">Απάντηση</string>
<string name="notify_new_message">Νέο μήνυμα</string>
+13 -4
View File
@@ -173,6 +173,7 @@
<string name="video">Video</string>
<string name="documents">Documentos</string>
<string name="contact">Contacto</string>
<string name="bot">Bot</string>
<string name="camera">Cámara</string>
<!-- As in "start a video recording" or "take a photo"; eg. the description of the "shutter button" in cameras -->
<string name="capture">Capturar</string>
@@ -281,6 +282,10 @@
<string name="select_chat">Seleccionar chat</string>
<string name="select_more">Seleccionar más</string>
<string name="menu_edit_name">Editar nombre</string>
<!-- The placeholder will be replaced by the name the contact gave themself (if any) or by an e-mail address. -->
<string name="edit_name_explain">Establece un apodo que se te mostrará en lugar de \"%1$s\". Déjalo en blanco para utilizar el nombre elegido por el contacto.</string>
<!-- The placeholder will be replaced by the name the contact gave themself (if any) or by an e-mail address. -->
<string name="edit_name_placeholder">Apodo para \"%1$s\"</string>
<string name="menu_settings">Ajustes</string>
<string name="menu_advanced">Avanzado</string>
<string name="menu_view_profile">Ver perfil</string>
@@ -343,6 +348,7 @@
<string name="videochat_tap_to_open">Toca para abrir</string>
<string name="videochat_instance">Instancia de videollamada</string>
<string name="videochat_instance_placeholder">Tu instancia de videollamada</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Ejemplo: https://tu-servidor.org/$ROOM</string>
<string name="videochat_instance_explain_2">Si el videochat está activado, puedes iniciar un videochat desde cada chat. Los chats de vídeo necesitan una aplicación o un navegador compatible en los dos lados.</string>
<string name="videochat_instance_from_qr">¿Usa \"%1$s\" para invitar a otros a la videollamada?\n\nUna vez configurado, puedes iniciar una videollamada desde el chat individual. Esto reemplaza la configuración previa de videollamadas. Si la hubiera.</string>
@@ -535,7 +541,7 @@
<string name="multidevice_title">Añadir otro dispositivo</string>
<string name="multidevice_same_network_hint">Asegúrate de que ambos dispositivos estén conectados en la misma red o Wi-Fi</string>
<string name="multidevice_this_creates_a_qr_code">Esto crea un código QR que el otro dispositivo puede escanear para copiar la cuenta.</string>
<string name="multidevice_install_dc_on_other_device">Instala ArcaneChat en tu otro dispositivo (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">Instala ArcaneChat en tu otro dispositivo (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">Inicia ArcaneChat, toca \"Añadir desde otro dispositivo\" y escanea el código mostrado aquí</string>
<!-- Shown inside a "QR code card" with very limited space; please formulate the text as short as possible therefore. The placeholder will be replaced by name and/or address eg. "Scan to set up second device for Alice (alice@example.org)" -->
@@ -630,13 +636,14 @@
<string name="login_smtp_port">Puerto SMTP</string>
<string name="login_smtp_security">Seguridad SMTP</string>
<string name="login_auth_method">Método de autorización</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Usar SOCKS5</string>
<string name="login_socks5_host">Servidor SOCKS5</string>
<string name="login_socks5_port">Puerto SOCKS5</string>
<string name="login_socks5_user">Usuario SOCKS5</string>
<string name="login_socks5_password">Contraseña SOCKS5</string>
<string name="login_info_oauth2_title">¿Continuar con la configuración simplificada?</string>
<string name="login_info_oauth2_text">La dirección de correo electrónico introducida admite una configuración simplificada (OAuth 2.0).\n\nEn el próximo paso, permita que ArcaneChat actúe como su aplicación de chat por correo electrónico.\n\nNo hay servidores de ArcaneChat, tus datos permanecen en tu dispositivo.</string>
<string name="login_certificate_checks">Comprobaciones de certificados</string>
@@ -949,7 +956,7 @@
<string name="devicemsg_storage_exceeding">⚠️ El almacenamiento de tu proveedor está por excederse, ya tienes %1$s%% en uso.\n\nQuizás no puedas recibir mensajes cuando el almacenamiento esté al 100%% de uso.\n\n👉 Por favor chequea si puedes eliminar los datos antiguos en la página web del proveedor y considera habilitar \"Ajustes / Eliminar mensajes antiguos\". Puedes chequear tu almacenamiento actual en cualquier momento en \"Ajustes / Conectividad\".</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ Fecha y hora de tu dispositivo parecen ser inexactas (%1$s).\n\nAjusta tu reloj ⏰🔧 para asegurarte que los mensajes sean recibidos correctamente.</string>
<string name="devicemsg_update_reminder">⚠️ Tu versión de ArcaneChat puede estar desactualizada.\n\nEso puede crear problemas porque tus contactos usan nuevas versiones - y tú te estás perdiendo las últimas novedades 😳\nChequea https://get.delta.chat o tu tienda de aplicaciones para actualizaciones.</string>
<string name="devicemsg_update_reminder">⚠️ Tu versión de ArcaneChat puede estar desactualizada.\n\nEso puede crear problemas porque tus contactos usan nuevas versiones - y tú te estás perdiendo las últimas novedades 😳\nChequea https://github.com/ArcaneChat o tu tienda de aplicaciones para actualizaciones.</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Desbloquear para continuar</string>
@@ -1017,6 +1024,7 @@
<string name="mailto_link_could_not_be_decoded">El enlace mailto no se pudo decodificar: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Descartar</string>
<string name="notify_reply_button">Responder</string>
<string name="notify_new_message">Nuevo mensaje</string>
@@ -1176,4 +1184,5 @@
<!-- device messages for updates -->
<string name="update_1_46_android">Nueva pantalla de bienvenida 🐣 y más:\n\n⚡️ Regístrese en servidores de chatmail rápidos y seguros (https://delta.chat/chatmail) o use servidores de correo electrónico clásicos\n\n👉 Notificaciones PUSH para cualquier servidor de chatmail\n\n👤 Presenta un amigo a otro de forma segura usando \"Adjuntar Contacto\"\n\n🥰 Reacciona con cualquier emoji\n\n📌 Ancla chats directamente desde los resultados de la búsqueda... y MUCHO más en %1$s</string>
<string name="update_1_46_ios">Nueva pantalla inicial 🐣 y más:\n\n⚡️ Regístrese en servidores de chatmail rápidos y seguros (https://delta.chat/chatmail) o use servidores de correo electrónico clásicos\n\n👉 Notificaciones PUSH para cualquier servidor de chatmail\n\n👤 Reciba \"Contactos adjuntos\" y conéctese con sus amigos\n\n🥰 Selección de reacción más rápida... y MÁS en %1$s</string>
</resources>
<string name="update_switch_profile_placement">️ Se movió la opción \"Cambiar perfil\": toca tu imagen de perfil en la esquina superior de la pantalla principal para agregar o cambiar perfiles 💡</string>
</resources>
+6 -3
View File
@@ -317,6 +317,7 @@
<string name="videochat_tap_to_open">برای باز کردن ضربه بزنید. </string>
<string name="videochat_instance">جلسه تماس تصویری</string>
<string name="videochat_instance_placeholder">جلسه تماس تصویری شما</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">مثال‌:
https://meet.jit.si/$ROOM
یا
@@ -490,7 +491,7 @@ https://meet.jit.si/$ROOM
<string name="multidevice_title">افزودن دستگاه دوم</string>
<string name="multidevice_same_network_hint">مطمئن شوید هر دو دستگاه در یک وای‌فای یا شبکه هستند</string>
<string name="multidevice_this_creates_a_qr_code">این یک کد کیوآر ایجاد می‌کند که دستگاه دوم می‌تواند برای کپی حساب اسکن کند.</string>
<string name="multidevice_install_dc_on_other_device">دلتاچت را روی دستگاه دیگر خود نصب کنید (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">دلتاچت را روی دستگاه دیگر خود نصب کنید (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">دلتاچت را باز کنید، روی «افزودن به عنوان دستگاه دوم» بزنید و کد نشان داده شده در اینجا را اسکن کنید</string>
<!-- Shown inside a "QR code card" with very limited space; please formulate the text as short as possible therefore. The placeholder will be replaced by name and/or address eg. "Scan to set up second device for Alice (alice@example.org)" -->
@@ -572,13 +573,14 @@ https://meet.jit.si/$ROOM
<string name="login_smtp_port">SMTP Port</string>
<string name="login_smtp_security">SMTP Security</string>
<string name="login_auth_method">Authorization Method</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">استفاده از SOCKS5</string>
<string name="login_socks5_host">SOCKS5 Host</string>
<string name="login_socks5_port">SOCKS5 Port</string>
<string name="login_socks5_user">SOCKS5 User</string>
<string name="login_socks5_password">SOCKS5 Password</string>
<string name="login_info_oauth2_title">با تنظیم‌ها ساده‌ شده ادامه می‌دهید؟</string>
<string name="login_info_oauth2_text">نشانی رایانامه وارد شده از تنظیم‌های ساده پشتیبانی می‌کند
(OAuth 2.0).\n\nIn
@@ -887,7 +889,7 @@ https://meet.jit.si/$ROOM
ساعت دستگاه خود را تنظیم کنید ⏰🔧 تا پیام‌ها به درستی دریافت شوند. </string>
<string name="devicemsg_update_reminder">هشدار⚠️ ممکن است نسخه دلتاچت مورد استفاده قدیمی شده باشد.
این موضوع ممکن است مشکلاتی ایجاد کند چون مخاطبین شما از نسخه‌های جدیدتر استفاده می‌کنند. همچنین قابلیت‌های جدید را هم از دست می‌دهید😳
لطفا برای دریافت نسخه جدید به app store یا https://get.delta.chat مراجعه کنید. </string>
لطفا برای دریافت نسخه جدید به app store یا https://github.com/ArcaneChat مراجعه کنید. </string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">برای ادامه، لطفا رمز تعیین شده توسط سیستم خود را وارد کنید</string>
@@ -954,6 +956,7 @@ https://meet.jit.si/$ROOM
<string name="mailto_link_could_not_be_decoded">امکان کدگشایی پیوند mailto وجود ندارد: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">صرف نظر</string>
<string name="notify_reply_button">پاسخ</string>
<string name="notify_new_message">پیام جدید</string>
+6 -3
View File
@@ -321,6 +321,7 @@
<string name="videochat_tap_to_open">Napauta avataksesi</string>
<string name="videochat_instance">Videokeskustelun tarjoaja</string>
<string name="videochat_instance_placeholder">Videokeskustelusi tarjoaja</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Esimerkkejä: https://meet.jit.si/$ROOM tai basicwebrtc:https://sinun-palvelimesi</string>
<string name="videochat_instance_explain_2">Jos videokeskustelu on kytketty päälle, voit aloittaa videokeskustelun mistä tahansa keskustelusta. Videokeskustelu vaatii molemmilta yhteensopivan sovelluksen tai selaimen.</string>
<string name="videochat_instance_from_qr">Käytä \"%1$s\" videokeskustelupyyntöihin?\n\nTämän jälkeen voit aloittaa videokeskustelun mistä tahansa keskustelusta. Tämä korvaa edellisen videokeskusteluasetuksen, jos sellainen on.</string>
@@ -499,7 +500,7 @@
<string name="multidevice_title">Lisää toinen laite</string>
<string name="multidevice_same_network_hint">Varmista että molemmat laitteet ovat samassa Wi-Fi verkossa</string>
<string name="multidevice_this_creates_a_qr_code">Tämä luo QR koodin, jolla toinen laite saa ladattua kopion profiilista.</string>
<string name="multidevice_install_dc_on_other_device">Lataa ArcaneChat toiselle laitteellesi (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">Lataa ArcaneChat toiselle laitteellesi (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">Avaa ArcaneChat, valitse \"Minulla on jo profiili / Lisää toiseksi laitteeksi\" ja skannaa täällä näkyvä koodi</string>
<!-- Shown inside a "QR code card" with very limited space; please formulate the text as short as possible therefore. The placeholder will be replaced by name and/or address eg. "Scan to set up second device for Alice (alice@example.org)" -->
@@ -594,13 +595,14 @@
<string name="login_smtp_port">SMTP -portti</string>
<string name="login_smtp_security">SMTP -turvallisuusprotokolla</string>
<string name="login_auth_method">Kirjautumismenetelmä</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Käytä SOCKS5</string>
<string name="login_socks5_host">SOCKS5 -isäntä</string>
<string name="login_socks5_port">SOCKS5 -portti</string>
<string name="login_socks5_user">SOCKS5 -käyttäjä</string>
<string name="login_socks5_password">SOCKS5 -salasana</string>
<string name="login_info_oauth2_title">Jatka yksinkertaistetulla käyttöönotolla?</string>
<string name="login_info_oauth2_text">Annettu sähköpostiosoite tukee yksinkertaista käyttöönottoa (OAuth 2.0).\n\nSeuraavassa vaiheessa sinun tulisi antaa ArcaneChatille oikeus toimia keskustelusovelluksena sähköpostia hyödyntäen.\n\nArcaneChat ei kerää käyttäjädataa, kaikki tallennetaan vain laitteellesi.</string>
<string name="login_certificate_checks">Varmenteiden tarkastus</string>
@@ -910,7 +912,7 @@
<string name="devicemsg_storage_exceeding">⚠️ Palveluntarjoajasi tallennuskiintiö ylitetään pian, käytössä on jo %1$s / %%.\n\nEt välttämättä enää voi vastaanottaa viestejäsi, kun 100 %% on käytössä.\n\n👉 Kokeile poistaa viestejä palveluntarjoajasi internetkäyttöliittymästä. Kannattaa myös ehkä kytkeä päälle \"Asetukset / Poista vanhat viestit\". Voit tarkistaa tämän hetkisen tallennustilan käytön \"Asetukset / Yhteys\".</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ Laitteesi päivämäärä tai aika vaikuttaa olevan väärässä (%1$s).\n\nAseta kellonaika ⏰🔧 varmistaaksesi, että viestin vastaanottaminen onnistuu.</string>
<string name="devicemsg_update_reminder">⚠️ ArcaneChat -versio saattaa olla vanhentunut.\n\nTämä saattaa aiheuttaa ongelmia, koska muut käyttävät uudempia versioita - ja saatat jäädä paitsi uusista ominaisuuksista. 😳\nTarkista uudet päivitykset sovelluskaupastasi tai https://get.delta.chat</string>
<string name="devicemsg_update_reminder">⚠️ ArcaneChat -versio saattaa olla vanhentunut.\n\nTämä saattaa aiheuttaa ongelmia, koska muut käyttävät uudempia versioita - ja saatat jäädä paitsi uusista ominaisuuksista. 😳\nTarkista uudet päivitykset sovelluskaupastasi tai https://github.com/ArcaneChat</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Avaa lukitus jatkaaksesi</string>
@@ -977,6 +979,7 @@
<string name="mailto_link_could_not_be_decoded">mailto-linkkiä ei voitu selvittää: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Hylkää</string>
<string name="notify_reply_button">Vastaa</string>
<string name="notify_new_message">Uusi viesti</string>
+53 -4
View File
@@ -4,7 +4,9 @@
<string name="app_name">ArcaneChat</string>
<string name="ok">OK</string>
<string name="cancel">Annuler</string>
<string name="clear_search">Effacer la recherche</string>
<!-- the word "or" to separate blocks in the user interface that are mutually exclusive -->
<string name="or_separator">ou</string>
<string name="clear_search">Effacer la recherche</string>
<string name="yes">Oui</string>
<string name="no">Non</string>
<string name="select">Sélectionner</string>
@@ -52,6 +54,7 @@
<string name="show_full_message">Montrer le message complet...</string>
<!-- Stay short here, say ~16 characters. The source string could also be "All Read", maybe that hint can make translations easier :) -->
<string name="mark_all_as_read">Marquer tout comme lu</string>
<string name="mark_as_read">Marquer comme lu</string>
<!-- Shortest text for "Mark as being read". In english, this could be "Read" (past tense of "to read"), in german, this could be "Gelesen". -->
<string name="mark_as_read_short">Lu</string>
<!-- Placeholder text when something is loading -->
@@ -203,6 +206,8 @@
<!-- menu labels (or icon, buttons...) -->
<string name="menu_new_contact">Nouveau contact</string>
<string name="menu_new_classic_contact">Ajouter le contact à la main</string>
<string name="new_classic_contact_explain">Les contacts ajoutés à la main peuvent être contactés par e-mail classique. Le chiffrement de bout en bout n\'est pas garanti.</string>
<string name="menu_new_chat">Nouvelle discussion</string>
<string name="menu_new_group">Nouveau groupe</string>
<string name="clone_chat">Cloner la discussion</string>
@@ -326,6 +331,7 @@
<string name="videochat_tap_to_open">Appuyer pour ouvrir</string>
<string name="videochat_instance">Instance de discussion vidéo</string>
<string name="videochat_instance_placeholder">Votre instance de discussion vidéo</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Par exemple : https://your-server.org/$ROOM</string>
<string name="videochat_instance_explain_2">Si vous avez activé les discussions vidéo, vous pouvez démarrer une conversation vidéo dans chacune de vos discussions. Il faut que chaque participant-e ait une application ou un navigateur compatibles pour pouvoir utiliser cette option.</string>
<string name="videochat_instance_from_qr">Utiliser « %1$s » pour inviter d\'autres personnes à des discussions vidéo ?\n\nUne fois configuré, vous pouvez discuter en vidéo dans chaque discussion privée. Remplace vos préférences de configurations précédentes pour les discussions vidéos.</string>
@@ -437,6 +443,9 @@
<string name="send_file_to">Envoyer \"%1$s\" à</string>
<!-- title shown above a list contacts where one should be selected (eg. when a webxdc attempts to send a message to a chat) -->
<string name="send_message_to">Envoyer un message à</string>
<string name="enable_realtime">Canaux Webxdc temps réel</string>
<string name="enable_realtime_explain">Enclenchez l\'API temps réel Webxdc pour créer des connexions entre les appareils.</string>
<!-- map -->
<string name="filter_map_on_time">Afficher les positions pour une période</string>
<string name="show_location_traces">Afficher les traces</string>
@@ -507,7 +516,7 @@
<string name="multidevice_title">Ajouter un deuxième appareil</string>
<string name="multidevice_same_network_hint">Vérifiez que les deux appareils sont bien connectés au même Wi-Fi ou réseau.</string>
<string name="multidevice_this_creates_a_qr_code">Crée un code QR que vous pouvez scanner avec le deuxième appareil pour copier le compte.</string>
<string name="multidevice_install_dc_on_other_device">Installer ArcaneChat sur votre autre appareil (https://get.delta.chat)</string>
<string name="multidevice_install_dc_on_other_device">Installer ArcaneChat sur votre autre appareil (https://github.com/ArcaneChat)</string>
<!-- "I Already Have a Profile / Add as Second Device” should be the same text as defined by the keys onboarding_alternative_logins and multidevice_receiver_title -->
<string name="multidevice_tap_scan_on_other_device">Lancez ArcaneChat, appuyez sur \"Ajouter comme deuxième appareil\" et scannez le code affiché ici.</string>
<!-- Shown inside a "QR code card" with very limited space; please formulate the text as short as possible therefore. The placeholder will be replaced by name and/or address eg. "Scan to set up second device for Alice (alice@example.org)" -->
@@ -554,6 +563,18 @@
<string name="part_of_total_used">%1$s sur %2$s utilisé</string>
<!-- welcome and login -->
<!-- Primary button on the welcome screen, allows to create an instant profile -->
<string name="onboarding_create_instant_account">Créer un nouveau compte</string>
<!-- Secondary button on the welcome screen, allows to "Add as Second Device", "Restore from Backup" -->
<string name="onboarding_alternative_logins">Je possède déjà un compte</string>
<!-- Instant onboarding title (there is not more to do than to set name and avatar) -->
<string name="instant_onboarding_title">Votre compte</string>
<!-- Confirmation button on the instant onboarding screen -->
<string name="instant_onboarding_create">Accepter et créer le compte</string>
<!-- Secondary, link-like button to open a page with other possible instances -->
<string name="instant_onboarding_show_more_instances">Utiliser un autre serveur</string>
<string name="instant_onboarding_other_server">Lister les serveurs de discussions</string>
<string name="scan_invitation_code">Scanner le code d\'invitation</string>
<string name="login_title">Connexion</string>
<!-- for classic email, we use the classical term "Account" -->
@@ -574,13 +595,23 @@
<string name="login_smtp_port">Port SMTP</string>
<string name="login_smtp_security">Sécurité SMTP</string>
<string name="login_auth_method">Méthode d\'autorisation</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- the word "Proxy" might be left untranslated unless the destination language has a well-known term for a "Proxy Server", acting intermediary between the app and the chatmail or email server -->
<string name="proxy_settings">Proxy</string>
<string name="proxy_use_proxy">Utiliser le proxy</string>
<string name="proxy_add">Ajouter un proxy</string>
<string name="proxy_add_explain">Types de proxy supportés: HTTP(S), SOCKS5 et Shadowsocks.</string>
<string name="proxy_add_url_hint">Entrez l\'URL du proxy ici</string>
<string name="proxy_invalid">URL invalide ou non supportée</string>
<string name="proxy_list_header">Sauver les proxy</string>
<string name="proxy_delete">Effacer le proxy</string>
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Utiliser SOCKS5</string>
<string name="login_socks5_host">Hôte SOCKS5</string>
<string name="login_socks5_port">Port SOCKS5</string>
<string name="login_socks5_user">Utilisateur SOCKS5</string>
<string name="login_socks5_password">Mot de passe SOCKS5</string>
<string name="login_info_oauth2_title">Continuer avec une configuration simplifiée ?</string>
<string name="login_info_oauth2_text">L\'adresse de courriel saisie prend en charge une configuration simplifiée (OAuth2.0). \n\nDans l\'étape suivante, autorisez ArcaneChat à agir comme votre application de Chat avec courriel . Il n\'y a pas de serveur ArcaneChat, vos données restent sur votre appareil !</string>
<string name="login_certificate_checks">Vérification du certificat</string>
@@ -662,6 +693,8 @@
<string name="pref_incognito_keyboard_explain">Demander que le clavier désactive l\'apprentissage personnalisé</string>
<string name="pref_read_receipts">Accusés de lecture</string>
<string name="pref_read_receipts_explain">Si les accusés de lecture sont désactivés, vous ne pourrez pas voir les accusés de lecture des autres.</string>
<string name="pref_server">Serveur</string>
<string name="pref_encryption">Chiffrement</string>
<string name="pref_manage_keys">Gérer les clés</string>
<string name="pref_use_system_emoji">Utiliser les émojis système</string>
<string name="pref_use_system_emoji_explain">Désactiver la prise en charge des émojis intégrés de ArcaneChat</string>
@@ -736,6 +769,9 @@
<string name="pref_edit_profile">Édition du profil</string>
<string name="disable_imap_idle">Désactiver IMAP IDLE</string>
<string name="disable_imap_idle_explain">N\'utilisez pas d\'extension IMAP IDLE, même si elle est prise en charge par votre serveur, car elle provoque des retards dans la récupération des messages. Activez cette option uniquement pour effectuer des tests.</string>
<string name="send_stats_to_devs">Envoyer les statistiques aux développeurs ArcaneChat</string>
<!-- Emoji picker and categories -->
<string name="emoji_search_results">Résultats de la recherche</string>
<string name="emoji_not_found">Pas d\'emoji trouvé</string>
@@ -795,6 +831,7 @@
<string name="systemmsg_read_receipt_subject">Accusé de lecture</string>
<!-- deprecated -->
<string name="systemmsg_read_receipt_body">Ceci est un accusé de lecture pour le message \"%1$s\".\n\nCela signifie que le message a été affiché sur l\'appareil du destinataire, pas forcément que le contenu ait été lu.</string>
<string name="systemmsg_cannot_decrypt">Ce message ne peut pas être déchiffré.\n\n• Essayez de demander à l\'expéditeur de vous l\'envoyer à nouveaux.\n\n• Si vous venez de réinstaller ArcaneChat il serait bien de le reconfigurer en sélectionnant \"Ajouter un deuxième appareil\" ou d\'importer une sauvegarde.</string>
<string name="systemmsg_unknown_sender_for_chat">Expéditeur inconnu de cette discussion. Voir « Info » pour plus de détails.</string>
<string name="systemmsg_subject_for_new_contact">Message de %1$s</string>
<string name="systemmsg_failed_sending_to">Échec de l\'envoi du message à %1$s.</string>
@@ -864,6 +901,7 @@
<string name="chat_protection_enabled_explanation">Il n\'est pas garanti que tous les messages de cette discussion sont chiffrés de bout en bout.\n\nLe chiffrement de bout en bout assure la confidentialité des messages échangés par les membres d\'une discussion. Même votre fournisseur de courriel ne peut pas les lire. </string>
<string name="chat_protection_broken_tap_to_learn_more">%1$s a envoyé un message depuis un nouvel appareil. Appuyez pour en savoir plus.</string>
<string name="chat_protection_broken_explanation">Le chiffrement de bout en bout ne peut plus être garanti, probablement parce que %1$s a réinstallé ArcaneChat ou envoyé un message depuis un nouvel appareil.\n\nVous pouvez convenir d\'une rencontre physique afin de scanner à nouveau son code QR pour ré-instaurer la garantie du chiffrement de bout en bout.</string>
<string name="invalid_unencrypted_explanation">Pour établir un chiffrement de bout en bout vous pouvez rencontrer vos contacts en personne et scanner leur code QR.</string>
<string name="learn_more">En savoir plus</string>
<string name="devicemsg_self_deleted">Vous avez supprimé la discussion \"Messages sauvegardés\".\n\n️ Pour utiliser la fonctionnalité \"Message enregistrés\" à nouveau, commencez une nouvelle discussion avec vous-même.</string>
@@ -871,7 +909,7 @@
<string name="devicemsg_storage_exceeding">⚠️ Bientôt plus d\'espace de stockage chez votre fournisseur, %1$s%% utilisés.\n\nVous ne serez peut-être plus en mesure de recevoir des messages quand votre espace de stockage sera plein.\n\n👉 Veuillez vérifier si vous avez d\'anciens éléments à supprimer directement sur l\'interface web de votre fournisseur et envisagez d\'activer \"Paramètres / Supprimer les anciens messages\". Vous pouvez vérifier à tout moment le volume d\'espace de stockage en cours d\'utilisation depuis \"Paramètres / Connectivité\".</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ L\'heure ou la date de votre appareil semble erronée (%1$s).\n\nRéglez votre horloge ⏰🔧 pour que vos messages soient bien reçus.</string>
<string name="devicemsg_update_reminder">⚠️ Votre version de ArcaneChat semble obsolète.\n\nCela risque de créer des dysfonctionnements parce que vos contacts utilisent des versions plus récentes - en plus, vous ratez les nouvelles fonctionnalités 😳\n Rendez-vous sur https://get.delta.chat ou sur votre magasin d\'applications pour effectuer la mise à jour !</string>
<string name="devicemsg_update_reminder">⚠️ Votre version de ArcaneChat semble obsolète.\n\nCela risque de créer des dysfonctionnements parce que vos contacts utilisent des versions plus récentes - en plus, vous ratez les nouvelles fonctionnalités 😳\n Rendez-vous sur https://github.com/ArcaneChat ou sur votre magasin d\'applications pour effectuer la mise à jour !</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Déverrouillez votre appareil pour continuer</string>
@@ -881,6 +919,7 @@
<string name="load_qr_code_as_image">Charger le code QR comme une image</string>
<string name="qrscan_title">Numériser le QR code</string>
<string name="qrscan_hint">Placez votre caméra au dessus du QR code</string>
<string name="qrscan_hint_desktop">Placez le code QR devant la caméra</string>
<string name="qrscan_failed">Le code QR n\'a pas pu être décodé</string>
<string name="qrscan_ask_join_group">Voulez-vous rejoindre le groupe \"%1$s\" ?</string>
<string name="qrscan_fingerprint_mismatch">L\'empreinte digitale numérisée ne correspond pas à la dernière empreinte digitale vue depuis %1$s</string>
@@ -909,6 +948,7 @@
<string name="qrshow_join_contact_no_connection_toast">Pas de connexion Internet, ne peut pas effectuer la configuration du QR code.</string>
<string name="qraccount_ask_create_and_login">Créer une nouvelle adresse de courriel sur « %1$s » et se connecter ici ?</string>
<string name="qraccount_ask_create_and_login_another">Créer une nouvelle adresse de courriel sur « %1$s » et s\'y connecter ?\n\nVotre compte existant ne sera pas supprimé. Utilisez l\'élément de menu « Changer de compte » pour passer d\'un compte à l\'autre.</string>
<string name="set_name_and_avatar_explain">Choisissez un nom que vos contacts reconnaîtrons. Vous pouvez également définir une image pour votre profile.</string>
<string name="qraccount_qr_code_cannot_be_used">Le code QR scanné ne peut pas être utilisé pour ouvrir un nouveau compte.</string>
<!-- the placeholder will be replaced by the e-mail address of the profile -->
<string name="qrlogin_ask_login">Se connecter au compte « %1$s » ?</string>
@@ -918,6 +958,8 @@
<string name="secure_join_started">%1$s vous a invité à rejoindre ce groupe.\n\nEn attente de la réponse de lappareil de %2$s…</string>
<!-- placeholder will be replaced by the name of the inviter. -->
<string name="secure_join_replies">%1$s a répondu, en attente d’être ajouté au groupe…</string>
<string name="secure_join_wait">Chiffrement de bout en bout en cours d\'établissement, merci de patienter...</string>
<string name="secure_join_wait_timeout">Le chiffrement de bout en bout n\'est pas encore garanti, mais vous pouvez déjà envoyer un message.</string>
<string name="contact_verified">%1$s connu.</string>
<string name="contact_not_verified">Impossible de garantir le chiffrement de bout en bout avec %1$s.</string>
<!-- Shown in contact profile. The placeholder will be replaced by the name of the contact that introduced the contact. -->
@@ -933,6 +975,7 @@
<string name="mailto_link_could_not_be_decoded">Le lien mailto n\'a pas pu être décodé: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Rejeter</string>
<string name="notify_reply_button">Répondre</string>
<string name="notify_new_message">Nouveau message</string>
@@ -944,6 +987,8 @@
<string name="notify_no_name_or_message">Pas de nom ou de message</string>
<string name="notifications_disabled">Notifications désactivées</string>
<string name="new_messages">Nouveaux messages</string>
<!-- Body text for a generic "New messages" notification. Shown if we do not have more information about a new messages. Note, that the string is also referenced at https://github.com/deltachat/notifiers -->
<string name="new_messages_body">Vous avez de nouveaux messages</string>
<string name="n_messages_in_m_chats">%1$d messages dans %2$d discussions</string>
@@ -1075,6 +1120,10 @@
<string name="InfoPlist_NSPhotoLibraryAddUsageDescription">ArcaneChat veut enregistrer les images dans votre bibliothèque photo.</string>
<!-- android specific strings, developers: please take care to remove strings that are no longer used! -->
<string name="pref_instant_delivery">Envoi Immédiat</string>
<string name="pref_background_notifications">Utiliser une connexion en arrière plan</string>
<string name="pref_reliable_service">Forcer une connexion en arrière plan</string>
<string name="pref_background_notifications_rationale">Pour maintenir une connexion à votre serveur de courriel et recevoir les messages en arrière-plan, ignorez l\'optimisation de la batterie à l\'étape suivante.\n\nArcaneChat utilise peu de ressources et prend garde à ne pas vider votre batterie.</string>
<!-- disabling "Reliable service" will hide a the maybe annoying permanent-notification with the drawback that new-message-notifications get potentially unreliable -->
<string name="perm_enable_bg_reminder_title">Touchez ici pour recevoir des messages pendant que DeltaChat est en arrière-plan.</string>
+5 -2
View File
@@ -295,6 +295,7 @@
<string name="videochat_tap_to_open">Toca para abrir</string>
<string name="videochat_instance">Instancia para video chat</string>
<string name="videochat_instance_placeholder">A túa instancia para video chat</string>
<!-- Do not translate "$ROOM", since it is a fixed token ArcaneChat will replace with a generated room ID like "aOclju5eCky" -->
<string name="videochat_instance_example">Exemplos: https://meet.jit.si/$ROOM ou basicwebrtc:https://your-server</string>
<string name="videochat_instance_explain_2">Se o chat por vídeo está activado, podes iniciar o chat de vídeo desde cada chat. Os chats de vídeo requiren unha app compatible ou un navegador compatible nos dous extremos.</string>
<string name="videochat_instance_from_qr">¿Usar \"%1$s\" para convidar a outras a chats de vídeo?\n\nUnha vez establecido podes iniciar o chat desde a conversa un-a-un. Esto restablece o axuste anterior para video chats se existise.</string>
@@ -498,13 +499,14 @@
<string name="login_smtp_port">Porto SMTP</string>
<string name="login_smtp_security">Seguridade SMTP</string>
<string name="login_auth_method">Método de autorización</string>
<!-- the word "SOCKS5" here and in the following strings should not be translated in most cases -->
<!-- deprecated -->
<string name="login_socks5">SOCKS5</string>
<string name="login_socks5_use_socks5">Usar SOCKS5</string>
<string name="login_socks5_host">Servidor SOCKS5</string>
<string name="login_socks5_port">Porto SOCKS5</string>
<string name="login_socks5_user">Usuaria SOCKS5</string>
<string name="login_socks5_password">Contrasinal SOCKS5</string>
<string name="login_info_oauth2_title">Continuar co axuste simplificado?</string>
<string name="login_info_oauth2_text">O enderezo introducido soporta o axuste simplificado (OAuth 2.0).\n\nNo seguinte paso, permite a ArcaneChat actuar como app de Conversa sobre Correo-e.\n\nNon hai servidores ArcaneChat, os teus datos permanecen no dispositivo.</string>
<string name="login_certificate_checks">Comprobacións do certificado</string>
@@ -750,7 +752,7 @@
<string name="devicemsg_storage_exceeding">⚠️ A almacenaxe do teu provedor vaise esgotar, xa utilizaches %1$s %%.\n\nPode que non recibas mensaxes cando a almacenaxe chegue a 100%% utilizado.\n\n👉 Mira se podes eliminar datos antigos na interface web do teu provedor e pensa se debes activar \"Axustes / Eliminar Mensaxes Antigas\". Podes ver a almacenaxe actual utilizada en \"Axustes / Conectividade\".</string>
<!-- %1%s will be replaced by date and time in some human-readable format -->
<string name="devicemsg_bad_time">⚠️ A hora ou data no teu dispositivo poderían ser incorrectas (%1$s).\n\nAxusta o reloxio ⏰🔧 para asegurar que as túas mensaxes son recibidas correctamente.</string>
<string name="devicemsg_update_reminder">⚠️ A túa versión de ArcaneChat podería estar desactualizada.\n\nEsto podería causar problemas porque os teus correspondentes utilizan versións máis novas - e ademáis non tes as últimas características 😳\nVai a https://get.delta.chat ou tenda de aplicacións para máis detalles.</string>
<string name="devicemsg_update_reminder">⚠️ A túa versión de ArcaneChat podería estar desactualizada.\n\nEsto podería causar problemas porque os teus correspondentes utilizan versións máis novas - e ademáis non tes as últimas características 😳\nVai a https://github.com/ArcaneChat ou tenda de aplicacións para máis detalles.</string>
<!-- Some options as "Add Second Device" or "Backup" may require the system PIN/Fingerprint/Gesture/Etc. to be entered in a system dialog. This hint is added to the system dialog, below a title as "Add Second Device" or "Backup". -->
<string name="enter_system_secret_to_continue">Escribe o código establecido no sistema para continuar.</string>
@@ -804,6 +806,7 @@
<string name="mailto_link_could_not_be_decoded">a ligazón mailto non se puido descodificar: %1$s</string>
<!-- notifications -->
<!-- deprecated, use mark_as_read or mark_as_read_short -->
<string name="notify_dismiss">Desbotar</string>
<string name="notify_reply_button">Responder</string>
<string name="notify_new_message">Nova mensaxe</string>

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